は、私はこのクラスを使用するときに、コード柔軟性を可能にするために、それぞれ入力し、Buttonウィジェットのそれぞれにそれらの1 **kw_ent
と**kw_but
を渡したい2つのTkinterのウィジェット、ttk.Entry
とttk.Button
、とNewEntry
という名前のクラスを考えてみましょう。Python - 2組の** kwargsを同じクラスに渡します。出来ますか?
しかし、以下のコードに示すように、2 kwargsを定義すると構文エラーが発生します(これは、このようにコード化すると非常に明白です)。
2 kwargsを渡す方法はありますか?
class NewEntry(ttk.Frame):
def __init__(self, master=None, **kw_ent, **kw_but):
ttk.Frame.__init__(self, master)
self.master = master
self.ent_var = tk.StringVar()
self.ent = ttk.Entry(self, textvariable=self.ent_var, **kw_ent)
self.ent.grid(row=0, column=0)
self.button = ttk.Button(self, text='Button', command=self.but_callback, **kw_but)
self.button.grid(row=0, column=1)
self.ent.bind('<FocusIn>', self.clear_ent)
self.init_vals()
def init_vals(self):
self.ent_var.set("Enter value")
self.ent['foreground'] = 'red'
def clear_ent(self, event):
self.ent_var.set('')
self.ent['foreground'] = '#4c4c4c'
def restore_ent(self, event):
self.init_vals()
def but_callback(self):
print(self.ent_var.get())
sleep(1)
self.init_vals()
root = tk.Tk()
a = NewEntry(root, width=13)
a.grid()
root.mainloop()
どのようなキーワード引数が '** kw_ent'に属し、' ** kw_but'に属するのかをPythonはどのように決定しますか? 2つの別々の 'dict'オブジェクトを通常のパラメータとして渡すだけです:' kw_ent、kw_but'。 –
私はこれがその特定の理由からそれを解決する方法ではないことを知っています。 –
最初にもう1つのdictを '.update()'し、それを関数呼び出しに渡すことができます。 – Evert