如何在Tkinter中保持小部件居中?
当我更改选项菜单时,所有内容都会向左移动,我希望所有东西都保持居中。
每次我更改小部件 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()