我有一個奇妙的功能在這裏:爲什麼我的函數需要一個參數,以及如何使用+來調用它而沒有?
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)
但是 - 調用像下面返回此錯誤:
def crossover():
val = ""
update_config(val)
:
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)
現在,我一直在使用這個解決它
但是,它似乎是一種猴子般的做事方式,那麼有沒有更好的方法來調用這個功能?
事情是'tk.Spinbox'不會將任何參數傳遞給回調命令,但'tk.OptionMenu'將所選值傳遞給回調命令。因此,如果使用相同的函數,它應該能夠接受零個或一個參數。你可以通過使用'def update_config(val = None)來完成這個工作:''好像kindall建議的那樣。 – fhdrsdg