假设我有一个包含5个小部件的框架,并使用grid
方法来管理位置:
到目前为止,这么好。但是,如果我现在想要制作这样的东西(使用错误的方法获得),那该怎么办呢?
即。按钮horizontal settings
跨越4行。如果我能够以这种方式设置网格配置(例如):grid(ncols = 1, nrows = 5)
然后我会执行类似button.columnconfigure(0,weight=4)
和label.columnconfigure(0,weight=1)
的操作。
如何解决这个问题?
我将解释为什么这不是一个小问题。这是因为这两组小部件(在第一个图和第二个图中)位于不同的框架中。所以第一帧有5行而第二帧只有2.并且小部件不会对齐:
编辑: 这是我的代码:
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
labelFrame = tk.Frame(self)
labelFrame.pack(fill='x', side="top")
startLabel = tk.Label(labelFrame,
text="Start page")
startLabel.pack(pady=10)
quitFrame = tk.Frame(self)
quitFrame.pack(fill='x',side="bottom")
quitButton = tk.Button(quitFrame, text="Quit",
command=quit,
bg="pink")
quitButton.pack(pady=10)
operateFrame = tk.Frame(self)
operateFrame.pack()
channelGroup = tk.Frame(operateFrame)
channelGroup.grid(row=0, column=0, sticky = 'n')
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(operateFrame)
triggerGroup.grid(row=0, column=1, sticky='n')
trigLabel = tk.Label(triggerGroup,
text="Trigger group")
trigLabel.grid(row=0,column=0,pady=10)
trigButton = tk.Button(triggerGroup, text="Trigger Settings",
command=lambda: controller.show_frame("Trigger"))
trigButton.grid()
horizGroup = tk.Frame(operateFrame)
horizGroup.grid(row=0, column=2, sticky='n')
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()
之后我得到:
答案 0 :(得分:1)
首先,您的示例不完整。要解决这个问题,我需要运行它;我很好,但我不够用眼睛进行调试。你要我写一堆样板文件。发布完整的代码段;包括进口和入口点。
要解决您的问题,您只需告诉框架,行和按钮,使用sticky='ns'
和rowconfigure(1, weight=1)
扩展到所有可用的垂直空间。
horizGroup = tk.Frame(operateFrame)
horizGroup.grid(row=0, column=2, sticky='ns')
horizGroup.rowconfigure(1, weight=1)
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(sticky='ns')