我正试图用Python&;编写一个聊天应用程序;Qt
由于my receivemessage功能(似乎被阻止),图形聊天应用程序无法显示
如果我取消对receivemessage函数的链接的注释,它确实会显示出来
这是我到目前为止写的:
服务器:
#/usr/bin/python3.7
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLabel, QPushButton, QLineEdit, QTextEdit, QAction, QMessageBox
from PySide2.QtGui import QIcon
import socket
import sys
class Window (QMainWindow):
def __init__(self):
super().__init__()
self.servername = "Linux"
self.host = "192.168.0.144"
self.port = 27500
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.setWindowTitle("PYTHON CHATSERVER")
self.setGeometry(850, 850, 900, 750)
self.connection()
self.setIcon()
self.createmenu()
self.initUi()
def connection (self):
try:
self.s.bind((self.host, self.port))
QMessageBox.warning(self, "Bind", "Bind working")
except socket.error as msg:
print("Error")
print("Server launched...")
self.s.listen(10)
self.conn, self.adr = self.s.accept()
self.clientname = self.conn.recv(200).decode()
self.conn.send(self.servername.encode())
print("Clientnaam: ", self.clientname)
def setIcon (self):
icon = QIcon("icon.png")
self.setWindowIcon(icon)
def createmenu (self):
mainmenu = self.menuBar()
filemenu = mainmenu.addMenu("File")
exitaction = QAction(QIcon("icon.png"), "Exit", self)
exitaction.triggered.connect(self.leave)
filemenu.addAction(exitaction)
def initUi (self):
mainwidget = QWidget(self)
self.setCentralWidget(mainwidget)
gridlayout = QGridLayout()
mainwidget.setLayout(gridlayout)
self.labelchat = QLabel("Chat", mainwidget)
self.participants = QLabel("Participants", mainwidget)
self.chatbox = QTextEdit(mainwidget)
self.participantsfield = QTextEdit(mainwidget)
self.message = QLabel("Message: ", mainwidget)
self.messagefield = QLineEdit(mainwidget)
self.Button = QPushButton("Send Message", mainwidget)
self.Button.clicked.connect(self.sendmessage)
gridlayout.addWidget(self.labelchat, 0, 0)
gridlayout.addWidget(self.participants, 0, 1)
gridlayout.addWidget(self.chatbox, 2, 0)
gridlayout.addWidget(self.participantsfield, 2, 1)
gridlayout.addWidget(self.message, 3, 0)
gridlayout.addWidget(self.messagefield, 4, 0)
gridlayout.addWidget(self.Button, 5, 0, 1, 2)
self.participantsfield.setText(self.clientname + "\n" + self.servername + "\n")
self.chatbox.append(self.clientname + " connected")
self.receivemessage()
def receivemessage (self):
while True:
self.messageclient = self.conn.recv(200).decode()
if self.messageclient:
self.chatbox.append(self.clientname + "> " + self.messageclient)
def sendmessage (self):
self.messageserver = self.messagefield.text()
self.conn.send(self.messageserver.encode())
self.chatbox.append(self.servername + ">" + self.messageserver)
def leave (self):
myapp.quit()
客户:
#/usr/bin/python3.7
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLabel, QPushButton, QLineEdit, QTextEdit, QAction, QMessageBox
from PySide2.QtGui import QIcon
import socket
import sys
class Window (QMainWindow):
def __init__(self):
super().__init__()
self.clientname = "Pieterjan"
self.host = "192.168.0.144"
self.port = 27500
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.setWindowTitle("Python Chatclient")
self.setGeometry(850, 850, 900, 750)
self.setIcon()
self.createmenu()
self.connection()
self.initUi()
def setIcon (self):
icon = QIcon("icon.png")
self.setWindowIcon(icon)
def createmenu (self):
mainmenu = self.menuBar()
filemenu = mainmenu.addMenu("File")
exitaction = QAction(QIcon("icon.png"), "Exit", self)
exitaction.triggered.connect(self.leave)
filemenu.addAction(exitaction)
def connection (self):
try:
self.s.connect((self.host, self.port))
QMessageBox.warning(self, "Connection", "Connection made")
except:
print("Failed to connect with {}:{}" .format(self.host, self.port))
self.s.send(self.clientname.encode())
self.servername = self.s.recv(200).decode()
def initUi (self):
mainwidget = QWidget(self)
self.setCentralWidget(mainwidget)
gridlayout = QGridLayout()
mainwidget.setLayout(gridlayout)
self.labelchat = QLabel("Chat", mainwidget)
self.participants = QLabel("Participants", mainwidget)
self.chatbox = QTextEdit(mainwidget)
self.participantsfield = QTextEdit(mainwidget)
self.message = QLabel("Message: ", mainwidget)
self.messagefield = QLineEdit(mainwidget)
self.Button = QPushButton("Send Message", mainwidget)
self.Button.clicked.connect(self.sendmessage)
gridlayout.addWidget(self.labelchat, 0, 0)
gridlayout.addWidget(self.participants, 0, 1)
gridlayout.addWidget(self.chatbox, 2, 0)
gridlayout.addWidget(self.participantsfield, 2, 1)
gridlayout.addWidget(self.message, 3, 0)
gridlayout.addWidget(self.messagefield, 4, 0)
gridlayout.addWidget(self.Button, 5, 0, 1, 2)
self.participantsfield.setPlainText(self.clientname + "\n" + self.servername)
self.chatbox.append("Connected with: " + self.servername)
self.receivemessage()
def receivemessage (self):
while True:
self.messageserver = self.s.recv(200).decode()
if self.messageserver:
self.chatbox.append(self.servername+ "> " + self.messageserver)
def sendmessage (self):
self.messageclient = self.messagefield.text()
self.s.send(self.messageclient.encode())
self.chatbox.append(self.clientname + ">" + self.messageclient)
def leave (self):
myapp.quit()
myapp = QApplication(sys.argv)
window = Window()
window.show()
myapp.exec_()
sys.exit(0)
有人能帮我吗? 提前谢谢
我认为线程技术提供了解决方案
我在服务器和客户端文件中都添加了下一个代码:
现在它似乎起作用了
相关问题 更多 >
编程相关推荐