Доступ к данным из родительского окна в дочернем окне в PyQt - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть два файла windows (App.py и ChildApp.py) и .ui для обоих с одинаковым именем.

enter image description here

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, и открывается дочернее окно.

Теперь в дочернем окне, когда я нажимаю кнопку «Показать сообщение»", вызывается метод alertmessage(), где он устанавливает message = "text".Эта переменная message должна быть присвоена значению self.message из MainApp.py.

Пожалуйста, помогите

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Назовите ребенка таким образом:

    self.child_window = ChildApp(parent=self)

Определите дочернее приложение следующим образом:

class ChildApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent):
        self.parent = parent

вы можете использовать родительские переменные через self.parent.whatever

Это должно сработать, но я бы не советовал этого, потому что вы не должны знать поля родительской формы дочернего элемента.

0 голосов
/ 25 сентября 2018

Я не думаю, что вы можете получить локальные данные от родителя.Я бы сделал следующее:

Используйте сигнал для обновления дочернего элемента при изменении текста в lineEdit:

self.lineEdit.textChanged.connect(self.updateChild)

Добавьте эту функцию в главное окно:

def updateChild(self):
    self.child_window.setMessage(self.lineEdit.text())

и сохраняйте переменную self._message обновленной в дочернем окне:

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

, чтобы, когда вам понадобится эта переменная, она была актуальной

...