簡體   English   中英

為什么線程不顯示Tkinter窗口?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM