在关闭对话框时应用更改的 Pythonic 方式 window
Pythonic way of applying changes on closing a dialog window
我找不到任何关于这个主题的有用资源。我希望我能在这里找到一些指导。
我使用 Glade、Gtk (3.10) 和 Python 制作了一个对话框 window class 3。它有大约 30 个可以更改的选项。在 init 函数中,我设置了整个对话框 window 并将选项设置为当前值。我还定义了一个布尔变量,用于存储是否更改了任何小部件:
self.settings_changed = False
因此,我为每个小部件设置了一个函数来捕获 "change-signal" 并执行以下操作:
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()
现在,当我在对话框中单击 "Cancel" 时,我只是不应用任何临时值。但是,当我单击 "Apply" 时,我希望应用所有已更改的变量。 但这是我的问题:在这 30 个更改的变量中,只有少数存在,所有其他变量都会导致很多 AttributeErrors,因为临时变量不存在。
我尝试使用大量 try-except 函数来避免错误:
try:
self.dataclass.set_checkbutton(self.temp_checkbutton_value)
except:
pass
有没有更简单(更短)的方法来解决这个问题?我想应该有一种方法可以构建一个更改队列,这些更改在单击 "Apply" 后依次执行,但我的土豆式 python 技能到目前为止还没有帮助我解决这个问题。
下面是一个可能有用的例子:
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()
我找不到任何关于这个主题的有用资源。我希望我能在这里找到一些指导。
我使用 Glade、Gtk (3.10) 和 Python 制作了一个对话框 window class 3。它有大约 30 个可以更改的选项。在 init 函数中,我设置了整个对话框 window 并将选项设置为当前值。我还定义了一个布尔变量,用于存储是否更改了任何小部件:
self.settings_changed = False
因此,我为每个小部件设置了一个函数来捕获 "change-signal" 并执行以下操作:
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()
现在,当我在对话框中单击 "Cancel" 时,我只是不应用任何临时值。但是,当我单击 "Apply" 时,我希望应用所有已更改的变量。 但这是我的问题:在这 30 个更改的变量中,只有少数存在,所有其他变量都会导致很多 AttributeErrors,因为临时变量不存在。
我尝试使用大量 try-except 函数来避免错误:
try:
self.dataclass.set_checkbutton(self.temp_checkbutton_value)
except:
pass
有没有更简单(更短)的方法来解决这个问题?我想应该有一种方法可以构建一个更改队列,这些更改在单击 "Apply" 后依次执行,但我的土豆式 python 技能到目前为止还没有帮助我解决这个问题。
下面是一个可能有用的例子:
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()