繁体   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