我有一个很大的程序,里面有很多文件,我将程序的设置保存在这样的类上。
class Options:
BACKGROUND_COLOR = "(217, 217, 217)"
INPUT_COLOR = "(255, 250, 200)"
LABEL_COLOR = "(0, 0, 0)"
然后,我从其他文件导入该类,以读取/编辑选项,然后在新类上创建字典以操作多个选项。
然后我捕获特定字段上的事件,如果它们与我的字典中的事件匹配,那么它将进行一些更改。
from myfile import Options
class colorize:
def __init__(self):
"""
name = name of this color
field = field which will define the new color
current = current color before changing it
"""
self.color_fields = [
{"name": "Background", "field": self.Backgroundcolor, "current": Options.BACKGROUND_COLOR},
{"name": "Input", "field": self.Inputcolor, "current": Options.INPUT_COLOR},
{"name": "Label", "field": self.Labelcolor, "current": Options.LABEL_COLOR}
]
def change_color(self, target):
for field in self.color_fields:
if target == field['field']:
new_color = "my color"
field['field'].setStyleSheet(f"background-color: rgb{new_color};")
field['current'] = new_color # Doesn't works, expected fix here
break
我需要更新当前值。但是,class Options
中的值没有改变,只是我的字典中的值。如何在没有很多if的情况下更改class Options
中的值?因为现在我有几个选项,解决方法看起来像这样:
if field['name'] == "Background":
Options.BACKGROUND_COLOR = new_color
elif field['name'] == "Background_text":
Options.BACKGROUNDTEXT_COLOR = new_color
elif field['name'] == "Input":
Options.INPUT_COLOR = new_color
elif field['name'] == "Input_readonly_bg":
Options.INPUT_COLOR_READONLY = new_color
elif field['name'] == "Input_text":
Options.INPUTTEXT_COLOR = new_color
elif field['name'] == "Input_border":
Options.INPUTBORDER_COLOR = new_color
elif field['name'] == "Button":
Options.BUTTON_COLOR = new_color
elif field['name'] == "Button_text":
Options.BUTTONTEXT_COLOR = new_color
elif field['name'] == "Dropdown":
Options.DROPDOWN_COLOR = new_color
elif field['name'] == "Dropdown_text":
Options.DROPDOWNTEXT_COLOR = new_color
# And 50 more ELIFs
我如何只用一行就可以做到这一点,就像我在注释(# Doesn't works, expected fix here
)处删除所有那些硬编码的Elif一样?