Python 在Tkinter中有任何小部件之前,我可以设置网格配置吗?

Python 在Tkinter中有任何小部件之前,我可以设置网格配置吗?,python,tkinter,Python,Tkinter,假设我有一个框架,其中包含5个小部件,并使用grid方法来管理位置: 到目前为止,一切顺利。但是,如果我现在想制作这样的东西(使用不好的方法获得): i、 e.按钮水平设置跨越4行。如果我能够以这种方式设置网格配置(比如:grid(ncols=1,nrows=5),然后我将执行类似于按钮的操作。columnconfigure(0,weight=4)和标签。columnconfigure(0,weight=1) 如何解决这个问题 我将解释为什么这不是一个无关紧要的问题。这是因为这两组小部件(图

假设我有一个框架,其中包含5个小部件,并使用
grid
方法来管理位置:

到目前为止,一切顺利。但是,如果我现在想制作这样的东西(使用不好的方法获得):

i、 e.按钮
水平设置
跨越4行。如果我能够以这种方式设置网格配置(比如:
grid(ncols=1,nrows=5)
,然后我将执行类似于
按钮的操作。columnconfigure(0,weight=4)
标签。columnconfigure(0,weight=1)

如何解决这个问题

我将解释为什么这不是一个无关紧要的问题。这是因为这两组小部件(图1和图2)位于不同的框架中。因此,第一帧有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()
之后我得到:


首先,您的示例不完整。要解决这个问题,我需要运行它;我很好,但我还不足以用肉眼调试。你要我写一大堆样板文件。发布完整的代码片段;包括进口和入境点

要解决问题,只需告诉框架、行和按钮,使用
sticky='ns'
rowconfigure(1,weight=1)
扩展到所有可用的垂直空间即可


每个框架都有自己的网格;其中的行数或列数不影响其他行数或列数。为什么还要手动设置列数和行数?只要让tkinter魔法算出。如果我让tkinter魔法算出,它将在第一帧中显示5行,在第二帧中仅显示2行。小部件将不会对齐。我应该在问题中提到这一点。我明白了。对齐框架不应该与内容有任何关系。你是如何布置这些框架的?如果这些也在网格中,请使用
sticky='n'
。如果您向我们提供了重现此问题的方法,我可以向您演示如何修复它。好的。回答你的第一个问题:是的,帧在网格中。正如你所说,我使用了sticky,它对齐了标签。但我希望按钮在每一帧中填充相同的空间。回答你的第二个问题:我在SE上添加了类似问题的链接(我也是OP)。看起来你用肉眼调试还不错。它起作用了。非常感谢。我没有用眼睛调试。我写了10行代码来让你的运行,对此我有点生气。
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')