Python 在PyQt的子窗口中从父窗口访问数据

Python 在PyQt的子窗口中从父窗口访问数据,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我有两个同名的窗口(App.py和ChildApp.py)和.ui文件 App.py: import sys from PyQt4 import QtCore, QtGui, uic from ChildApp import ChildApp qtCreatorFile = "App.ui" # Enter file here. Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile) class App(QtGui.QMainWin

我有两个同名的窗口(App.py和ChildApp.py)和.ui文件

App.py:

import sys
from PyQt4 import QtCore, QtGui, uic
from ChildApp import ChildApp
qtCreatorFile = "App.ui" # Enter file here.
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class App(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.message = None
        self.child_window = ChildApp()
        self.pushButton.clicked.connect(self.sendMessage)
    def sendMessage(self):
        self.message = self.lineEdit.text()
        self.child_window.show()
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())
ChildApp.py:

import sys
from PyQt4 import QtCore, QtGui, uic
qtCreatorFile = "ChildApp.ui" # Enter file here.
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class ChildApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.alertmessage)
    def alertmessage(self):
        message = "test"
        self.label.setText("Message : "+message)
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = ChildApp()
    window.show()
    sys.exit(app.exec_())
在Main.py文件中,我有一个变量
self.message
。 当我点击按钮“对文本执行操作”时,文本框中的文本被分配给
self.message
,子窗口被打开

现在在子窗口中,当我单击按钮“ShowMessage”时,调用方法
alertmessage()
,它设置
message=“text”
。 必须将此变量
message
分配给MainApp.py中的
self.message

请帮忙


谢谢你

我认为你无法从家长那里获得本地数据。我会这样做:

行编辑中更改文本时,使用信号更新子项:

self.lineEdit.textChanged.connect(self.updateChild)
在主窗口中添加此功能:

def updateChild(self):
    self.child_window.setMessage(self.lineEdit.text())
并在子窗口中更新变量
self.\u消息

def setMessage(self, message):
    self._message=message

因此,每当您需要此变量时,它都是最新的

这样调用子变量:

    self.child_window = ChildApp(parent=self)
按以下方式定义子应用程序:

class ChildApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent):
        self.parent = parent
您可以通过
self.parent.which


它必须工作,但我不建议这样做,因为您不应该知道父窗体和子窗体的字段。

我没有您正在使用的“.ui”,我没有尝试过此代码,请告诉我它是否有助于我从所有子窗口访问变量。但是我想从所有子窗口的父窗口访问变量,只需在updateChild函数中更新每个子窗口的变量。它甚至可以是窗口列表上的循环。它有效吗?或者尝试在每个窗口的开头写“全局消息”,并使用“消息”变量而不是“self.message”。也不确定它们是否使用共享内存