1
我想通過使用Queus和線程連接raw_input()到Tkinter gui。這裏是我的代碼:Python的Tkinter,隊列,線程,給出了堆棧空間錯誤
import Tkinter
import time
import threading
import Queue
class UI(Tkinter.Frame):
def __init__(self, master=None, queue=None):
self.queue = queue
Tkinter.Frame.__init__(self, master)
self.master.title("what does console say")
self.master.minsize(40, 30)
swd = self.master.winfo_screenwidth()
fwd = 320
fht = 240
self.master.geometry('{0:d}x{1:d}+{2:d}+{3:d}'.format(
fwd, fht, swd - fwd, 0))
self.message = Tkinter.StringVar()
mesgbox = Tkinter.Label(master, textvariable=self.message)
mesgbox.pack(fill=Tkinter.BOTH, expand=1)
self.pack()
self.processqueue()
def processqueue(self):
try:
message = '\n'.join([self.message.get(),
self.queue.get_nowait()])
except Queue.Empty:
pass
else:
self.message.set(message)
self.master.after(100, self.processqueue)
class ThreadedTask(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.daemon = 1
self.queue = queue
def run(self):
i = 0
while True:
i += 1
message = raw_input('put some words:')
self.queue.put("[Message] {0:s}".format(message))
queue = Queue.Queue()
gui = UI(queue=queue)
job = ThreadedTask(queue)
job.start()
gui.mainloop()
不過,我得到以下錯誤:
error in background error handler:
out of stack space (infinite loop?)
while executing
"::tcl::Bgerror {out of stack space (infinite loop?)} {-code 1 -level 0 -errorcode NONE -errorinfo {out of stack space (infinite loop?)
("after" sc..."
誰能幫我呢?先謝謝你!
的另一件事是,這個代碼的工作,如果我不使用的raw_input(),但生成的文本一些機器,即:
def run(self):
i = 0
while True:
i += 1
time.sleep(0.5)
self.queue.put("[Message] {0:d}".format(i))
誰能解釋一下爲什麼?
它按預期對我工作..... –
你在什麼機器?我的Fedora 18,python 2.7.3。 我周圍搜索了一下,發現這可能是tk沒有與啓用線程編譯的結果。然而,我只是想知道爲什麼只有當我使用raw_input()時引發異常。 –
我在Windows 32位,python 2.7.3,tk 8.5順便說一句,我不認爲這是錯誤原因的原因,否則它不會爲你工作,但我不知道雖然... –