У меня есть изумительная функция здесь:Почему моя функция нуждается в аргументе и как его называть + без?
def update_config(val):
config = configparser.ConfigParser()
fonts_comb = ""
for i in range(len(fonts)):
if i == len(fonts) - 1:
fonts_comb = fonts_comb + fonts[i]
else:
fonts_comb = fonts_comb + fonts[i] + ", "
config["LISTS"] = {"Fonts": fonts_comb}
config["variables"] = {"font_size": (screen_font_size.var).get(),
"x_offset": (x_offset_spin.var).get(),
"y_offset": (y_offset_spin.var).get(),
"language": language,
"preview_font_size": (preview_font_size_spin.var).get()}
variables = config["variables"]
if (fonts_menu.var).get() != strings[17]:
variables["font"] = (fonts_menu.var).get()
else:
variables["font"] = font
if (preview_fonts.var).get() != strings[18]:
variables["preview_font"] = (preview_fonts.var).get()
else:
variables["preview_font"] = preview_font
with open("config.ini", "w") as configfile:
config.write(configfile)
Я не знаю, если это уместно, тоже, но в основном это делает то, что название говорит - обновляет файл конфигурация.
Что мне не нравится в функции, так это то, что для этого требуется аргумент (val
здесь, должно быть self
?). И потому что это требует этого аргумента, я не могу назвать его «правильно». Позвольте мне продемонстрировать, следующие работы просто отлично:
class OptionMenus(tk.OptionMenu):
def __init__(self, master, status, *fonts):
self.var = tk.StringVar(master)
(self.var).set(status)
(tk.OptionMenu).__init__(self, master, self.var, *fonts,
command = update_config)
Однако - вызов, как после возвращения этой ошибки: TypeError: update_config() takes 0 positional arguments but 1 was given
class Spinboxes(tk.Spinbox):
def __init__(self, master):
self.var = tk.IntVar()
tk.Spinbox.__init__(self, master, textvariable = self.var,
from_ = 0, to = 100, command = update_config)
сейчас, я решил его с помощью этого:
def crossover():
val = ""
update_config(val)
Но это похоже на способ обезьянья-то, что-то делать, так есть лучший способ назвать эту функцию?
Дело в том, что 'tk.Spinbox' не передает никаких аргументов команде обратного вызова, а' tk.OptionMenu' передает выбранное значение команде обратного вызова. Поэтому, если вы используете одну и ту же функцию, она должна иметь возможность принимать либо ноль, либо один аргумент. Вы можете сделать это, используя 'def update_config (val = None):' like kindall suggest. – fhdrsdg