【问题标题】:Frame disappears while packing label in it in Tkinter [duplicate]Tkinter中的包装标签时框架消失了[重复]
【发布时间】:2021-04-22 03:53:18
【问题描述】:

在我的简单 GUI 中,每当我按下按钮时,文本应该被打包在框架内,但在按下框架后就会消失。

代码如下:

import tkinter as tk

window=tk.Tk()
window.geometry('600x600')
window.resizable(False,False)

f1=tk.Frame(window,height=200,width=200,bg='yellow')
f1.place(x=400,y=400)

some=tk.StringVar()
def press():
    msg=some.get()
    l1=tk.Label(f1,text=str(msg))
    l1.pack()

e1=tk.Entry(window,textvariable=some)
e1.pack()
b1=tk.Button(window,text='press',command=press)
b1.pack()

window.mainloop()

文本被打包,但框架消失了。

【问题讨论】:

  • 我认为这是因为您试图同时使用 placepack 几何管理器(它们不能很好地配合使用)。
  • 在复杂的 GUI 方面,位置比包装更精确。那么有什么办法可以解决这个问题呢?
  • 对 l1 使用 .place() 而不是 .pack()
  • 就我个人而言,我 99% 的工作都是使用 grid 来完成的——而且我从来没有觉得这样做会失去太多的控制权。此外,当您使用place 时,当您以绝对值而不是相对值指定位置或尺寸时,很容易变得依赖于分辨率和/或窗口大小。为了解决这个问题,我建议你选择一个经理并至少在每个框架内都坚持下去。

标签: python tkinter


【解决方案1】:

这是因为 Frame 会根据里面的内容调整其大小。 一开始帧保持在初始化期间定义的大小,但是当您添加标签时,它会根据内容的尺寸调整大小。 要禁用此行为,您需要添加 f1.pack_propagate(0)

第二件事是添加文本周围的背景不会是黄色的,因此您还需要将其添加到参数中:l1=tk.Label(f1,text=str(msg),bg='yellow')

应用这些更改后,它会起作用,但如前所述,在一个窗口中使用 place 和 pack 是不可取的。这是不可预测的。 所以我的最终版本是这样的:

import tkinter as tk

window=tk.Tk()
window.geometry('600x600')
window.resizable(False,False)


some=tk.StringVar()
def press():
    msg=some.get()
    l1=tk.Label(f1,text=str(msg),bg='yellow')
    l1.pack(anchor="w")

e1=tk.Entry(window,textvariable=some)
e1.pack()
b1=tk.Button(window,text='press',command=press)
b1.pack()

f1=tk.Frame(window,height=200,width=200,bg='yellow')
f1.pack(anchor="se")
f1.pack_propagate(0)

window.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多