存储(qdialog)变量的替代方法,即使它们关闭 - 从任何类(parenting ??)



我正在尝试找出一种更好的编码方式。(仅编码几周。)

摘要:找到一种更好的方法来保留(和访问)变量值在关闭对话框中输入(在另一类中称为)。必须能够从任何一个类中使用这些值。

我使用QTDesigner制作主窗口和一个对话框。一旦我从主窗口打开" mydialog"的"设置"菜单后。在那里,我有一些可以更改的设置。我在对话框上还有一个"保存"按钮,以保存我的设置。这是一个示例代码:

up = down = left = right = 0
class MainForm(QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)
        self.ui = Ui_MainForm()
        self.ui.setupUi(self)
        self.ui.actionSettings.triggered.connect(self.open_my_dialog)
    def open_my_dialog(self):
        my_dialog = MyDialog()
        my_dialog.exec_()

class MyDialog(QDialog):
    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)
        self.ui = Ui_MyDialog()
        self.ui.setupUi(self)
        self.ui.pushButton_save.clicked.connect(self.save_dialog)
        self.ui.spinBox_up.setValue(up)
        self.ui.spinBox_down.setValue(down)
        self.ui.spinBox_left.setValue(left)
        self.ui.spinBox_right.setValue(right)
    def save_dialog(self):
        global up, down, left, right
        up = self.ui.spinBox_up.value()
        down = self.ui.spinBox_down.value()
        left = self.ui.spinBox_left.value()
        right = self.ui.spinBox_right.value()
        self.close()

我需要能够访问对话框中输入的值,一旦将其从任何类中关闭(Mainform或再次重新输入对话框; MyForm()和myDialog())。如您所见,我将设置保存在缓存中的方式是将它们分配给全局变量。我知道这不是这样做的正确方法。但是,一旦单击"保存"按钮,我需要保存设置,以便如果我重新打开对话框,它将向我显示我最后一次离开那里的设置(当我单击"保存"时)。另外,我必须从我的Mainform()类中使用这些相同的值。我在其他类别上读了很多有关调用类和方法变量的信息。也是育儿(这让我有些困惑)。但是这些例子非常简单。如果我像他们给你的那样写班级,我会理解这一点。但是,由于我使用的是UI的设计师,所以我有一个不同的代码(self.ui.xxx(xxselfxx)的东西(也有很多))。我尝试并搜索了很多答案,但放弃并用全局变量解决了。

如果有人会向我解释如何解决这种情况的正确(Pythonic)方法,我将非常奇怪。

谢谢!

测试和研究后,我找到了更好的编码方法。我现在可以使用类变量来完成代码,而不是像以前那样使用"皱眉"的全局变量。我也试图通过实例变量使其起作用,但不幸的是,无论我做了什么,它都无效。我提供的答案更是Pythonic/适当的方法。我确定这一点。但这并不意味着这是最好的方法。我仍然开放建议。如果您认为可以写得更好(也许是实例变量?)请一定要分享。

您去这里:

class MainForm(QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)
        self.ui = Ui_MainForm()
        self.ui.setupUi(self)
        self.ui.actionSettings.triggered.connect(self.open_my_dialog)
    def open_my_dialog(self):
        my_dialog = MyDialog()
        print("Test:", MyDialog.up, MyDialog.down, MyDialog.left, MyDialog.right)  # for testing the values from this class
        my_dialog.exec_()

class MyDialog(QDialog):
    up = down = left = right = 0
    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)
        self.ui = Ui_MyDialog()
        self.ui.setupUi(self)
        self.ui.pushButton_save.clicked.connect(self.save_dialog)
        self.ui.spinBox_up.setValue(MyDialog.up)
        self.ui.spinBox_down.setValue(MyDialog.down)
        self.ui.spinBox_left.setValue(MyDialog.left)
        self.ui.spinBox_right.setValue(MyDialog.right)
    def save_dialog(self):
        MyDialog.up = self.ui.spinBox_up.value()
        MyDialog.down = self.ui.spinBox_down.value()
        MyDialog.left = self.ui.spinBox_left.value()
        MyDialog.right = self.ui.spinBox_right.value()
        self.close()
        return MyDialog.up, MyDialog.down, MyDialog.left, MyDialog.right

相关内容

最新更新