如何同时运行 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 和聊天?的主要内容,如果未能解决你的问题,请参考以下文章