tkinter页面卡死
tkinter界面卡死的解决办法
1、如果点击按钮,运行了一个比较耗时的操作,那么界面会卡死

- import tkinter as tk
- import time
- def onclick(text, i):
- time.sleep(3)
- text.insert(tk.END, '按了第{}个按钮\n'.format(i))
- root = tk.Tk()
- text = tk.Text(root)
- text.pack()
- tk.Button(root, text='按钮1', command=lambda :onclick(text,1)).pack()
- tk.Button(root, text='按钮2', command=lambda :onclick(text,2)).pack()
- root.mainloop()

解决办法:
方式一、直接开线程
方式二、继承 threading.Thread 类

- import tkinter as tk
- import time
- import threading
- songs = ['爱情买卖','朋友','回家过年','好日子']
- movies = ['阿凡达','猩球崛起']
- def music(songs):
- global text # 故意的,注意与movie的区别
- for s in songs:
- text.insert(tk.END, "听歌曲:%s \t-- %s\n" %(s, time.ctime()))
- time.sleep(3)
- def movie(movies, text):
- for m in movies:
- text.insert(tk.END, "看电影:%s \t-- %s\n" %(m, time.ctime()))
- time.sleep(5)
- class MyThread(threading.Thread):
- def __init__(self, func, *args):
- super().__init__()
- self.func = func
- self.args = args
- self.setDaemon(True)
- self.start() # 在这里开始
- def run(self):
- self.func(*self.args)
- root = tk.Tk()
- text = tk.Text(root)
- text.pack()
- tk.Button(root, text='音乐', command=lambda :MyThread(music, songs)).pack()
- tk.Button(root, text='电影', command=lambda :MyThread(movie, movies, text)).pack()
- root.mainloop()

三、或者,搞一个界面类:

- import tkinter as tk
- import time
- import threading
- songs = ['爱情买卖','朋友','回家过年','好日子']
- films = ['阿凡达','猩球崛起']
- class Application(tk.Tk):
- def __init__(self):
- super().__init__()
- self.createUI()
- # 生成界面
- def createUI(self):
- self.text = tk.Text(self)
- self.text.pack()
- tk.Button(self, text='音乐', command=lambda :self.thread_it(self.music, songs)).pack(expand=True, side=tk.RIGHT) # 注意lambda语句的作用!
- tk.Button(self, text='电影', command=lambda :self.thread_it(self.movie, films)).pack(expand=True, side=tk.LEFT)
- # 逻辑:听音乐
- def music(self, songs):
- for x in songs:
- self.text.insert(tk.END, "听歌曲:%s \t-- %s\n" %(x, time.ctime()))
- print("听歌曲:%s \t-- %s" %(x, time.ctime()))
- time.sleep(3)
- # 逻辑:看电影
- def movie(self, films):
- for x in films:
- self.text.insert(tk.END, "看电影:%s \t-- %s\n" %(x, time.ctime()))
- print("看电影:%s \t-- %s" %(x, time.ctime()))
- time.sleep(5)
- # 打包进线程(耗时的操作)
- @staticmethod
- def thread_it(func, *args):
- t = threading.Thread(target=func, args=args)
- t.setDaemon(True) # 守护--就算主界面关闭,线程也会留守后台运行(不对!)
- t.start() # 启动
- # t.join() # 阻塞--会卡死界面!
- app = Application()
- app.mainloop()

tkinter页面卡死的更多相关文章
- 嵌套ajax 页面卡死的问题
问题:要一个AJAX中的回调函数中又进行了一个AJAX调用,并且这个AJAX是在一个循环调用的,不论设置async属性是true和false页面卡死. 解决方法:async属性都设为true,不用循环 ...
- 记一次H5页面卡死的BUG
之前有次开发小程序内嵌页面,类似于网易星球那种,很多钻石可以手动点击收取. 该页面css动效非常多,几乎页面上除了纯色背景之外全部有动效. 也正因为如此,才做成了小程序内嵌的形式(太大了). 当多次快 ...
- ajax 多个setInterval进行ajax请求的页面长时间打开会出现页面卡死问题
多个setInterval进行ajax请求的页面长时间打开会出现页面卡死问题 浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉.当我们执行异步ajax的时候没有问 ...
- JavaScript 上万条数据 导出Excel文件 页面卡死
最近项目要js实现将数据导出excel文件,网上很多插件实现~~那个开心呀,谁知道后面数据量达到上万条时出问题:浏览器不仅卡死,导出的excel文件一直提示网络失败.... debug调试发现var ...
- tkinter界面卡死的解决办法
0.如果点击按钮,运行了一个比较耗时的操作,那么界面会卡死 import tkinter as tk import time def onclick(text, i): time.sleep(3) t ...
- iOS 第一次安装应用,拒绝相机调用,页面卡死的解决方案
void (^allowBlock)() = ^{ UIImagePickerController *imagePicker = [[UIImagePickerController alloc] in ...
- Myeclipse10打开jsp页面卡死问题
在Myeclipse的选项中.General->Editor->File Associations.在上边找到*.jsp.在下边设置Myeclipse JSP Editer为默认编辑器.以 ...
- 移动端H5页面遇到的问题总结
最近刚做完一个移动端的项目,产品之无敌,过程之艰辛,我就不多说了,记录下在这个项目中遇到的问题,以防万一,虽然这些可能都是已经被N多前辈解决掉了的问题,也放在这里,算是为自己漫漫前端路铺了一颗小石子儿 ...
- IE之页面加载慢.
场景 场景是大屏页面一张深色背景, 里面一些文本元素以及图表展示. 结果在IE下发现加载异常缓慢, 还有部分人员反馈页面卡死. 后台读写优化 默认处理图片逻辑是, ImageIO读取原图, 转成byt ...
随机推荐
- Linux ps和pstree命令
1. 查看所有进程 ps -eF -e: Select all processes.-F: Extra full format. PSR (Processor)显示进程所在的CPU. 2. 查看所有进 ...
- Java Web 笔记(1)
JavaWeb 学习笔记,狂神说java,链接:https://www.bilibili.com/video/av68833391 Java Web 1.基本概念 1.1.前言 web开发: web, ...
- checkbox 样式重写
css样式 .me-checkbox:checked { background: #1673ff } .me-checkbox { outline: none;/*轮廓*/ width: 25px; ...
- CSS中before、after伪类选择器的巧用
大家好,今天给大家带来使用css中 before . after 实现两个效果,话不多说,我们先来看看, before 和 after 它们的作用是什么 选择器 作用 before 向选定的元素前插入 ...
- (办公)记事本_linux关机和重启命令
参考谷粒学院的linux视频教程:http://www.gulixueyuan.com/course/300/task/7091/show .sync Linux sync命令用于数据同步,sync命 ...
- 服务器CentOS7上安装MySql
1.确保服务器系统处于最新状态 [root@localhost ~]# yum -y update如果显示以下内容说明已经更新完成Replaced:grub2.x86_64 1:2.02-0.64.e ...
- 一维数组、二维数组——Java
一. 一维数组 1. 数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ...
- 请写一个java类,在任何时候都可以向它查询“你已经创建了多少个对象?”
这个问题解决方法很简单,只要设置一个类的静态整型成员(事例中我设置的是n),初始化值为1,然后在其构造函数中添加语句使其+1(n++),这样需要查询创建了多少个对象时直接查询n的值就可以了,如下: p ...
- Java中WEAK_PASSWORD_HASH的修改策略
在采用SHA-256对数据进行加密时,我们可以直接采用下面的方式进行处理: public static String encodeBySha256(String content) { String e ...
- Google Chrome 退出清除浏览数据
版本 79.0.3945.88(正式版本) (64 位) 设置-高级-隐私设置和安全性-网站设置-Cookie和网站数据-退出Chrome时清除Cookie及网站数据.