【发布时间】:2014-04-02 17:30:07
【问题描述】:
我的 tkinter 应用程序有 2 个线程(我需要它们),我在 stackoverflow 上找到了一个很棒的函数 tkloop(),它是为 tkinter-only-one-main-thread 制作的;它使用队列。当我这样做时,它确实显示 tkMessagebox:
self.q.put((tkMessageBox.askyesno,("Cannot download it", "Download \"" + tag +"\" via internet site"),{}, self.q1 ))
但是当我创建自己的函数时,它以某种方式不执行该函数
self.q.put((self.topleveldo,(resultlist),{},None))
只有一个类 App:
self.q=Queue()
def tkloop(self):
try:
while True:
f, a, k, qr = self.q.get_nowait()
print f
r = f(*a,**k)
if qr: qr.put(r)
except:
pass
self.okno.after(100, self.tkloop)
def topleveldo(resultlist):
print ("executed - actually this never prints")
self.choice=Toplevel()
self.choices=Listbox(self.choice)
for result in resultlist:
self.choices.insert(END,str(result))
choosebutton=Button(text="Vybrat",command=self.readchoice)
def readchoice(self):
choice=int(self.choices.curselection())
self.choice.destroy()
self.q1.put(choice)
App 类方法中的另一个代码,由第二个线程运行:
def method(self):
self.q1=Queue()
self.q.put((self.topleveldo,(resultlist),{},None))
print ("it still prints this, but then it waits forever for q1.get, because self.topleveldo is never executed")
choice=self.q1.get()
【问题讨论】:
标签: python multithreading python-2.7 tkinter queue