我的MainWindow看起来像这样:
def __init__(self, parent = None):
QMainWindow.__init__(self, parent)
self.setupUi(self)
self.showMaximized()
menu=mainMenu.MainMenu()
classification=classificationMain.ClassificationMain()
self.stackedWidget.addWidget(menu)
self.stackedWidget.addWidget(classification)
self.stackedWidget.setCurrentWidget(menu)
self.stackedWidget.showFullScreen()
#connections
menu.pushButton.clicked.connect(self.showClassification)
classification.backButton.clicked.connect(self.showMainWindow)
def showClassification(self ):
self.stackedWidget.setCurrentIndex(3)
def showMainWindow(self):
self.stackedWidget.setCurrentIndex(2)
MainWindows等待来自其余对话框的信号。现在,“分类”对话框中包含另一个StackedWidget,因为它可以作为应用程序重要部分的主窗口。它看起来像:
class ClassificationMain(QDialog, Ui_Dialog):
def __init__(self, parent = None):
QDialog.__init__(self, parent)
self.setupUi(self)
choose=choosePatient.ChoosePatient()
self.stackedWidget.addWidget(choose)
self.stackedWidget.setCurrentWidget(choose)
现在,我想在每次单击MainMenu的“显示分类”按钮时重新加载ChoosePatient中的数据,但现在数据只在MainWindow的行分类= classificationMain.ClassificationMain()中加载一次。
我原以为我必须连接在ChooseMatient中的一个插槽,点击MainMenu中的“显示分类”按钮,但我需要一个MainMenu实例,这是不可能的。
每次单击“父”窗口中的按钮时,如何执行ChoosePatient方法? (另外,如果这不是使用pyqt窗口的正确方法,请告诉我)
答案 0 :(得分:1)
您需要保存对撰写的小部件的引用,还要向父母公开一些公共方法:
class ClassificationMain(QDialog, Ui_Dialog):
def __init__(self, parent = None):
QDialog.__init__(self, parent)
self.setupUi(self)
self.chooseWidget=choosePatient.ChoosePatient()
self.stackedWidget.addWidget(self.chooseWidget)
self.stackedWidget.setCurrentWidget(self.chooseWidget)
def reloadPatients(self):
# whatever your operation should be on the ChoosePatient
self.chooseWidget.reload()
# MAIN WINDOW
def __init__(self, parent = None):
...
self.classification=classificationMain.ClassificationMain()
self.stackedWidget.addWidget(self.classification)
...
#connections
menu.pushButton.clicked.connect(self.showClassification)
def showClassification(self ):
self.stackedWidget.setCurrentIndex(3)
self.classification.reloadPatients()
如果您愿意,也可以跳过reloadPatients
方法并直接连接到ChoosePatient
:
def showClassification(self ):
self.stackedWidget.setCurrentIndex(3)
self.classification.chooseWidget.reload()
我个人的意见是让您的自定义类很好地包含内部功能,这样您只需要通过自定义类与其进行交互,而不是深入了解其内部。这样你就可以在不破坏主窗口的情况下改变它的工作方式。