我有一个使用Tkinter作为GUI的Python脚本。我的小脚本应该每X秒创建一个顶级小部件。当我运行代码时,第一个“顶级”窗口小部件被成功创建,但是当它尝试创建第二个“窗口小部件”时,程序崩溃。
我正在做的是使用after方法每隔5秒钟与root的mainloop一起调用一次函数startCounting。每次调用此函数时,我都会将Toplevel小部件对象追加到列表中并启动一个新线程,该线程有望运行新的mainloop。
如果有人能解决这个问题,我将不胜感激。顺便说一下,这只是我目前用来解决问题的一个小脚本,这使我无法继续进行实际的学校项目。
编码:
import threading,thread
from Tkinter import *
def startCounting():
global root
global topLevelList
global classInstance
topLevelList.append (Toplevel())
topLevelList[len(topLevelList)-1].title("Child")
classInstance.append(mainLoopThread(topLevelList[len(topLevelList)-1]))
root.after(5000,startCounting)
class mainLoopThread(threading.Thread):
def __init__(self,toplevelW):
self.toplevelW = toplevelW
threading.Thread.__init__(self)
self.start()
def run(self):
self.toplevelW.mainloop()
global classInstance
classInstance = []
global topLevelList
topLevelList = []
global root
root = Tk()
root.title("Main")
startCounting()
root.mainloop()
Tkinter设计为仅从主线程运行。见文档:
只需在主线程中运行所有UI代码,然后让编写者将其写入Queue对象即可;例如
……然后是一个重要的示例,显示了辅助线程将请求写入队列,而主循环专门负责与Tk的所有直接交互。
许多对象和子系统不喜欢接收来自多个线程的请求,在使用GUI工具箱的情况下,不需要专门使用 主 线程。
解决此问题的正确Python架构始终是为服务挑剔的对象或子系统分配一个线程(如果需要,则使用一个主线程)。所有其他需要与所述子系统或对象进行交互的线程都必须通过将请求排队到专用线程来获得它(如果由于某些请求而需要结果,则可能在“返回队列”中等待结果)。这也是用于通用线程的非常完善的Python体系结构(我在“坚果壳中的Python”中对此进行了详尽的阐述,但这是另一个主题;-)。
学习路径: 写一个脚本 给 shell 执行脚本的权限 将脚本放到 shell 可以找到的地方 写一个脚本 shell 脚本是一个包含 ASCII 文本的文件。使用 文本编辑器 来创建脚本。文本编辑器用于读写 ASCII 文本文件。Linux 系统中有许多文本编辑器,包括支持命令行的,和支持 GUI 环境的。以下列出一些: 名称 描述 实现 vi,vim 编辑器的祖先。比较难用,但是强大、轻量并且
问题内容: 我是Python的新手。我想创建一个以图像为背景的应用程序。但是,当我在图像上添加“标签”时,标签上会看到白色背景。我们是否可以将“标签”小部件的颜色设置为“透明”? 问题答案: 我不知道一种使Label背景透明的方法。一种选择是使用Canvas小部件作为整个对象的基础,然后使用该方法添加背景图像并创建文本标签。这将需要更多的工作,但是文本应该在图像顶部没有背景的情况下呈现。(诚然
问题内容: 我正在使用一个简单的消息传递系统,并且需要将以下内容添加到Tkinter文本小部件中: 拼写检查 更改字体的选项(在选定的文本上) 更改字体颜色的选项(在选定的文本上) 更改字体大小的选项(在选定的文本上) 我了解tkinter文本小部件可以通过标记机制使用多种字体和颜色,但是我不知道如何利用这些功能。 如何使用“文本”小部件的功能实现这些功能?具体来说,如何更改字体系列,单词的颜色和
每当它试图创建一条线时就会崩溃。我想用PathOverlay,但已经不推荐了。我想画一条线。 梯度控制台 正在执行任务“:app:validateSigningDebug”(最新检查耗时0.0秒),原因是:任务尚未声明任何输出:app:validateSigningDebug(线程[Daemon worker Thread 2,5,main])已完成。花了0.022秒:应用程序:packageDe
问题内容: 我已经使用线程编写了python tkinter代码,以便tkinter向导通过在主线程中运行的tkinter mainloop和在单独线程中运行的后台进程自动更新。但是我注意到,运行代码一段时间后python崩溃了。此外,它本质上是随机的,但python大部分时间都崩溃。我写了一个小的测试代码来显示这个问题(我的原始代码与此类似,但是具有一些实际的过程和许多其他功能,因此我将共享测试
问题内容: 我正在做一个项目,要求我在Tkinter标签窗口小部件中的某些文本下划线。我知道可以使用下划线方法,但是基于参数,我似乎只能使它在小部件的1个字符下划线。即 我需要能够在小部件中的所有文本下划线,我敢肯定这是可能的,但是如何? 我在Windows 7上使用Python 2.6。 问题答案: 要对标签小部件中的所有文本加下划线,您需要创建一个将underline属性设置为True的新字体