tkinter代码正式版
可以绘图了。
import json
import tkinter as tk
from tkinter import filedialog
from tkinter import LabelFrame
from tkinter import StringVar
from PIL import Image, ImageTk
# 方块大小
card_size = 120
# 间隙大小
gap_size = 2
# 绘图起点坐标
start_x = 400
start_y = 100
# 7 * 5 方格
x_grid = 7
y_grid = 5
# 打开文件,载入json文件
def open_file():
xxx_name = filedialog.askopenfilename(title='打开文件',
filetypes=[('json', '*.json'),
('All Files', '*')])
# 更新Label text变量
var.set(wzj_name)
with open(xxx_name, 'r') as load_f:
global card_dict
card_dict = json.load(load_f)
# 绘图
def draw_card():
# 这个打开文件,用的是回调函数,我暂时也不知道如何不用这个全局变量
global card_dict
imgs_list = []
for i in range(y_grid):
y1 = start_y + i * card_size
for j in range(x_grid):
x1 = start_x + j * card_size
# 解析json里对应的文件名
image_num = card_dict[str(i+1)][str(j+1)]
image_path = "images/{}.png".format(image_num[0].upper())
# 载入图片
img = Image.open(image_path)
# 重定义大小
img = img.resize((card_size-gap_size, card_size-gap_size), Image.BILINEAR)
# 重定义旋转
img = img.rotate(image_num[1])
imgs = ImageTk.PhotoImage(img)
# 一定要放在列表里,要不然,后面的图会刷掉前面的图
imgs_list.append(imgs)
# 每一次都全绘已有图片
for item in imgs_list:
# 以nw左上角为基准点
cv.create_image((x1+gap_size, y1+gap_size), anchor='nw', image=item)
# 不调用update,不会更新画布
win.update()
# 停一秒再作下一步动作
win.after(500)
# 不让图消失太快
win.after(100000)
win = tk.Tk()
win.title('tkinter')
w = win.winfo_screenwidth()
h = win.winfo_screenheight()
win.geometry("%dx%d" % (w, h))
cv = tk.Canvas(win, bg='silver', width=w, height=h)
# 要更新label的text,要用var.set方法才行
var = StringVar()
var.set("...")
lab_fra = LabelFrame(win, height=200, width=300, text='选择文件')
lab_fra.pack(side='top', fill='both', expand=True)
btn_open = tk.Button(lab_fra, text='打开文件', command=open_file)
btn_open.grid(row=0, column=0)
btn_render = tk.Button(lab_fra, text='开始渲染', command=draw_card)
btn_render.grid(row=0, column=1)
text_label = tk.Label(lab_fra, textvariable=var)
text_label.grid(row=0, column=2)
# 画格子, 要算好横纵坐标
for i in range(y_grid):
y1 = start_y + i * card_size
for j in range(x_grid):
x1 = start_x + j * card_size
cv.create_rectangle(x1, y1, x1 + card_size, y1 + card_size)
cv.pack()
win.mainloop()
读取文件的样式
{
"1": {
"1": ["39A", 90],"2": ["24A", 0],"3": ["2A", 0],"4": ["55a", 180],
"5": ["2a",0],"6": ["14a",0],"7": ["39a",0]
},
"2": {
"1": ["9A", 90],"2": ["73A", 0],"3": ["74A", 0],"4": ["8B", 90],
"5": ["68a",0],"6": ["69a",0],"7": ["22a",90]
},
"3": {
"1": ["51A", 90],"2": ["38A", 270],"3": ["36A", 90],"4": ["60B", 0],
"5": ["31a",0],"6": ["18b",270],"7": ["6a",90]
},
"4": {
"1": ["14A", 90],"2": ["81A", 0],"3": ["82A", 0],"4": ["10B", 90],
"5": ["83a",0],"6": ["67a",0],"7": ["12a",90]
},
"5": {
"1": ["39A", 180],"2": ["34A", 0],"3": ["24A", 0],"4": ["64a", 180],
"5": ["34b",0],"6": ["8a",0],"7": ["39a",270]
}
}
{
"1": {
"1": ["39A", 90],"2": ["18A", 270],"3": ["39a", 90],"4": ["38a", 270],
"5": ["53b",0],"6": ["39b",0],"7": ["18b",0]
},
"2": {
"1": ["64a", 90],"2": ["20b", 0],"3": ["55A", 90],"4": ["18a", 0],
"5": ["31a",90],"6": ["39b",180],"7": ["39b",270]
},
"3": {
"1": ["9A", 90],"2": ["18A", 0],"3": ["9A", 90],"4": ["9a", 90],
"5": ["9b",90],"6": ["39b",90],"7": ["39b",0]
},
"4": {
"1": ["4A", 90],"2": ["6A", 90],"3": ["9A", 90],"4": ["4A", 90],
"5": ["39b",180],"6": ["39b",270],"7": ["13b",90]
},
"5": {
"1": ["39a", 180],"2": ["53A", 180],"3": ["51A", 180],"4": ["53a", 180],
"5": ["8a",0],"6": ["38b",270],"7": ["39b",270]
}
}
tkinter代码正式版的更多相关文章
- Zend Studio 12.0.2正式版发布和破解方法,zend studio 12.0.1汉化,相式设置为Dreamweaver,空格缩进为4个, 代码默认不折叠的设置,Outline中使用的图形标志,代码颜色之eot设置。
背景:zend studio 12.0.2 修复了一个12.0.1的: Fixed problem with referenced variables marked as undefined,我都说 ...
- MyEclipse 2016正式版更新内容
MyEclipse 2016 Stable 1.0正式发布!在保留之前CI系列的工具之外,又新增了许多非常棒的新功能.正式版下载地址 Eclipse Mars MyEclipse 2016基于Ecli ...
- Win10 PC一周年更新正式版14393.447 32位/64位更新补丁KB3200970下载 Flash补丁Kb3202790下载
微软在今天凌晨推送了Win10 PC一周年更新正式版14393.447,本次更新补丁代号为KB3200970,面向Win10一周年更新正式版的PC用户. 更新日志 • 提升了多媒体音频.远程桌面以及I ...
- 【Android】Vitamio 4.0 正式版发布/ Vitamio IOS 测试版发布(2013-07-16)
一.链接 Vitamio官网:http://www.vitamio.org/ 官网github地址:https://github.com/yixia 自己无法编译通过的这里下载: Vitamio 4. ...
- 初次体验VS2015正式版,安装详细过程。
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 安装 其他 本文版权归mephi ...
- 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!
去年10-28号,我发布了一篇文章<海王星给你好看!FineUI v4.0公测版发布暨<你找BUG我送书>活动开始>,标志着FineUI开始向4.0版本迈进.经过4个月3个公测 ...
- Xcode 6 正式版如何创建一个Empty Application
Xcode 6 正式版里面没有Empty Application这个模板,这对于习惯了纯代码编写UI界面的程序员来说很不习惯. 有网友给出了一个解决方法是,把Xcode 6 beta版里面的模板复制过 ...
- [C#HttpHelper]类1.4正式版教程与升级报告
[C#HttpHelper]类1.4正式版教程与升级报告 导读 1.升级报告 2.HttpHelper1.4正式版下载 3.HttpHelper类使用方法, 4.最简单的Post与Get的写法 ...
- Appium路线图及1.0正式版发布
Appium更新的速度极快,从我试用时候的0.12到1.0(0.18版本后就是1.0),完全符合移动互联网的节奏. 更新可能会慢,可以多试几次 整理了testerhome上思寒发表的帖子,让我们来看下 ...
随机推荐
- darkflow测试和训练yolo
转自 https://blog.csdn.net/u011961856/article/details/76582669参考自github:https://github.com/thtrieu/dar ...
- ufw防火墙规则不生效
正式站系统是Ubuntu 16.04.6 一.今天一个项目有百度爬出,在nginx中封掉还在一直爬取,都403还不停爬取 二.在uwf封掉爬出ip,想封掉80端口没有用,然后封掉整个网段还是没有用,尴 ...
- RobotFrameWork基本语法练习
1.基本使用如下图 2.运行日志如下(可对照查看语句输出) Starting test: Test.Test Suite.test_case1 20180810 15:48:58.525 : INFO ...
- docker安装ES,Kibana
docker安装ES 1.docker pull elasticsearch:6.8.2 2.docker run -it --name elasticsearch -d -p 9200:9200 ...
- springboot结合日志门面SLF4j和日志实现Logback的使用
一.此处主要介绍在springboot工程下如何使用 logback + slf4j 进行日志记录. logback主要包含三个组成部分:Loggers(日志记录器).Appenders(输出目的在 ...
- js中常见的创建对象的方法(1)
工厂模式:抽象了创建具体对象的过程 function createPerson(name, age, job){ var obj = new Object(); obj.name = name; ob ...
- 虚拟机CentOS克隆
1.什么是克隆 就是以某虚拟机为母版,复制出一个一模一样的虚拟机出来,包括里面的数据 2.创建克隆 正常选择通过快照创建克隆(只能是关机状态下的克隆) 1.选择关机状态下的快照,然后点击克隆 2.点击 ...
- go包管理
摘自: http://blueskykong.com/2019/02/18/go-dep-1/ https://www.cnblogs.com/apocelipes/p/10295096.html#v ...
- windwos源码安装mysql
进入官网下载相关的mysql安装文件,解压到指定目录如E:\mysql-5.7.23-winx64下,然后进入该目录下新建data文件夹与my.ini文件,在my.ini文件中 [mysqld] po ...
- CF241E Flights 差分约束
传送门 差分约束永远是Itst最烂的图论知识点没有之一qwq 先用dfs把在\(1\)到\(N\)的路径上的所有点都拿出来,其他的点和边状态任意都不会影响答案. 然后考虑设\(dis_i\)表示从\( ...