資源簡介
PyQt5結合Socket聊天室功能開發,項目中使用線程進行不同任務處理,是學習Scoket及線程非常好的案例。

代碼片段和文件信息
from?PyQt5?import?QtGui
from?PyQt5.QtGui?import?QFont
from?PyQt5.QtWidgets?import?*
import?sys
import?socket
from?threading?import?Thread
class?Client(QWidget):
????#?3初始化界面
????def?__init__(self):
????????QWidget.__init__(self)
????????#?設置窗口的大小和位置
????????self.setGeometry(600?300?500?360)
????????#?設置標題
????????self.setWindowtitle(“聊天室“)
????????#?添加背景
????????palette?=?QtGui.QPalette()
????????bg?=?QtGui.QPixmap(r“./img/background.jpg“)
????????palette.setBrush(self.backgroundRole()?QtGui.QBrush(bg))
????????self.setPalette(palette)
????????self.add_ui()
????????#?與服務器連接
????????self.client_socket?=?socket.socket(socket.AF_INETsocket.SOCK_STREAM)
????????self.local_addr?=?(“10.31.0.70“?7788)
????????self.client_socket.connect(self.local_addr)
????????#?啟動線程
????????self.work_thread()
????#?設置界面當中的組件
????def?add_ui(self):
????????#?多行文本顯示,顯示所有的聊天信息
????????self.content?=?QTextBrowser(self)
????????self.content.setGeometry(30?30?450?150)
????????#?單行文本,消息發送框
????????self.message?=?QLineEdit(self)
????????self.message.setGeometry(30?220?450?30)
????????self.message.setPlaceholderText(“請輸入發送內容“)
????????#?發送按鈕
????????self.button?=?QPushButton(“發送“?self)
????????self.button.setFont(QFont(“微軟雅黑“?10?QFont.Bold))
????????self.button.setGeometry(400?270?60?30)
????#?發送消息
????def?send_msg(self):
????????msg?=?self.message.text()
????????self.client_socket.send(msg.encode())
????????if?msg.upper()?==?“Q“:
????????????self.client_socket.close()
????????????self.destroy()
????????self.message.clear()
????#?接收消息
????def?recv_msg(self):
????????while?True:
????????????try:
????????????????data=self.client_socket.recv(1024).decode()
????????????????print(data)
????????????????data=data+“\n“
????????????????self.content.append(data)
????????????except:
????????????????exit()
????#?點擊按鈕發送消息
????def?btn_send(self):
????????self.button.clicked.connect(self.send_msg)
????#?線程處理
????def?work_thread(self):
????????Thread(target=self.btn_send).start()
????????Thread(target=self.recv_msg).start()
if?__name__?==?‘__main__‘:
????app?=?QApplication(sys.argv)
????client?=?Client()
????client.show()
????sys.exit(app.exec_())
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-10-23?15:34??pyqt多線程聊天室?-?副本\
?????目錄???????????0??2020-10-23?15:34??pyqt多線程聊天室?-?副本\.idea\
?????文件?????????294??2020-10-22?20:15??pyqt多線程聊天室?-?副本\.idea\misc.xm
?????文件?????????303??2020-10-22?20:13??pyqt多線程聊天室?-?副本\.idea\modules.xm
?????文件?????????441??2020-10-22?20:15??pyqt多線程聊天室?-?副本\.idea\pyqt多線程聊天室.iml
?????文件???????11908??2020-10-23?15:28??pyqt多線程聊天室?-?副本\.idea\workspace.xm
?????文件????????2462??2020-10-23?11:57??pyqt多線程聊天室?-?副本\client.py
?????目錄???????????0??2020-10-23?15:34??pyqt多線程聊天室?-?副本\img\
?????文件????????8185??2020-10-22?21:35??pyqt多線程聊天室?-?副本\img\background.jpg
?????文件????????2754??2020-10-23?15:28??pyqt多線程聊天室?-?副本\server.py
- 上一篇:A*算法解決8數碼問題Python實現
- 下一篇:AWD比賽后門通用腳本
評論
共有 條評論