tkinter中调用.place()方法设置控件坐标未生效,如何定位问题?
问题根因
- Tkinter 三种布局方法
pack()、place()、grid()互斥,同一控件仅能使用其中一种布局,后调用的布局方法会直接覆盖之前的布局配置。代码中先给 Label 调用了.place(x = 100, y = 70)设置坐标,紧接着又调用了.pack(),最终生效的是 pack 布局,place 配置的坐标完全不会生效。 - 承载 Label 的父容器是自定义的 Frame 实例,该 Frame 默认仅占据刚好容纳内部控件的大小,如果需要 place 坐标相对于整个窗口生效,需要给 Frame 的 pack 方法添加
fill=tk.BOTH, expand=True参数,让 Frame 铺满整个窗口。
修复后代码
import tkinter as tk class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master # 让Frame铺满整个窗口,保证place坐标相对于整个窗口计算 self.pack(fill=tk.BOTH, expand=True) self.create_widgets() self.master.geometry("600x300") def create_widgets(self): self.msg1 = tk.Label(self, text = "TEXT") self.msg1.place(x = 100, y = 70) # 删除多余的pack调用,仅保留place布局 if __name__ == "__main__": root = tk.Tk() app = Application(master = root) app.mainloop()
运行效果

内容的提问来源于stack exchange,提问作者Sato
相关产品推荐
相关产品推荐

