我与python
合作了一个星期,Tkinter
甚至更少,如果我的问题很典型,那就很抱歉。
我想为示波器编写一个简单的GUI。我遇到了如何将按钮大小调整到其他按钮大小的问题。这是我所达到的(截图)。
您可能会注意到trigger
和horizontal
按钮的大小小于所有channel
组的大小。那么如何使他们的完全大小适合channel
组大小。这是我的一段代码。
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
startLabel = tk.Label(self,
text="Start page")
startLabel.pack(side="top")
quitGroup = tk.Frame(self)
quitGroup.pack(side="bottom")
quitButton = tk.Button(quitGroup, text="Quit",
command=quit,
bg="pink")
quitButton.grid(pady=10)
channelGroup = tk.Frame(self)
channelGroup.pack(side=tk.LEFT)
chLabel = tk.Label(channelGroup,
text="Channel group")
chLabel.grid(pady=10)
ch1Button = tk.Button(channelGroup, text="CH1 Settings",
command=lambda: controller.show_frame("CH1"))
ch1Button.grid(row=1, column=0)
ch2Button = tk.Button(channelGroup, text="CH2 Settings",
command=lambda: controller.show_frame("CH2"))
ch2Button.grid(row=2, column=0)
ch3Button = tk.Button(channelGroup, text="CH3 Settings",
command=lambda: controller.show_frame("CH3"))
ch3Button.grid(row=3, column=0)
ch4Button = tk.Button(channelGroup, text="CH4 Settings",
command=lambda: controller.show_frame("CH4"))
ch4Button.grid(row=4, column=0)
triggerGroup = tk.Frame(self)
triggerGroup.pack(side=tk.LEFT)
trigLabel = tk.Label(triggerGroup,
text="Trigger group")
trigLabel.grid(pady=10)
trigButton = tk.Button(triggerGroup, text="Trigger Settings",
command=lambda: controller.show_frame("Trigger"))
trigButton.grid(row=1, column=0)
trigButton.grid(ipady=43)#43? What?
horizGroup = tk.Frame(self)
horizGroup.pack(side=tk.LEFT)
horizLabel = tk.Label(horizGroup,
text="Horizontal group")
horizLabel.grid(pady=10)
horizButton = tk.Button(horizGroup,
text="Horizontal settings",
command=lambda: controller.show_frame("Horizontal"))
horizButton.grid(row=1, column=0)
horizButton.grid(ipady=43)#you again ...
是否可以将这些按钮放在不同的框架中?我想保留它。
答案 0 :(得分:2)
如果你希望这些小部件真的完全彼此对齐,那么最好将它们对齐在同一个网格上并使用sticky
参数使按钮拉伸以填充他们的细胞:
import tkinter as tk
root = tk.Tk()
chLabel = tk.Label(root, text="Channel group")
channelButtons = tk.Frame(root, bg='yellow')
ch1Button = tk.Button(channelButtons, text="CH1 Settings")
ch1Button.pack(fill='x')
ch2Button = tk.Button(channelButtons, text="CH2 Settings")
ch2Button.pack(fill='x')
ch3Button = tk.Button(channelButtons, text="CH3 Settings")
ch3Button.pack(fill='x')
ch4Button = tk.Button(channelButtons, text="CH4 Settings")
ch4Button.pack(fill='x')
trigLabel = tk.Label(root, text="Trigger group")
trigButton = tk.Button(root, text="Trigger Settings")
horizLabel = tk.Label(root, text="Horizontal group")
horizButton = tk.Button(root, text="Horizontal settings")
# Align the labels and buttons in a 2-by-3 grid
chLabel.grid(row=0, column=0, pady=10)
trigLabel.grid(row=0, column=1, pady=10)
horizLabel.grid(row=0, column=2, pady=10)
channelButtons.grid(row=1, column=0, sticky='news')
trigButton.grid(row=1, column=1, sticky='news')
horizButton.grid(row=1, column=2, sticky='news')
root.mainloop()
答案 1 :(得分:1)
问题的根源在于您没有利用pack
和grid
可用的选项。例如,当您执行.pack(side='left')
时,您可以将其留给tkinter来决定如何在分配的空间中垂直对齐窗口小部件。
默认情况下,tkinter会垂直居中。由于各个部分(通道组,触发器组,水平组)的原始高度略有不同,因此可以防止顶部和/或底部完全对齐。
一个简单的解决方法是使用“填充”选项让小部件填充分配给它们的空间。如果您不希望它们填充分配的空间,您可以使用“锚点”选项将小部件固定在顶部。