Доступ к данным из родительского окна в дочернем окне в PyQt

1

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

Изображение 174551

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 и self.message дочернее окно.

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

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

Спасибо

Теги:
pyqt4
pyqt

2 ответа

1

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

Используйте сигнал для обновления дочернего lineEdit при изменении текста в 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

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

  • 0
    У меня нет ".ui", который вы используете, я не пробовал этот код, подскажите, поможет ли он
  • 0
    Я могу получить доступ к переменным из всех дочерних окон. но я хочу получить доступ к переменным от родителя во всех дочерних окнах
Показать ещё 2 комментария
0

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

    self.child_window = ChildApp(parent=self)

Определите дочернее приложение таким образом:

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню