PyQt5中menu打开子窗口,子窗口向父窗口传递数据

PyQt5中menu打开子窗口,子窗口向父窗口传递数据

  • 使用Qtdesigner生成两个窗口交给eric软件,eric再设置信号生成py文件,在尽量不碰生成的文件的前提下,实现上述功能。
  1. eric生成的两个窗口配置代码(这个不需要动):
  2. eric生成的两个功能代码(简单修改)

父窗口

from PyQt5.QtCore import pyqtSlot,Qt
from PyQt5.QtWidgets import QMainWindow

from Ui_index import Ui_MainWindow
import login  #修改1,把子窗口导入进来。并且要用到Qt模块也导入进来

class MainWindow(QMainWindow, Ui_MainWindow):
    """
    Class documentation goes here.
    """

    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget (defaults to None)
        @type QWidget (optional)
        """
        super().__init__(parent)
        self.setupUi(self)

    
    @pyqtSlot()
    def on_action_4_triggered(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.child_login=login.Form()
        self.child_login.setWindowModality(Qt.ApplicationModal)
        #调用子窗口时阻塞父窗口
        self.child_login.show()
        self.child_login._signal.connect(self.fun)
    def fun(self,s):
        self.textEdit.setPlaceholderText(s)
        #修改2:在menu功能下设置子窗口实例化,并把子窗口的信号(信号要在子窗口设置)连接槽,槽要有个参数来接信号传递的参数

子窗口

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget

from Ui_login import Ui_Form

from PyQt5.QtCore import pyqtSignal#修改3:子窗口要建立信号所需要的类
class Form(QWidget, Ui_Form):
    """
    Class documentation goes here.
    """
    _signal=pyqtSignal(str) #修改4:子窗口建立信号传递的是(str)数据
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget (defaults to None)
        @type QWidget (optional)
        """
        super().__init__(parent)
        self.setupUi(self)
    
    @pyqtSlot()
    def on_pushButton_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        datastr=self.lineEdit.text()
        self._signal.emit(datastr)#修改5:子窗口传递具体的信号
        

posted @ 2022-05-24 17:34  田哥  阅读(1097)  评论(0)    收藏  举报