PyQt5中menu打开子窗口,子窗口向父窗口传递数据
PyQt5中menu打开子窗口,子窗口向父窗口传递数据
- 使用Qtdesigner生成两个窗口交给eric软件,eric再设置信号生成py文件,在尽量不碰生成的文件的前提下,实现上述功能。
- eric生成的两个窗口配置代码(这个不需要动):
- 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:子窗口传递具体的信号

无
浙公网安备 33010602011771号