如何在Tkinter中保持小部件居中?

1 投票
1 回答
511 浏览
提问于 2025-04-18 13:57

当我更改选项菜单时,所有内容都会向左移动,我希望所有东西都保持居中。

每次我更改小部件 w2 时,它都会发生变化。

代码:

from Tkinter import *

root=Tk()
root.geometry("540x250+400+250")
root.title('Converter')
root.resizable(0, 0)

variable = StringVar(root)
variable.set("   Select A Measurement   ") # default value

variable2 = StringVar(root)
variable2.set("Select A Second Measurement") # default value

l=Label(root,text='To')
l.grid(row=1, column=1, sticky='NW')

w = OptionMenu(root, variable, "CM", "MM", "M", "Inches")
w.grid(row=1, column=0, sticky='NE')

w2 = OptionMenu(root, variable2, "Inches", "MM", "M", "CM")
w2.grid(row=1, column=2, sticky='NW')

#spacers
w = Label(root,text='  ')
w.grid(row=3, column=1, sticky='NW')

#spacers
w = Label(root,text='  ')
w.grid(row=2, column=1, sticky='NW')

b = Button(root, text="  Convert  ",font=(None,15))
b.grid(row=4, column=1, sticky='NW')

mainloop()

1 个回答

0

问题是,网格(Grid)是灵活的,如果我们不想让它们移动,就需要使用 .grid_columnconfigure(1, weight=100,minsize=150) 中的 minsize 来防止它们缩小。

根据文档的说明:

“columnconfigure”和“rowconfigure”都可以设置一个“minsize”选项,这个选项指定了一个最小大小,确保列或行不会缩小到这个大小以下。

from Tkinter import *

root=Tk()
root.geometry("540x250+400+250")
root.title('Converter')
root.resizable(0, 0)

frame = Frame(root)
frame.grid(row=0, column=0, sticky='NSEW')


frame.grid_columnconfigure(0,minsize=180 )
frame.grid_columnconfigure(1, weight=100,minsize=150)
frame.grid_columnconfigure(2, weight=100,minsize=150)
frame.grid_columnconfigure(3, weight=100,minsize=150)

variable = StringVar(root)
variable.set("   Select A Measurement   ") # default value

variable2 = StringVar(root)
variable2.set("Select A Second Measurement") # default value

l=Label(frame,text='To')
l.grid(row=1, column=1, sticky='NW',)


w = OptionMenu(frame, variable, "CM", "MM", "M", "Inches")
w.grid(row=1, column=0, sticky='NE')

w2 = OptionMenu(frame, variable2, "Inches", "MM", "M", "CM")
w2.grid(row=1, column=2, sticky='NW')

#spacers
w = Label(frame,text='  ')
w.grid(row=3, column=1, sticky='NW')

#spacers
w = Label(frame,text='  ')
w.grid(row=2, column=1, sticky='NW')

b = Button(frame, text="  Convert  ",font=(None,15))
b.grid(row=4, column=1, sticky='NW')

mainloop()

撰写回答