咨询Tkinter pack方法before参数的合法取值类型
Tkinter pack布局的before参数详解
参数类型
before接受的是同属一个父组件的Tkinter组件对象实例,比如你代码里的button1、label这类已经创建好的组件对象,绝对不是int、str、布尔值这类基础类型。
作用
它用来调整组件的布局顺序:把当前调用pack(before=xxx)的组件,放到xxx组件的前面——视觉位置会跟着side参数变,默认side=TOP时会出现在xxx上方,设side=LEFT时就会出现在xxx左侧。
实际使用示例
修改你的测试代码,就能直观看到效果:
import tkinter as tk root = tk.Tk() root.title('Before example') root.geometry("300x250") root.configure(bg='#a8c3bc') label = tk.Label(root, text="What does before do?", bg="#a8c3bc") label.pack() button1 = tk.Button(root, text="Button 1", bg="green", fg="white") button1.pack() # 用before把button2放到button1的前面(上方) button2 = tk.Button(root, text="Button 2 (above Button1)", bg="red", fg="white") button2.pack(before=button1) root.mainloop()
运行后红色按钮会出现在绿色按钮上方,而不是默认的下方。
再试一个把按钮放到标签前面的场景:
# 把button2放到标签的前面(上方) button2 = tk.Button(root, text="Button 2 (above Label)", bg="red", fg="white") button2.pack(before=label)
这时候按钮会显示在标签的上方。
常见踩坑点
- 别传int、str这类基础类型:pack管理器只认组件对象,传其他类型直接报错。
- 传入的组件必须和当前组件是同一个父容器:父组件不一样的话,before完全不会生效。
内容的提问来源于stack exchange,提问作者user12405218
相关产品推荐
相关产品推荐

