【问题标题】:Tkinter: How to add kwargs to a class you inherit from?Tkinter:如何将 kwargs 添加到您继承的类中?
【发布时间】:2017-01-13 02:02:54
【问题描述】:

如何将关键字参数 (**options) 添加到继承自 tk.Frame 的 Tkinter 类?例如,我要做的就是设置框架的widthheight(或任何其他选项)。

更广泛的问题是:如何将 **kwargs 添加到类本身继承的对象中?

class profiles(tk.Frame):

  def __init__(self, parent, *args, **kwargs):
    self.parent = parent
    kwargs['width'] = 900
    kwargs['height'] = 600
    super(profiles, self).__init__(parent, *args, **kwargs)

编辑

这是我试图理解的完整代码示例。这是完整的代码:

import tkinter as tk

class profiles(tk.Frame):

  def __init__(self, parent, *args, **kwargs):
    self.parent = parent
    kwargs['width'] = 900
    kwargs['height'] = 600
    kwargs['background'] = 'red'
    #tk.Frame.__init__(self, parent, *args, **kwargs)
    super(profiles, self).__init__(parent, *args, **kwargs)

    #self.parent.geometry('900x600')

    self.profile_name_label = tk.Label(self.parent, text='Profile name:')
    self.profile_name_label.grid(row=0, column=0, padx=(20), pady=20)

    self.ProfileNameVar = tk.StringVar()
    self.profile_name_entry = tk.Entry(self.parent, textvariable=self.ProfileNameVar)
    self.profile_name_entry.grid(row=0, column=1, pady=(20))

root = tk.Tk()
profiles(root)
root.mainloop()

关于此代码的问题:

  1. self.parent.geometry('900x600') 完成了我所期望的调整窗口大小的操作。 应该 kwargs['width'] = 900 和 kwargs['height'] = 600 做同样的事情因为 tk.Frame 位于其父 root 内? 似乎没有一个 kwargs我添加做任何事情。

  2. 即使我添加kwargs['background'] = 'red',我也看不到任何效果。我见过使用这种语法的人的例子:herehere为什么背景颜色不会变成红色?

【问题讨论】:

  • 所以实际上你总是在强制高度和宽度?
  • 你的代码有什么问题?

标签: python class tkinter


【解决方案1】:

直接加你要加的就行了,不用加kwargs

class profiles(tk.Frame):

    def __init__(self, master, *args, **kwargs):
        tk.Frame.__init__(self, master, width=900, height=800, *args, **kwargs)

【讨论】:

  • 如果widthheight 已经存在于kwargs 中,这将导致重复参数错误
【解决方案2】:

你会这样做:

class Profiles(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        self.parent = parent
        kwargs.update(width=900, height=600)
        super(profiles, self).__init__(parent, *args, **kwargs)

如果关键字在对Profiles() 的调用中被传递,这将覆盖关键字。需要额外的逻辑来避免这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2022-09-22
    • 2015-09-19
    • 1970-01-01
    • 2020-04-06
    • 2018-02-06
    相关资源
    最近更新 更多