如何同时运行 Python GTK GUI 和聊天?

Posted

技术标签:

【中文标题】如何同时运行 Python GTK GUI 和聊天?【英文标题】:How can I run a Python GTK GUI and a chat at the same time? 【发布时间】:2022-01-14 12:38:45 【问题描述】:

有人可以帮助我使用 Python GTK + 套接字吗?我正在尝试聊天,所以我正在运行它来接收来自其他用户的消息:

def socket_recv(socket, buffer):
    while True:
        try:
            message = socket.recv(1024).decode()
            end_iter = buffer.get_end_iter()
            buffer.insert(end_iter, message + "\n")
            while Gtk.events_pending():
                Gtk.main_iteration()
        except:
            print("Você foi desconectado do servidor")
            socket.close()
            break

在我的主要活动中,我正在尝试举办此活动:

def onConnect(self, widget):
        self.nickname = self.nickname_entry.get_text().strip()
        self.adress = self.adress_entry.get_text().strip()

        if self.nickname == "" or self.adress == "": 
            self.error_message.show()
            return

        HOST, PORT = self.adress.split(':')
        PORT = int(PORT)
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.connect((HOST, PORT))

        self.sock.send(str.encode(self.nickname))
        
        self.builder.add_from_file("interface.glade")  
        self.builder.connect_signals(self)

        self.chat_text.set_editable(False)
        self.chat_text.set_wrap_mode(3)
        self.chat_buffer = self.chat_text.get_buffer()
        self.chat_buffer.set_text("Início do chat\n")
        self.end_iter = self.chat_buffer.get_end_iter()

        self.chatWindow.show()

        while Gtk.events_pending():
                Gtk.main_iteration()

        thread = threading.Thread(target=socket_recv(self.sock, self.chat_buffer))
        thread.start()


我在GUI的启动窗口中得到用户的地址和昵称,然后在他们点击“连接”按钮后尝试连接到服务器,然后出现聊天窗口。虽然我可以连接到服务器,但当我尝试使用 socket_recv 运行我的聊天 GUI 时,GUI 变得完全不起作用(无法按下按钮等),我必须强制退出以关闭应用程序。 我对 Python、GTK 和线程还很陌生,如果有任何帮助,我将不胜感激

【问题讨论】:

已修复,我刚刚将threading.Thread(target=socket_recv(self.sock, self.chat_buffer)) 更改为thread = threading.Thread(target=socket_recv, args=(self.sock, self.chat_buffer)) 请将答案发布为答案,而不是评论。有关回答问题的更多信息,请参阅How to Answer。 会的,对不起! 没问题。只要记住以后做就行了:-)! 【参考方案1】:

问题解决了,我只是换了

threading.Thread(target=socket_recv(self.sock, self.chat_buffer))

thread = threading.Thread(target=socket_recv, args=(self.sock, self.chat_buffer))

给您带来的不便敬请谅解

【讨论】:

以上是关于如何同时运行 Python GTK GUI 和聊天?的主要内容,如果未能解决你的问题,请参考以下文章

GTK3.0中如何使用gstreamer同时播放视频和音频

GTK+ 接口应该在单独的线程中运行吗?

在 GTK 中使用多线程?

Python和GTK3 - 手动设置按钮的最佳方式?

Windows 中 GTK-GUI 翻译中的非 ASCII 符号不起作用?

GTK+3 GUI 随机冻结(1 小时后或 20 分钟后)