【问题标题】:tkinter LabelFrame not attatching widgetstkinter LabelFrame 未附加小部件
【发布时间】:2012-04-26 02:11:48
【问题描述】:

我遇到了一个 tkinter 程序的问题,我有 LabelFrame 对一组标签和条目进行分组,但是,它没有对我的小部件进行分组。我的 LabelFrame 代码如下:

(编辑:我设法让标签显示,但是,它没有对我的小部件进行分组。)

root=Tk()
message_frame=LabelFrame(root,text="testing",padx=0,pady=0,width=100,height=100).grid(padx=5,pady=10)

message_label=Label(message_frame,text="Message").grid(row=1,column=0,sticky=W)
pub_label=Label(message_frame,text="Public Key").grid(row=2,column=0,sticky=W)
priv_label=Label(message_frame,text="Public Key").grid(row=3,column=0,sticky=W)

message_entry=Entry(message_frame,textvariable=message,width=50).grid(row=1,column=1,sticky=W)
pub_entry=Entry(message_frame,textvariable=pub_key,width=50).grid(row=2,column=1,sticky=W)
priv_entry=Entry(message_frame,textvariable=private_key,width=50).grid(row=3,column=1,sticky=W)

【问题讨论】:

    标签: python tkinter python-2.7


    【解决方案1】:

    在 Tkinter 中,典型的工作流程是创建一个小部件,然后使用几何管理器将其放置在两个单独的行上

    如果我没记错的话,Tkinter 小部件上的.grid 方法返回None。因此,如果您在创建它之后立即print message_frame,您可能会看到它是None。当您使用传递给下一个小部件时,它们会假定您要将其放在根小部件上...

    简单的解决方法是执行以下操作:

    message_frame=LabelFrame(root,text="testing",padx=0,pady=0,width=100,height=100)
    message_frame.grid(row=0,column=0)
    

    你可能想对所有小部件做同样的事情,因为我怀疑你真的想要pub_label = priv_label = None ...

    【讨论】:

    • 是的,这就是问题所在。我一直不明白为什么人们将包或网格与小部件创建结合起来,肯定有一个教程提倡......
    • @BryanOakley 如果将其子类化并让packgrid 返回self,您可以做到这一点......但我认为这只是一件很自然的事情。我怀疑任何教程都会提倡这一点,因为检索小部件上的句柄以对其进行任何操作都非常困难......
    • 我认为 Bryan 所说的是有这么多人在使用这种容易出错的模式,以至于一定存在有人提倡(或提供示例)这种用法的地方。对于具有 Smalltalk 背景的我来说,这似乎很自然,但我认为它不会如此传播。在 Python(以及其他广泛使用的语言)中,您不希望“过程”返回 self。
    • @FabienAndre 我明白 Bryan 的意思……这似乎是一件很糟糕的事情,我很难想象任何知识渊博的人会写出这样的“错误”。 ..我想如果您只是创建以后不打算做任何事情的标签就可以了...话虽如此,因为它很常见,我想知道制作@会不会有什么害处987654332@, pack, place 返回self?
    • @BryanOakley 经过几次搜索,它可能来自 perl/tk 代码的直接翻译,其中同一行上的 pack 和 grid 调用很常见......
    【解决方案2】:

    给框架一些尺寸属性:

    from Tkinter import *
    root = Tk()  
    message_frame = LabelFrame(root,text="testing",padx=0,pady=0,width=100,height=100).grid(row=0,column=0,padx=5,pady=10)
    

    一旦定义了宽度和高度,框架就会很好地显示出来。 如果您发布一些框架的内容,如果这不是问题,它可能会更清楚。

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多