【发布时间】:2014-01-13 07:03:08
【问题描述】:
我正在使用 Tkinter 创建一个小时间管理工具,这样我就可以在工作中继续完成任务。我在某个方面遇到了问题,我似乎无法开始工作。我正在使用错误框,以便它显示在所有其他窗口的前面。
就像现在一样,程序在一个跟踪时间的函数上启动一个新线程,并将它与用户为他们的任务输入的时间进行比较。一旦实时 > 用户输入的时间,它就会启动另一个线程来生成 tkMessageBox。我已经尝试过了,没有启动一个新线程来生成 tkMessageBox,问题是一样的。如果用户为 2 个单独的任务输入相同的时间,则错误弹出窗口会冻结。我在查找有关此主题的信息时遇到了麻烦...这种行为很奇怪,因为如果我有 2 个警报,假设 0600 有 1 个,0601 有一个,但我没有关闭第一个弹出的错误框并让它熬夜直到第二个警报触发,第二个警报将替换第一个警报(如果可能,我希望弹出多个错误框)。但是,只有具有相同触发时间的警报才会导致弹出窗口冻结。
这是我的第一个 GUI 程序,过去 24 小时才开始学习线程和 GUI 的概念,所以我不确定这是线程问题还是 tkMessageBox 的问题。由于错误框的行为,我认为它是线程模块与 tkMessageBox 模块的结合。我正在使用的命令是:
tkMessageBox.showerror('TIMER ALERT!!!', comp_msg)
Here is the source 我把 cmets 放在那里帮忙。我说的 tkMessageBox 是第 56 行。
我想我什至不确定我是否可以用弹出框做我想做的事情,如果可以的话,我不知道该怎么做。如果我不能,是否有另一种方法可以使用 Tkinter 生成多个错误类型的弹出框?我只想在任何给定时间出现多个框。
提前致谢,非常感谢任何帮助。
编辑:
import thread
from Tkinter import *
#Spawns Error Box. Runs in it's own thread.
def message_box(comp_msg,q): # q is an empty string because of thread module.
print "Spawning Error Box..."
eb =Toplevel()
eb.config(master=None,bg="red")
pop_l = Label(eb,text="ALERT!!!")
pop_l2=Label(eb,text=comp_msg)
pop_l.pack(pady=10,padx=10)
pop_l2.pack(pady=15,padx=10)
return eb
thread.start_new_thread(message_box,(comp_msg,""))
【问题讨论】:
标签: python multithreading tkinter