Python-将 2 组 **kwargs 传递到同一个类中。是否可以?

标签 python tkinter

假设我有一个名为 NewEntry 的类,其中包含 2 个 tkinter 小部件,ttk.Entryttk.Button,我想传递它们它们中的每一个 **kw_ent**kw_but 分别用于 Entry 和 Button 小部件,以在使用此类时启用代码灵 active 。

但是,如下面的代码所示,定义 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()

最佳答案

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 个字母标识符不会使您的代码更快(但它们肯定会降低代码的可读性)。

关于Python-将 2 组 **kwargs 传递到同一个类中。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47132049/

相关文章:

python - 如何检查最后一次更新 S3 存储桶的时间?

python - 是否有与 Ruby 的 self (!) 等价的 Python?

python - Tkinter:在 Canvas 上缩放项目

python - 将变量与其他文本一起放在 Canvas 上

python - 窗口框架中的标签不会拉伸(stretch),为什么?

python - 一般维数的多维网格

python - 使用 #!python2 无法在 Python 2 下运行

python - Pandas :选择每组中的前几行

python - 你如何在 Tkinter 的事件循环中运行你自己的代码?

python - tkinter 标签不尊重 justify 选项?