在接收到s上的某些输入后创建顶层

2024-04-26 22:48:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用这个论坛有一段时间了,但第一次问问题。 我有一个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函数调用此函数时,它不工作(这是监听套接字的循环)

以前有人有过这个问题吗? 提前谢谢。你知道吗


Tags: 函数inselffriendmessageifdef朋友