gpt4 book ai didi

python - 如何连接到 PyQt 中的父 SIGNAL?

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:30 26 4
gpt4 key购买 nike

我有一个如下所示的主窗口:

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 的 classification=classificationMain.ClassificationMain() 行中加载一次。

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

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

最佳答案

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

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

我个人的意见是让您的自定义类很好地包装内部功能,这样您只需要通过自定义类与其进行交互,而不用深入了解其内部结构。这样您就可以在不破坏主窗口的情况下更改其内部工作方式。

关于python - 如何连接到 PyQt 中的父 SIGNAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13433640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com