可以绘图了。

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代码正式版的更多相关文章

  1. 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,我都说 ...

  2. MyEclipse 2016正式版更新内容

    MyEclipse 2016 Stable 1.0正式发布!在保留之前CI系列的工具之外,又新增了许多非常棒的新功能.正式版下载地址 Eclipse Mars MyEclipse 2016基于Ecli ...

  3. Win10 PC一周年更新正式版14393.447 32位/64位更新补丁KB3200970下载 Flash补丁Kb3202790下载

    微软在今天凌晨推送了Win10 PC一周年更新正式版14393.447,本次更新补丁代号为KB3200970,面向Win10一周年更新正式版的PC用户. 更新日志 • 提升了多媒体音频.远程桌面以及I ...

  4. 【Android】Vitamio 4.0 正式版发布/ Vitamio IOS 测试版发布(2013-07-16)

    一.链接 Vitamio官网:http://www.vitamio.org/ 官网github地址:https://github.com/yixia 自己无法编译通过的这里下载: Vitamio 4. ...

  5. 初次体验VS2015正式版,安装详细过程。

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 安装 其他 本文版权归mephi ...

  6. 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!

    去年10-28号,我发布了一篇文章<海王星给你好看!FineUI v4.0公测版发布暨<你找BUG我送书>活动开始>,标志着FineUI开始向4.0版本迈进.经过4个月3个公测 ...

  7. Xcode 6 正式版如何创建一个Empty Application

    Xcode 6 正式版里面没有Empty Application这个模板,这对于习惯了纯代码编写UI界面的程序员来说很不习惯. 有网友给出了一个解决方法是,把Xcode 6 beta版里面的模板复制过 ...

  8. [C#HttpHelper]类1.4正式版教程与升级报告

       [C#HttpHelper]类1.4正式版教程与升级报告 导读 1.升级报告 2.HttpHelper1.4正式版下载 3.HttpHelper类使用方法, 4.最简单的Post与Get的写法 ...

  9. Appium路线图及1.0正式版发布

    Appium更新的速度极快,从我试用时候的0.12到1.0(0.18版本后就是1.0),完全符合移动互联网的节奏. 更新可能会慢,可以多试几次 整理了testerhome上思寒发表的帖子,让我们来看下 ...

随机推荐

  1. 在日志中记录Java异常信息的正确姿势

    遇到的问题 今天遇到一个线上的BUG,在执行表单提交时失败,但是从程序日志中看不到任何异常信息. 在Review源代码时发现,当catch到异常时只是输出了e.getMessage(),如下所示: l ...

  2. springboot:自定义缓存注解,实现生存时间需求

    需求背景:在使用springbot cache时,发现@cacheabe不能设置缓存时间,导致生成的缓存始终在redis中. 环境:springboot 2.1.5 + redis 解决办法:利用AO ...

  3. 开启和安装Kubernetes k8s 基于Docker For Windows

    0.最近发现,Docker For Windows Stable在Enable Kubernetes这个问题上是有Bug的,建议切换到Edge版本,并且采用下文AliyunContainerServi ...

  4. 【记录】【windows】下查看端口是否被占用并杀死该进程

    查看端口是否被占用 netstat -aon|findstr "端口号" 比如 netstat -aon|findstr "6340" 杀死该进程 taskki ...

  5. Java的集合类之 map 接口用法

    Map接口不是Collection接口的继承.而是从自己的用于维护键-值关联的接口层次结构入手.按定义,该接口描述了从不重复的键到值的映射. 我们可以把这个接口方法分成三组操作:改变.查询和提供可选视 ...

  6. 修改 Delphi 10.3.3 IDE 字体和字体大小

    Delphi 10.2.2 之前,可以通过 IDE视觉设置的系统注册表项 修改字体和字体大小,因为 Delphi 10.2.2 IDE增加了主题,主题包含了字体信息, 此方法失效了.对于高分辨率屏幕, ...

  7. day51——对象、BOM对象、DOM对象

    day51 JSON对象 var a = {'name':'太白','age':89}; 序列化:var b = JSON.stringify(a); 反序列化:var c = JSON.parse( ...

  8. golang 之文件操作

    文件操作要理解一切皆文件. Go 在 os 中提供了文件的基本操作,包括通常意义的打开.创建.读写等操作,除此以外为了追求便捷以及性能上,Go 还在 io/ioutil 以及 bufio 提供一些其他 ...

  9. pytest_html报告报错截图+失败重跑

    前言 做web自动化的小伙伴应该都希望在html报告中展示失败后的截图,提升报告的档次,pytest-html也可以生成带截图的报告. conftest.py 1.失败截图可以写到conftest.p ...

  10. 架构 MVC MVP MVVM 简介 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...