栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

关于pygame和tkinter窗口的那件事-线程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于pygame和tkinter窗口的那件事-线程

pygame与tkinter关于窗口的问题

pygame和tkinter实际上都是一个可视化界面,在第一层父窗口上几乎没有区别,tkinter使用Tk()+mainloop()+按键对象+放置 而pygame使用set_mode+update+按键对象+按键对象属性设置(一般是位置),但是关于使用子窗口是有明显区别的。
tkinter创建子窗口时如果只是显示,不对窗口操作(点击按钮,输入等),则直接使用Tk()创建窗口即可。如一些数据展示窗口。但是如果需要对子窗口进行操作eg:数据写入,按钮+响应等等,就需要使用到顶层子窗口Toplevel()。

从线程角度说明他们的不同点

tkinter使用单线程,如果只是开启窗口显示,不涉及对主线程的内容修改,则可以开启多个这样的子窗口(严格上说这不是真正意义的子窗口,因为与主窗口没有进行数据操作,算是一个额外的线程)。但是如果需要子窗口对主线程中的数据(也可能是我们导入的数据)进行修改,就需要用到Toplevel(相当于一个额外的线程+主线程中的内部类),它可以修改主线程中的内部数据,传递参数等等。
概括:使用tkinter做图形窗口时,如果窗口涉及操作直接使用toplevel。其他只需可视化的情况使用Tk也是可行的。

实例说明:
我在做一个计算器的扩展功能-贷款计算时,遇到了这个问题。
问题描述:
在贷款计算之前,添加了一个纯展示的子窗口(tk实现)功能,打开后父窗口可以正常运行。然后使用了同样的方法做了贷款窗口,因为过程中涉及到了窗口的输入,对主线程中的数据进行了修改,虽然父窗口正常运行但是子窗口报错了。
解决:
将贷款的实现窗口修改为tk.toplevel()
pygame也是单线程的,但是其没有类似tkinter中的toplevel,不能创建同时运行的两个窗口。创建子窗口(tkinter窗口)时pygame会暂停了父窗口任务,将资源给了给刚创建的子窗口,在子窗口返还资源之前(关闭之前),父窗口会一直处于未响应状态(等待返还主线程的资源)。
实例说明:
在做拼图游戏的原图显示功能时,发现了这个问题。当显示原图(子窗口)时,主窗口处于未响应状态,关闭子窗口后,主窗口正常响应。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317027.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号