Tkinter:如何使按钮居中?
Tkinter: How to make a button center itself?
我正在 Python 中制作一个程序,我想使用中间有一堆按钮的布局。如何使用 pack() 使按钮居中?
要水平居中,这应该足够了
button.pack(side=TOP)
但要水平和垂直居中,您可以使用嵌套框架。检查以下脚本:
import tkinter as tk
#%% Frames
frameA = tk.Frame(background="#c8c8c8")
frameB = tk.Frame(width=200, height = 200, background="#646464")
# Nested Frame. framebb is created within frameB without width or height
framebb = tk.Frame(frameB, background="#646464")
frameC = tk.Frame(width=100, height = 100, background="bisque")
frameA.pack(side='top', fill=None)
frameB.pack(side='top')
# expand is the key parameter to center the framebb within frameB
framebb.pack(expand=True)
frameC.pack(side='bottom')
#frameA.pack_propagate(False)
frameB.pack_propagate(False)
frameC.pack_propagate(False)
#%% Buttons and Labels
tk.Label(frameA, text = "Text within the frame A").pack()
a = tk.Button(framebb, text = "A").pack()
b = tk.Button(framebb, text = "B").pack()
c = tk.Button(framebb, text = "C").pack()
d = tk.Button(frameC, text = "D").pack()
e = tk.Button(frameC, text = "E").pack()
tk.mainloop()
另一种方法是使用 .grid()
方法
button.grid(row=1,col=0)
row=1,col=0
的值取决于另一个小部件在您的 window
中的位置
或者您可以使用 .place(relx=0.5, rely=0.5, anchor=CENTER)
button.place(relx=0.5, rely=0.5, anchor=CENTER)
请注意,参数 anchor
引用对象(在本例中为按钮)的相对位置。 anchor
未引用 window 中的位置。你可以认为按钮是一艘有多个锚的船,所以你应该选择一个坐标,然后在那个坐标上固定哪个锚。
使用 .place()
的示例:
from tkinter import * # Use this if use python 3.xx
#from Tkinter import * # Use this if use python 2.xx
a = Button(text="Center Button")
b = Button(text="Top Left Button")
c = Button(text="Bottom Right Button")
# You can use the strings the referencing the relative position on the button
# strings = n, ne, e, se, s, sw, w, nw, c or center
# Or you can use the constants of tkinter
# N, NE, E, SE, S, SW, W, NW, CENTER
a.place(relx=0.5, rely=0.5, anchor=CENTER)
b.place(relx=0.0, rely=0.0, anchor=NW)
c.place(relx=1.0, rely=1.0, anchor=SE)
mainloop()
这个有点老了,你必须这样做:
import tkinter as tk #you can do 'from tkinter import *', any is fine
btn = tk.Button(text = "Centered Button")
btn.place(relx=0.5, rely=0.5, anchor='center')
我正在 Python 中制作一个程序,我想使用中间有一堆按钮的布局。如何使用 pack() 使按钮居中?
要水平居中,这应该足够了
button.pack(side=TOP)
但要水平和垂直居中,您可以使用嵌套框架。检查以下脚本:
import tkinter as tk
#%% Frames
frameA = tk.Frame(background="#c8c8c8")
frameB = tk.Frame(width=200, height = 200, background="#646464")
# Nested Frame. framebb is created within frameB without width or height
framebb = tk.Frame(frameB, background="#646464")
frameC = tk.Frame(width=100, height = 100, background="bisque")
frameA.pack(side='top', fill=None)
frameB.pack(side='top')
# expand is the key parameter to center the framebb within frameB
framebb.pack(expand=True)
frameC.pack(side='bottom')
#frameA.pack_propagate(False)
frameB.pack_propagate(False)
frameC.pack_propagate(False)
#%% Buttons and Labels
tk.Label(frameA, text = "Text within the frame A").pack()
a = tk.Button(framebb, text = "A").pack()
b = tk.Button(framebb, text = "B").pack()
c = tk.Button(framebb, text = "C").pack()
d = tk.Button(frameC, text = "D").pack()
e = tk.Button(frameC, text = "E").pack()
tk.mainloop()
另一种方法是使用 .grid()
方法
button.grid(row=1,col=0)
row=1,col=0
的值取决于另一个小部件在您的 window
或者您可以使用 .place(relx=0.5, rely=0.5, anchor=CENTER)
button.place(relx=0.5, rely=0.5, anchor=CENTER)
请注意,参数 anchor
引用对象(在本例中为按钮)的相对位置。 anchor
未引用 window 中的位置。你可以认为按钮是一艘有多个锚的船,所以你应该选择一个坐标,然后在那个坐标上固定哪个锚。
使用 .place()
的示例:
from tkinter import * # Use this if use python 3.xx
#from Tkinter import * # Use this if use python 2.xx
a = Button(text="Center Button")
b = Button(text="Top Left Button")
c = Button(text="Bottom Right Button")
# You can use the strings the referencing the relative position on the button
# strings = n, ne, e, se, s, sw, w, nw, c or center
# Or you can use the constants of tkinter
# N, NE, E, SE, S, SW, W, NW, CENTER
a.place(relx=0.5, rely=0.5, anchor=CENTER)
b.place(relx=0.0, rely=0.0, anchor=NW)
c.place(relx=1.0, rely=1.0, anchor=SE)
mainloop()
这个有点老了,你必须这样做:
import tkinter as tk #you can do 'from tkinter import *', any is fine
btn = tk.Button(text = "Centered Button")
btn.place(relx=0.5, rely=0.5, anchor='center')