我正在尝试创建一个无限循环(带中断),它在我的 Tkinter 窗口旁边运行并与它上面的小部件进行交互。是的,我已经完成了我的研究,但是当我运行我的代码并激活该功能时,窗口停止响应。
我已经从方法中删除了“while true”,并在它的末尾放置:
if self.connected:
root.after(100, self.listenServer(id, req))
我认为问题在于该功能需要一些时间才能完成(我正在制作一个 Omegle 客户端,因此它必须连接到服务器)。我可以说它运行了六次,因为我在方法中放了一条打印语句。
有没有一种简单的(AKA 无线程)方法来解决这个问题?
好吧,如果线程是唯一的方法,那么我想它会很好
这是我的连接和监听方法:
def listenServer(self, id, req):
site = url.urlopen(req)
#We read the HTTP output to get what's going on
rec = site.read()
if 'waiting' in rec:
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Waiting...\n", "italic")
self.chatbox.config(state=DISABLED)
elif 'connected' in rec:
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Stranger connected\n", "italic")
self.chatbox.config(state=DISABLED)
elif 'strangerDisconnected' in rec:
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Stranger Disconnected\n", "italic")
self.chatbox.config(state=DISABLED)
self.connected = False
elif 'typing' in rec:
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Stranger is typing\n", "italic")
self.chatbox.config(state=DISABLED)
elif 'gotMessage' in rec:
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Stranger: " + rec[17:len(rec) - 3] + "\n")
self.chatbox.config(state=DISABLED)
def OmegleConnect(self):
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Connecting...\n", "italic")
self.chatbox.config(state=DISABLED)
site = url.urlopen('http://omegle.com/start', '')
id = site.read()
id = id[1:len(id) - 1]
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Stranger ID: " + id + "\n", "title")
self.chatbox.config(state=DISABLED)
req = url.Request('http://omegle.com/events', urllib.urlencode({'id':id}))
self.chatbox.config(state=NORMAL)
self.chatbox.insert(END, "Finding a stranger...\n", "italic")
self.chatbox.config(state=DISABLED)
self.connected = True
root.after(100, self.listenServer(id, req))
是的,我知道它写入文本小部件的方式效率很低。我尝试了一种方法来更容易地做到这一点,但它不起作用。一旦我启动并运行它,我会担心这个。