我正在使用wxPython编写简单的IRC服务器和客户端GUI。在我的应用程序中,我运行了两个线程:一个用于GUI,另一个用于发送和接收信息所需的套接字连接。到目前为止,我相信我已成功通过客户端应用程序连接到服务器,但我看不到任何消息已处理。我尝试使用我的客户端与另一个TCP侦听器应用程序,我能够成功发送消息。我相信问题在于我设置GUI的方式。这里是我的服务器端应用程序(道歉任何尴尬的间距)(Python)在多线程IRC GUI中动态追加文本
我有一种感觉问题出在启动中的代码()函数..
#!/usr/bin/python
import wx
import socket
import threading
from threading import Thread
ip = ""
port = 0
backlog = 5
chatText = ""
class relayServerGUI(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, "Enter IP address", size = (600, 600))
orciPanel = wx.Panel(self)
relayChat = wx.TextCtrl(orciPanel, 0, chatText, (50, 50), (500, 500),style = wx.TE_MULTILINE)
portInput = wx.TextEntryDialog(None, "Enter Port: ", "")
if portInput.ShowModal() == wx.ID_OK:
global port
port = int(portInput.GetValue())
thread2()
def relayInterpretor():
socketRelay = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socketRelay.bind((ip, port))
socketRelay.listen(backlog)
client, address = socketRelay.accept()
while 1:
relayData = client.recv(1024)
global chatText
chatText += (relayData)
client.send(relayData)
def bootUP():
if __name__ == "__main__":
relayApplication = wx.PySimpleApp()
relayFrame = relayServerGUI(parent = None, id = -1)
relayFrame.Show()
relayApplication.MainLoop()
while 1:
relayChat.Clear()
relayChat.AppendText(chatText)
Thread(target = bootUP).start()
def thread2():
Thread(target = relayInterpretor).start()
编辑:relayChat是其中的消息会,理想地显示。我将它设置为复制chatText,一个全局字符串变量,所以我不必深入研究交叉线程。
我认为这是一种糟糕的做法,但我对这门语言仍然很陌生,这是我所能抛弃的一切:\如何处理接收数据时创建的事件? – PL43 2012-08-13 03:54:01
尝试更新。 – jdi 2012-08-13 04:10:43
嗯试了一下,并尝试了一下语法,但主要得到这个错误:AttributeError:'relayServerGUI'对象没有属性'newChatTextEvent' – PL43 2012-08-13 04:22:27