Python将两组**kwarg传递到同一个类中。有可能吗?

2024-05-02 13:36:36 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个名为NewEntry的类,其中包含两个tkinter小部件ttk.Entryttk.Button,我想分别为Entry和Button小部件传递它们中的每一个**kw_ent**kw_but,以便在使用此类时实现代码灵活性。你知道吗

但是,如下面的代码所示,定义2kwargs会产生语法错误(以这种方式编码时,这是非常明显的)。你知道吗

有办法通过2夸尔格吗?你知道吗

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()

Tags: selfmasterinitvardefbuttonrootgrid
1条回答
网友
1楼 · 发布于 2024-05-02 13:36:36

Is there a way to pass 2 kwargs?

很简单:不要使用**kwargs符号。你知道吗

class NewEntry(ttk.Frame):
    def __init__(self, master=None, kw_ent=None, kw_but=None):
        if kw_ent is None:
            kw_ent = {}
        if kw_but is None:
            kw_but = {}

        # your existsing code here

当然,在实例化NewEntry时,您必须更加明确—假设在a = NewEntry(root, width=13)中,width应该是kw_ent的一部分,您需要:

a = NewEntry(root, kw_ent={"width":13})

作为旁注,您可能需要考虑一种比“ent”或“but”更具可读性的命名方案,但会想到“entry”和“button”。。。简短并不意味着晦涩和3个字母的标识符不会让你的代码更快(但他们肯定会让它更不可读)。你知道吗

相关问题 更多 >