【问题标题】:Tkinter Custom Widget rowconfigure missing argument 'index'Tkinter 自定义小部件行配置缺少参数“索引”
【发布时间】:2018-05-08 13:36:55
【问题描述】:

我编写了一个包含标签、条目和树视图的自定义小部件。现在我想要那个自定义小部件来填充我想放置它的框架。我认为行配置是要去做的事情。所以我的代码如下所示:

import tkinter as tk
import tkinter.ttk as ttk

class CustomWidget(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)        
        tk.Frame.rowconfigure(3, weight=1)   

        self.Search_Text_Label = tk.Label(self, text="Search:",font=("Century Gothic",12))
        self.Search_Text_Label.grid(row=1,column=1, sticky='W', padx=10)

        self.entry = tk.Entry(self, width=30)
        self.entry.grid(row=1,column=2, sticky='W')
        self.entry.bind('<Return>',search)

        self.tree = ttk.Treeview(self)
        self.tree.state = "disabled"

        self.tree.grid(row=2,column=1,columnspan=2, rowspan=2, sticky='S', pady=0, padx=20)

但我收到此错误消息:

TypeError: grid_rowconfigure() 缺少 1 个必需的位置参数: '索引'

我需要改变什么?这真的是要走的路吗?

【问题讨论】:

  • 让小部件配置其在其父级中的位置是糟糕的设计。它使代码难以更新,因为如果您更改父级中的某些内容,则必须更改执行此操作的所有其他类中的某些内容。创建自定义小部件实例的代码应负责将其放置在屏幕上。

标签: python user-interface tkinter widget


【解决方案1】:

你在 tk.Frame 类上调用 rowconfigure。相反,您应该在您的类实例上调用它,即self,所以:

self.rowconfigure(3, weight=1)

另外,如果你想让 Treeview 垂直拉伸,你应该使用sticky='NS'

【讨论】:

  • 我改变了,没有改变。如果我给我的 tk.Frame 一个背景颜色,我会发现它比我放置自定义小部件的主框架中的框架更小。如何让它们的尺寸相同?
  • “没有变化”是什么意思?如果你改变这两个东西,你应该不会再收到错误,Treeview 应该垂直拉伸。如果你想要更多,你应该明确你想要什么。
  • 我现在明白了。我必须使放置在 MainGUI 框架中的自定义小部件具有粘性。之后它工作得很好!谢谢!
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多