我正在尝试制作一个应用程序,但遇到了问题。有一个框架
:
status_frame = Frame(self.root, height=60, style='status.TFrame') # white one at the top
status_frame.pack_propagate(0)
status_frame.pack(fill=X)
有一个标签
:
status_label = Label(status_frame, text='Label', style='status_bold.TLabel')
并使用 pack()
方法放置它:
status_label.pack(side=LEFT, padx=5)
padx=5
工作正常:
但是如果我添加 pady=25
它不会移动,它会奇怪地切割:
这是为什么?我如何向上移动Label
?我需要将其与 pack()
一起放置。完整代码:
from tkinter import *
from tkinter.ttk import *
root = Tk()
root.geometry('400x250')
root.resizable(0, 0)
style = Style()
style.configure('status.TFrame', background='white')
style.configure('status_bold.TLabel', background='white', font=('Arial 9 bold'))
style.configure('status.TLabel', background='while')
status_frame = Frame(root, height=60, style='status.TFrame')
status_frame.pack_propagate(0)
main_frame = Frame(root, height=150)
main_frame.pack_propagate(0)
button_frame = Frame(root, height=40)
button_frame.pack_propagate(0)
status_label = Label(status_frame, text='Label', style='status_bold.TLabel')
left_button = Button(button_frame, text='Left')
right_button = Button(button_frame, text='Right')
status_frame.pack(fill=X)
Separator(root, orient=HORIZONTAL).pack(fill=X)
main_frame.pack(fill=X)
Separator(root, orient=HORIZONTAL).pack(fill=X)
button_frame.pack(fill=X)
status_label.pack(side=LEFT, padx=5, pady=25)
right_button.pack(side=RIGHT, padx=5)
left_button.pack(side=RIGHT)
root.mainloop()
最佳答案
由于您已关闭 status_frame
的几何传播并强制空间高度恰好为 60 像素,因此没有足够的空间容纳标签以及顶部和底部的 25 像素填充。有了这个填充,标签就只剩下 10 个像素了。 Tkinter 别无选择,只能从标签中删除像素。
如果您尝试使用 pady
将标签文本向下移动,您可以在顶部添加填充,如下所示:
status_label.pack(side=LEFT, padx=5, pady=(25, 0))
如果您希望顶部和底部都有填充,那么您不应该关闭几何传播。就我个人而言,我认为很少有情况下关闭传播是正确的做法。通过将传播保留在适当的位置,框架将增大或缩小,以便它始终适合子窗口小部件,这在 99% 以上的时间都是您想要的。
关于python - 使用 pack(pady) 的 Tkinter 小部件没有移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69917479/