我使用这个论坛有一段时间了,但第一次问问题。 我有一个tkinter应用程序的问题。这是一个简单的聊天服务器-客户端程序,其中的聊天功能类似于Skype。我有一个朋友列表,当我从列表中选择朋友时,单击聊天,新窗口(顶层)打开。然后我可以给朋友发信息。 问题在另一边。如果聊天窗口在另一边打开,它可以正常工作,但是如果没有,我尝试通过调用创建新顶层的函数来创建。在这里程序冻结(在朋友的一边)。你知道吗
def bChatPress(self, event=None):
def closeChatClient():
chatClient.destroy()
del self.chatClients[friend]
if self.friend=='':
index = self.lbFriends.curselection()
if index:
friend = self.lbFriends.get(index)
if friend not in self.chatClients:
chatClient=ChatClient(self, self.user, friend)
chatClient.protocol("WM_DELETE_WINDOW", closeChatClient)
self.chatClients[friend] = chatClient
else:
chatClient=ChatClient(self, self.user, self.friend)
chatClient.protocol("WM_DELETE_WINDOW", closeChatClient)
self.chatClients[self.friend] = chatClient
self.friend=''
def receiveMessage(self):
def loop():
print('threadstart')
while self.loged:
try:
message = self.socket.recv(1024).decode('ascii')
print(message)
if '{LOGIN}' in message:
threading.Thread(target=self.login).start()
elif '{LOGOUT}' in message:
pass
elif '{CONNECT}' in message:
self.connect(message.replace('{CONNECT}',''))
elif '{DISCONNECT}' in message:
self.disconnect()
elif '{ADD FRIEND}' in message:
self.populateFriendsList(message.replace('{ADD FRIEND}',''))
elif '{DELETE FRIEND}' in message:
self.populateFriendsList(message.replace('{DELETE FRIEND}',''))
elif '{USER CONNECT}' in message:
self.checkOnline()
elif '{USER DISCONNECT}' in message:
self.checkOnline()
elif '{CHECK ONLINE}' in message:
self.populateFriendsList(message.replace('{CHECK ONLINE}',''))
elif '{MESSAGE}' in message:
self.processMessage(message.replace('{MESSAGE}',''))
except Exception as error:
pass
threading.Thread(target=loop).start()
这是创建聊天窗口的函数。当我通过单击按钮创建窗口时,它工作正常,但当我从receiveMessage函数调用此函数时,它不工作(这是监听套接字的循环)
以前有人有过这个问题吗? 提前谢谢。你知道吗
除了创建根窗口的线程外,不能从任何线程调用tkinter函数或小部件方法。你知道吗
相关问题 更多 >
编程相关推荐