Pythonic在关闭对话窗口时应用更改的方法

时间:2015-01-22 18:00:39

标签: user-interface python-3.x gtk

我无法找到这个主题的任何有用资源。我希望我能在这里找到一些指导。

我使用Glade,Gtk(3.10)和Python 3创建了一个对话框窗口类。它有大约30个可以更改的选项。在init函数中,我设置整个对话框窗口并将选项设置为当前值。我还定义了一个bool变量,用于存储是否有任何小部件被更改:

self.settings_changed = False

因此,对于每个小部件,我设置了一个捕获"更改信号"并执行以下操作:

def on_checkbutton_line_width_changed(self, widget):
    #Set setting_changed to True so that the dialog knows something changed
     self.settings_changed = True
     #Store the changed value in a temporary variable
     self.temp_checkbutton_value = widget.get_active()

现在点击"取消"在对话框中我只是不应用任何临时值。但是当我点击"应用"我想要应用所有已更改的变量。 但这是我的问题:在这30个变更变量中,只有少数存在,而其他所有变量都会导致很多属性错误,因为临时变量不存在。

我尝试使用许多try-except函数来避免错误:

try:
    self.dataclass.set_checkbutton(self.temp_checkbutton_value)
except:
    pass

有更简单(更短)的方法来解决这个问题吗?我想应该有一种方法可以建立一个更改队列,这些更改在点击" Apply"之后彼此执行,但是我的马铃薯般的python技能到目前为止还没有帮助我解决这个问题。 / p>

1 个答案:

答案 0 :(得分:3)

以下是一个可能有用的示例:

class MyWidget:
    def __init__(self):
        self.changes = []

    def cancel_changes(self):
        self.changes.clear()

    def change_name(self, new_name):
        self.changes.append(('change_name', new_name))

    def change_color(self, new_color):
        self.changes.append(('change_color', new_color))

    def apply_changes(self):
        for change in self.changes:
            print("{} - {}".format(change[0], change[1])

或者你可以这样做:

self.changes.append(lambda: self.dataclass.set_checkoutbutton(value))

然后应用更改将是:

for change in self.changes:
    change()