3

我有一个看起来像这样的 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 等待来自其余对话框的信号。现在,Classification 对话框中有另一个 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() 行中加载一次。

我在想我必须通过单击 MainMenu 内的“显示分类”按钮来连接 ChoosePatient 内的一个插槽,但我需要一个 MainMenu 实例,这是不可能的。

每次单击“父”窗口中的按钮时,如何执行 ChoosePatient 方法?(另外,请告诉我这是否不是使用 pyqt windows 的正确方法)

4

1 回答 1

2

您需要保存对组合小部件的引用,并且还需要向父级公开一些公共方法:

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()

我个人的意见是让你的自定义类很好地包装内部功能,这样你只需要通过自定义类与它交互,而不是深入研究它的内部。这样你就可以在不破坏主窗口的情况下改变它在内部的工作方式。

于 2012-11-17T18:56:20.733 回答