【问题标题】:Beginner-Question: Python Tkinter Frames hiding behind small label初学者问题:隐藏在小标签后面的 Python Tkinter Frames
【发布时间】:2022-01-23 20:25:19
【问题描述】:

我有一个关于 python tkinter 的初学者问题:

我有一个这样的框架:

import tkinter

root = tkinter.Tk()
root.geometry('100x100')

frame = tkinter.Frame(root, width=100, height=80, bg='green')
frame.pack()

root.mainloop()

结果是一个窗口,大部分是绿色的。现在我想在那个绿色区域上放置一个标签。因此,我在 frame.pack()root.mainloop() 之间添加了以下内容:

label = tkinter.Label(frame, text='TESTTEST')
label.pack()

这会导致一个窗口打印 TESTTEST。但没有什么是绿色的了。我的 Frame 去哪儿了?文字不够大,无法用自己的背景完全覆盖绿色区域。

我做错了什么?为什么它不能那样工作?

framelabel 之间放置另一个 Frame,如下所示:

frame2 = tkinter.Frame(frame, width=100, height=20)
frame2.pack()

导致标签上方的区域是无色的。但是,在我的标签的左侧和右侧,它是绿色的?! 上面和下面都不是绿色。就在我的标签的左右。

这是如何工作的?

【问题讨论】:

  • Rick,如果能解决您的问题,请记住接受您的问题的答案。这归功于花时间研究您的问题的人。谢谢

标签: python tkinter


【解决方案1】:

默认情况下,当您使用 packgrid 时,小部件会缩小以适合其子级。这就是你 99% 的时间想要的。制作简单示例时可能看起来不直观且无用,但在创建真实、复杂的用户界面时,这会使工作变得更容易,因为您不必担心计算小部件的大小和位置。

如果将窗口配置为大于框架,并且将框架配置为填充窗口,您将看到绿色。

frame.pack(fill="both", expand=True)

【讨论】:

    【解决方案2】:

    使用label.place() 指定您想要标签的位置。 例如

    label.place(x=20,y=20)
    

    这会将标签放在frame 中的位置 (20,20)。

    默认标签宽度是文本长度加上填充。您可以在place() 中指定宽度和高度以及其他选项。

    您可以在初始化语句label = tkinter.Label(frame,<*options in here>) 中指定选项以获取背景、前景色和其他属性。

    tkinter 使用默认字体,因此您需要查看 font 选项来更改它。可以创建自己的字体并应用它,但我建议您在尝试之前先了解更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      相关资源
      最近更新 更多