簡體   English   中英

存儲(QDialog)變量(即使它們關閉)的另一種方法-來自任何類(Parenting ??)

[英]Alternative way for storing (QDialog) variables, even when they close - from any Class (Parenting??)

我試圖找出一種更好的Python編碼方式。 (僅編碼了幾個星期。)

簡介:尋找一種更好的方式來保持(和訪問)在關閉對話框中輸入的變量值(在另一個類中調用)。 必須能夠使用任一類中的這些值。

我使用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)東西(而且init與在線示例完全不同)。我嘗試並搜索了很多尋找答案,但放棄並使用全局變量解決了。

如果有人能向我解釋如何解決這種情況的正確方法(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM