Python 如何安装按钮';Tkinter的尺码是多少?

Python 如何安装按钮';Tkinter的尺码是多少?,python,tkinter,Python,Tkinter,我已经使用python一周了,而使用Tkinter的时间更少,如果我的问题是典型的,那么很抱歉 我想为示波器编写一个简单的GUI。我遇到了一个问题,如何使按钮的大小和其他按钮的大小相适应。以下是我所接触到的内容(截图)。 您可能会注意到触发器和水平按钮的大小小于所有频道组。因此,如何使他们的规模与频道组规模完全匹配。这是我的一段代码 class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.

我已经使用
python
一周了,而使用
Tkinter
的时间更少,如果我的问题是典型的,那么很抱歉


我想为示波器编写一个简单的GUI。我遇到了一个问题,如何使按钮的大小和其他按钮的大小相适应。以下是我所接触到的内容(截图)。 您可能会注意到
触发器
水平
按钮的大小小于所有
频道
组。因此,如何使他们的规模与
频道
组规模完全匹配。这是我的一段代码

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 ...

如果这些按钮位于不同的帧中,是否可能?我想就这样吧。

如果您想让这些小部件彼此完全对齐,最好将它们对齐在同一个网格上,并使用
sticky
参数使按钮拉伸以填充单元格:


问题的根源在于您没有利用
pack
grid
的可用选项。例如,当您执行
.pack(side='left')
时,您将由tkinter决定如何在分配的空间中垂直对齐小部件

默认情况下,tkinter会将项目垂直居中。由于各个部分(通道组、触发器组、水平组)的固有高度略有不同,因此无法使顶部和/或底部完全对齐


一个简单的修复方法是使用“fill”选项让小部件填充分配给它们的空间。如果您不想让它们填满分配的空间,您可以使用“锚定”选项将小部件锚定到顶部。

您说“触发器和水平按钮比所有频道组都小”,但这些按钮看起来与整个组大小相同,并且比组中的按钮大得多。请澄清一下,您是否在问如何使触发器和水平按钮与其他按钮的大小相同?您希望按钮垂直居中还是顶部对齐?你能画一张图来显示你想要的东西吗?我希望
触发器
按钮与所有频道按钮的位置相同。现在需要少一点。我不太明白你的意思。通过“它需要一点少”,你是在问沿着按钮顶部的一个像素的差异是什么?我画不出任何东西,这就是为什么我会尝试解释的原因。有两个组:
频道组
触发组
。在这些组中,有四个按钮和一个按钮。如果查看按钮
CH1设置
的上限和
触发设置
按钮的上限,您会注意到它们不在同一水平线上。您的代码在语法上不正确。它有奇怪的竖条。对不起。我没有注意到您没有为组使用单独的框架。这是不好的,因为,例如,标签不属于组,尽管它们应该属于组。
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()