PyQt5不同窗口之间的值传递

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 按钮, 打开自定义对话框, 然后再对话框中输入字符点击发送, 输入的字符内容将显示在主窗口中.

实现过程:
  1. 在自定义对话框中实现自定义信号

mySignal = pyqtSignal(str)

  1. 再对话框中使用 emit 发射自定义信号

self.mySignal.emit(content)

  1. 在主窗口中连接信号和处理函数

my.mySignal.connect(self.getDialogSignal)

  1. 最后在主窗口中实现事件处理函数, 接收对话框传值

这样就能实现不同窗口之间的通信了.

1.png
2.png

如果有帮到你, 请不要吝惜手中的赞哟.

推荐阅读更多精彩内容