上一篇PyQt5之使用Twisted实现两个窗口之间的通信(一)给大家介绍了PyQt5中如何使用Twisted框架实现两个窗口之间的通信,包括后台服务器和客户端的搭建,以及如何应用到界面中来,实现两个窗口界面互相发送字符串消息。这一篇将给大家介绍发送除字符串以外的格式的数据,比如类、字典、列表这些数据类型,同时介绍一个窗口如何与另一个窗口中的子对话框进行收发消息。首先直接上代码,客户端和服务器端的文件和上一篇一样,这里只放窗口界面的代码。
其中服务器主窗口部分是用Qt Designer画的,然后创建一个如下python文件用来编写显示窗口的代码,画的窗口图如下所示。大家画好之后,生成python文件(我的文件名是CommWin.py),再用如下代码进行显示就行了,记得导入界面的文件,我的是from CommWin import Ui_MainWindow。
服务器主窗口部分:
from CommWin import Ui_MainWindow
from transportWindowTest_old import *
from utils import *
import sys
app = QApplication(sys.argv) # your code to init QtCore
import qt5reactor
qt5reactor.install()
from server import *
class MyMainWindow(QMainWindow, Ui_MainWindow):
SigWindowToTcp = pyqtSignal(bytes)
def __init__(self):
super(MyMainWindow, self).__init__()
self.setupUi(self)
# 定义全局的子对话框实例
self.dialog_msg = MyWindow()
self.pushButton.clicked.connect(self.pB_ChatWin_Clicked)
def pB_ChatWin_Clicked(self):
self.dialog_msg.show()
# 【发送】按钮功能
def pB_Send():
# 获取发送消息框的文本
str = self.dialog_msg.textSender.toPlainText()
# 将文本字符串写入字典中
message = dict(type='DHKXX', data=str)
# 将字典进行编码,发送给后台服务器端,右服务器发送给客户端
self.SigWindowToTcp.emit(encodeTransformData(message))
self.dialog_msg.btn1.clicked.connect(pB_Send)
self.dialog_msg.exec_()
def writeToWidget(self, message):
# 将接收的消息进行解码成字典格式
message = decodeTransformData(message)
messageType = message['type']
print(messageType)
if messageType == 'DHKXX':
str = message['data']
self.textEdit.append("接收到聊天框消息!")
self.dialog_msg