这是我的初始代码。我希望它在纯文本框中打印所需的文本,但它没有。我尝试过在没有任何套接字编程的情况下运行代码,它确实有效,但当我添加套接字时,程序只是说没有响应。出现错误的行为粗体(****)。非常感谢你的帮助
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QInputDialog
from socket import *
import socket
from threading import Thread
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
self.MainWindow = MainWindow.setObjectName("MainWindow")
MainWindow.resize(251, 335)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.BigBox = QtWidgets.QPlainTextEdit(self.centralwidget)
self.BigBox.setGeometry(QtCore.QRect(10, 10, 231, 211))
self.BigBox.setObjectName("BigBox")
self.BigBox.setPlainText("")
self.SmallBox = QtWidgets.QPlainTextEdit(self.centralwidget)
self.SmallBox.setGeometry(QtCore.QRect(10, 230, 231, 31))
self.SmallBox.setObjectName("SmallBox")
self.SmallBox.setPlainText("")
self.hostButton = QtWidgets.QPushButton(self.centralwidget)
self.hostButton.setGeometry(QtCore.QRect(90, 270, 75, 23))
self.hostButton.setObjectName("hostButton")
self.submitButton = QtWidgets.QPushButton(self.centralwidget)
self.submitButton.setGeometry(QtCore.QRect(170, 270, 75, 23))
self.submitButton.setObjectName("submitButton")
self.connectButton = QtWidgets.QPushButton(self.centralwidget)
self.connectButton.setGeometry(QtCore.QRect(10, 270, 75, 23))
self.connectButton.setObjectName("connectButton")
MainWindow.setCentralWidget(self.centralwidget)
self.hostButton.clicked.connect(self.popForHost)
self.connectButton.clicked.connect(self.popForConnect)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Chat Room"))
self.hostButton.setText(_translate("MainWindow", "Host"))
self.submitButton.setText(_translate("MainWindow", "Submit"))
self.connectButton.setText(_translate("MainWindow", "Connect"))
def popForHost(self):
self.port ,y = QInputDialog.getText(self.MainWindow, "Host Options", "Enter The Port: ")
if y == True:
self.serverForHost()
def popForConnect(self):
self.IP ,y = QInputDialog.getText(self.MainWindow, "Connect Options", "Enter The IP: ")
self.port2 ,b = QInputDialog.getText(self.MainWindow, "Connect Options", "Enter The Port: ")
if y == True and b == True:
self.serverForConnect()
def serverForHost(self):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
self.IPAddr = socket.gethostbyname(socket.gethostname())
self.s.bind(('', int(self.port)))
** self.BigBox.appendPlainText("Hello") **
self.s.listen(1) #Max of one connection
self.conn,self.addr = self.s.accept() #Accept conn
print("[+] Connected: "+str(self.addr[0])+ ' Port: '+str(self.addr[1]))
print(self.conn.recv(1024).decode("UTF-8"))
t1 = Thread(target=self.hostThread)
t1.start()
def serverForConnect(self):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
self.IPAddr = socket.gethostbyname(socket.gethostname())
self.s.connect((self.IP, int(self.port2)))
self.s.send(str.encode("[+] Connection Established"))
t2 = Thread(target=self.connectThread)
t2.start()
def hostThread(self):
while 1:
command = input("["+str(self.IPAddr)+']: ')
self.conn.send(bytes(command, 'UTF-8'))
data = self.conn.recv(1024).decode()
print("["+str(self.addr[0])+"]: " +data)
def connectThread(self):
while 1:
data = self.s.recv(1024).decode("UTF-8")
print("["+str(self.IP)+"]: "+data)
command = input("["+str(self.IPAddr)+"]: ")
self.s.send(bytes(command, "UTF-8"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
设置更改时,但在执行函数中的所有代码后,所有GUI不会直接更新/读取小部件。通过这种方式,它可以在一瞬间重新绘制所有更改(而不是为许多更改多次重新绘制窗口小部件),这样GUI就不会闪烁太多
但您的函数使用
accept()
等待连接,所以它不会结束函数,GUI也不能重新绘制小部件使用
repaint()
可以强制GUI立即重新绘制小部件相关问题 更多 >
编程相关推荐