[英]Why is threading not showing Tkinter window?
我在學習使用Tkinter時寫了一些代碼,當我嘗試對其進行線程化時,它沒有顯示窗口,但是當它只運行主循環時卻顯示了。
import socket,threading,time
from Tkinter import *
class Chat(Frame):
def __init__(self,root):
Frame.__init__(self,root)
self.text=Text(self, bg='black', fg='white')
self.text.configure(state=DISABLED)
self.text.configure(state=NORMAL)
self.text.insert(END, 'hello\n'*40)
self.text.configure(state=DISABLED)
self.text.pack()
def main():
root=Tk()
root.configure(background='black')
c=Chat(root)
c.pack()
root.mainloop()
#t=threading.Thread(target=root.mainloop)
#t.start()
if __name__=='__main__':
main()
文本小部件似乎是一個問題,但我不知道它有什么問題。 當我刪除插入行時,出現帶有標題的框,但帶有該行,則不會出現。 有什么問題嗎?
我認為您的問題是,您正在主線程上初始化Tkinter,然后在后台線程上調用Chat框架(使用主線程的root)。 我希望這可能會引起一些問題。 在沒有足夠的內部知識的情況下,我決定通過稍微不同的代碼來測試該理論。 我已經重新編寫了您的代碼,因此root和Chat的初始化在同一線程上,並且可以解決問題。
import threading
from Tkinter import *
class Chat(Frame):
def __init__(self,root):
Frame.__init__(self,root)
self.text=Text(self, bg='black', fg='white')
self.text.configure(state=DISABLED)
self.text.configure(state=NORMAL)
self.text.insert(END, 'hello\n'*40)
self.text.configure(state=DISABLED)
self.text.pack()
def run():
root=Tk()
root.configure(background='black')
c=Chat(root)
c.pack()
root.mainloop()
def main():
t=threading.Thread(target=run)
t.start()
t.join()
if __name__=='__main__':
main()
希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.