У меня есть два окна (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
и self.message
дочернее окно.
Теперь в дочернем окне, когда я нажимаю кнопку "Показать сообщение", alertmessage()
метод alertmessage()
, где он устанавливает message = "text"
. Это переменное message
должно быть присвоено значению self.message
из MainApp.py.
Пожалуйста помоги
Спасибо
Я не думаю, что вы можете получить локальные данные от родителя. Я бы сделал следующее:
Используйте сигнал для обновления дочернего 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
так что всякий раз, когда вам нужна эта переменная, она актуальна
Позвоните ребенку таким образом:
self.child_window = ChildApp(parent=self)
Определите дочернее приложение таким образом:
class ChildApp(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent):
self.parent = parent
вы можете использовать родительские переменные через self.parent.whatever
Он должен работать, но я бы не советовал это, потому что вы не должны знать поля родительской формы для ребенка.