PyQt5 提供很多标准对话框, 这里主要讲自定义对话框怎么使用自定义信号来做消息传递
话不多说, 先上代码:
from PyQt5.QtWidgets import QApplication, QWidget, QDialog, QPushButton, QLabel, QLineEdit
from PyQt5.QtCore import pyqtSignal
"""
自定义对话框
"""
class MyDialog(QDialog):
# 自定义信号
mySignal = pyqtSignal(str)
def __init__(self, parent = None):
super(MyDialog, self).__init__(parent)
self.initUI()
def initUI(self):
self.edit = QLineEdit(self)
self.edit.move(10, 10)
button = QPushButton('发送', self)
button.move(10, 40)
button.clicked.connect(self.sendEditContent)
self.setWindowTitle('MyDialog')
self.setGeometry(300, 300, 300, 200)
def sendEditContent(self):
content = self.edit.text()
self.mySignal.emit(content) # 发射信号
"""
主窗口
"""
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.initUI()
def initUI(self):
self.button = QPushButton('open', self)
self.button.clicked.connect(self.openMyDialog)
self.button.move(10, 10)
self.label = QLabel("hello", self)
self.label.move(10, 50)
self.setWindowTitle('Window')
self.setGeometry(300, 300, 300, 200)
self.show()
def openMyDialog(self):
my = MyDialog(self)
# 在主窗口中连接信号和槽
my.mySignal.connect(self.getDialogSignal)
my.exec_()
"""
实现槽函数
"""
def getDialogSignal(self, connect):
self.label.setText(connect)
这里例子中实现了一个主窗口和一个自定义对话框, 在主窗口中点击 open 按钮, 打开自定义对话框, 然后再对话框中输入字符点击发送, 输入的字符内容将显示在主窗口中.
实现过程:
- 在自定义对话框中实现自定义信号
mySignal = pyqtSignal(str)
- 再对话框中使用 emit 发射自定义信号
self.mySignal.emit(content)
- 在主窗口中连接信号和处理函数
my.mySignal.connect(self.getDialogSignal)
- 最后在主窗口中实现事件处理函数, 接收对话框传值
这样就能实现不同窗口之间的通信了.
如果有帮到你, 请不要吝惜手中的赞哟.