为什么线程没有显示Tkinter窗口?

时间:2016-03-01 18:57:17

标签: python multithreading tkinter

我在学习使用Tkinter的同时编写了一些代码,当我尝试使用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()

这似乎是文本小部件的问题,但我不知道它有什么问题。当我删除插入行时,该框显示为带有三角形,但是在该行中,它不会出现。有什么问题?

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您在主线程上初始化Tkinter,然后在后台线程上调用 Chat 框架(使用来自主线程的root)。我预计这可能会导致一些问题。在没有太多内部知识的情况下,我决定通过略微不同地编写代码来测试这个理论。我重新编写了你的​​代码,所以 root 和Chat的初始化是在同一个线程上,它可以解决问题。

{{1}}

希望有所帮助。