Python Tkinter中能否在place()方法中使用padx和pady参数?
Tkinter中place()方法无法使用padx/pady的解决办法
首先明确:Tkinter的place()布局方法本身不支持padx和pady参数,这两个参数是pack()和grid()布局专属的,所以你给Label的place(padx=1, pady=1)不会产生任何效果。另外你的代码里还有两个小问题:一是border这个Frame没有设置宽高,place()默认会让它收缩到子组件的尺寸,但Label用place()后并没有撑开Frame,导致红色背景看不到;二是Label(...).place(...)返回的是None,把它赋值给aboutme后,后续无法再操作这个Label对象。
下面给你两种可行的实现方式:
方案一:内部用pack/grid加padding,外层Frame用place定位
这是最常用的方式,在Frame内部用支持padx/pady的布局方式给Label加内边距,然后用place定位整个Frame:
from tkinter import * app = Tk() app.geometry("433x255") # 给Frame设置宽高,或者让子组件撑开它 border = Frame(background="red", width=220, height=60) # 先创建Label,再单独调用pack(避免返回None) aboutme = Label(border, text="welcome to my tkinter GUI") # 用pack的padx/pady实现内边距 aboutme.pack(padx=10, pady=10) # 用place定位整个Frame到指定位置 border.place(x=30, y=30) app.mainloop()
方案二:用place的x/y参数手动模拟padding
如果一定要全程用place布局,可以通过设置Label的x、y偏移量来模拟padx/pady的效果:
from tkinter import * app = Tk() app.geometry("433x255") # 给Frame设置固定宽高,确保红色背景可见 border = Frame(background="red", width=200, height=50) border.place(x=30, y=30) # 用x和y参数设置Label在Frame内的偏移,模拟padx=10、pady=10 aboutme = Label(border, text="welcome to my tkinter GUI") aboutme.place(x=10, y=10) app.mainloop()
内容的提问来源于stack exchange,提问作者Aaryan Bhurtel
相关产品推荐
相关产品推荐

