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上思寒发表的帖子,让我们来看下 ...
随机推荐
- 【C/C++开发】C++11:左值引用VS右值引用
左值引用VS右值引用 左值引用对于一般的C++程序员再熟悉不过,但对于右值引用(C++0X新特性),就稍微有点不知所云 左值VS右值 在定义变量的时候,经常会用到左值和右值,比如:int a = 1; ...
- 2019广东外语外贸大学CTF新手赛-密码学-RSA题解
题面 n=100000463700003241 e=17 密文: 分析: 题面已明示是RSA加密,已公开n与公钥e,n为1e18内的数字(64位).要爆破RSA,显然是先分析n的值. n的值是由两个素 ...
- [源码]Python调用C# DLL例子(Python与.Net交互)
K8Cscan C# DLL例子代码 namespace CscanDLL { public class scan { public static string run(string ip) { if ...
- 虚拟机centos与主机互相Ping通
在虚拟机(Vmware Workstation)下,安装了CentOS7,现在想通过SSH工具连接虚拟机中的CentOS7 1. 首先,要确保CentOS7安装了 openssh-server,在 ...
- Idea Spring 、SpringBoot相关设置技巧
1.Spring变量依赖注入出现红色波浪线 Could not autowire. No beans of 'UserMapper' type found. less... (Ctrl+F1) Che ...
- 文件和异常练习2——python编程从入门到实践
10-6 加法运算:提示用户输入提供数值输入,常出现的一个问题是,用户提供的是文本而不是数字.这种情况下,当你尝试将输入转换为整数时,将 引发TypeError异常.编写一个程序,提示用户输入两个数字 ...
- AVR单片机教程——EasyElectronics Library v1.3手册
bit.h delay.h pin.h wave.h pwm.h tone.h adc.h button.h switch.h rotary.h pot.h ldr.h led.h rgbw.h se ...
- Spring Boot与mybatis整合
完整的项目截图 一:pom依赖 新增ojdbc6及batis-spring-boot-starter依赖 <dependency> <groupId>com.oracle< ...
- C++ 的多继承与虚继承
C++之多继承与虚继承 1. 多继承 1.1 多继承概念 一个类有多个直接基类的继承关系称为多继承 多继承声明语法 class 派生类名 : 访问控制 基类名1, 访问控制 基类名2, ... { ...
- maven的setting配置文件中mirror和repository的区别
当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 . 这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 , maven认为目标仓 ...