tkinter改进了随机显示图片
随机显示,还加了圆圈,这样感觉更好点。
from django.test import TestCase
# Create your tests here.
import random
import json
import time
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(xxx_name)
with open(xxx_name, 'r') as load_f:
global card_dict
card_dict = json.load(load_f)
# 画圆
def draw_circle(cvs, x, y, r, **kwargs):
return cvs.create_oval(x-r, y-r, x+r, y+r, **kwargs)
# 绘图
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)
# 先形成一个大列表,便于后面打乱了显示或成行成列显示
card_pos = [x1 + gap_size, y1 + gap_size, imgs]
imgs_list.append(card_pos)
# 为了效果好,随机显示
random.shuffle(imgs_list)
for item in imgs_list:
# 以nw左上角为基准点, 先大图出现,提示一下重点,加点透明GIF,就完美了
# img_big = ImageTk.PhotoImage(item[3])
# cv.create_image((item[0], item[1]), anchor='nw', image=img_big, tag='tmp_resize')
cv.create_image((item[0], item[1]), anchor='nw', image=item[2])
draw_circle(cv, item[0] + card_size / 2, item[1] + card_size / 2, 20, width=', outline="green",
tag='tmp_circle')
cv.update()
# 停一下
time.sleep(0.5)
# 删除圆圈,只作动画
cv.delete('tmp_circle')
# 不调用update,不会更新画布
cv.update()
time.sleep(10)
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()
tkinter改进了随机显示图片的更多相关文章
- php 随机显示图片的函数(实例分享)
转自:http://www.jbxue.com/article/12695.html 发布:thatboy 来源:Net [大 中 小] 本文分享一个php实现的随机显示图片的函数,可以将 ...
- php 随机显示图片的函数(实例)
转自:http://www.jbxue.com/article/12695.html 发布:thatboy 来源:Net [大 中 小] 本文分享一个php实现的随机显示图片的函数,可 ...
- JS实现的随机显示图片
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- Python3 tkinter基础 Label imag显示图片
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- js随机显示图片
定义一个图片数组,生成一个随机数对应数据索引. window.onload = choosePic; function choosePic() { var myPix = new Array(&quo ...
- jq实现随机显示部分图片在页面上(兼容IE5)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- PHP生成随机水印图片
基于PHP的GD图形库,自己生成一张图片.仅限初识GD库,实例学习. 一.需求 网站的布局用到了类似慕课网课程列表的风格,每一个课程是一个banner图,图下面是标题加简介.因为课程的数量较大没有为所 ...
- Tensorflow显示图片
Tensorflow在处理数据时,经常加载图像数据,有的时候是直接读取文件,有的则是读取二进制文件,为了更好的理解Tensorflow数据处理模式,先简单讲解显示图片机制,就能更好掌握是否读取正确了. ...
- 随机漂浮图片、右侧上下浮动快捷栏JS
随机漂浮图片JS: //公共脚本文件 main.js function addEvent(obj,evtType,func,cap){ cap=cap||false; if(obj.addEventL ...
随机推荐
- java上传文件类型检测
在进行文件上传时,特别是向普通用户开放文件上传功能时,需要对上传文件的格式进行控制,以防止黑客将病毒脚本上传.单纯的将文件名的类型进行截取的方式非常容易遭到破解,上传者只需要将病毒改换文件名便可以完成 ...
- Java reactor响应式编程
转载自:https://www.cnblogs.com/lixinjie/p/a-reactive-streams-on-jvm-is-reactor.html 响应式编程 作为响应式编程方向上的第一 ...
- javascript (0, obj.prop)()的用法
我第一次看到这种奇怪的用法是在babel的源码中, 其实它的原理就是使得在prop这个方法里无法获取this, 从而无法对类中的其他变量或方法做操作. obj.prop() 这是一个方法调用, pro ...
- identity server4
dotnet new -i identityserver4.templates 添加模板
- 玩机之HUAWEI_Nova
Nova是一款挺早的机型了.最开始使用华为就觉得这一款最好挺好用,屏幕小巧功能强大.当然也离不开手机,最早的TWRP就是在此机型上初步尝试成功,也算学习,那时候还没有玩过.这部手机算是改机最完美的一部 ...
- Java常用函数式接口--Predicate接口使用案例
Java常用函数式接口--Predicate接口使用案例 该方法可以使用and来优化: 调用:
- UOJ399 CTSC2018 假面 期望、DP
传送门 \(Q \leq 200000 , C \leq 1000 , m_i \leq 100\)-- 先考虑如何维护最后一次操作时所有人的血量期望.不难发现我们需要的复杂度是\(O(Qm_i)\) ...
- ELK 索引生命周期管理
kibana 索引配置 管理索引 点击设置 --- Elasticsearch 的 Index management 可以查看 elk 生成的所有索引 (设置,Elasticsearch ,管理) 配 ...
- (四) Docker 使用Let's Encrypt 部署 HTTPS
参考并感谢 周花卷 https://www.jianshu.com/p/5afc6bbeb28c 下载letsencrypt镜像(不带tag标签则表示下载latest版本) docker pull q ...
- InputStream和OutputStream及相关知识汇总
https://www.jianshu.com/p/e5bc7ea5f948 最近帮学姐写爬虫的时候遇到奇怪的问题,同样的程序在Mac上可以正常运行而在Windows上返回结果错误,最后经排查发现是L ...