如何对齐 tkinter 小部件?

3 python tkinter python-3.x

我如何对齐我的Radiobuttons?我可以添加空格,test4但该解决方案似乎不合适。这是目前的样子——正如你所看到的,text111111有额外的字符。我试过使用padx.

当前结果的屏幕截图

我的代码:

from tkinter import *

class GUI:
    def __init__(self, master):

        self.iconnum = IntVar()
        self.master = master
        self.master.title('test')
        self.master.resizable(width=False, height=False)
        self.master.maxsize(500, 250)
        self.master.minsize(500, 250)

        self.test1 = Radiobutton(master, text="test11111111", variable=self.iconnum,
                                 value=1, )
        self.test2 = Radiobutton(master, text="test2", variable=0, value=2, )
        self.test3 = Radiobutton(master, text="test3", variable=0, value=3, )
        self.test4 = Radiobutton(master, text="test4", variable=0, value=4)
        self.test1.grid(row=2, columnspan=1)
        self.test2.grid(row=2, columnspan=2)
        self.test3.grid(row=2, column=1)
        self.test4.grid(row=3, columnspan=1)

        self.Checker = Radiobutton(master, text="test5", indicatoron=0, height=1, width=35,
                                   value=0, command=self.icon_switcher) #var=Selection)
        self.Turbo = Radiobutton(master, text="test6", indicatoron=0, height=1, width=35,
                                 value=1, command=self.icon_switcher) #var#=Selection)

        self.Checker.grid(row=1)
        self.Turbo.grid(row=1, column=1,   )

    def icon_switcher(self):
        print("Hello")

root = Tk()
gui = GUI(root)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

小智 6

您应该使用sticky关键字参数,以便在使用网格时更好地对齐您的小部件。

import Tkinter as tk

window = tk.Tk()
radio = tk.Radiobutton(window, text="I'm a radio")
radio.grid(column=0, row=0, sticky=tk.N+tk.S+tk.W+tk.E)

window.mainloop()
Run Code Online (Sandbox Code Playgroud)

您可以使用模块N, S, W and E成员的任意组合Tkinter。此参数将使您的小部件粘在您指定的单元格的两侧,有点像文本中的对齐方式。如果您的小部件可调整大小,例如使用Button,则如果您使用所有N, S, W and E成员,小部件也会自动调整大小以适合单元格。

需要注意的是,这只能使小部件粘在单元格的边缘。有时需要实际调整单元格大小或将小部件移动到另一个单元格。

在您的示例图像中,您的Buttons 设置的大小大于默认大小(您提供的示例代码不完整)。这会导致单元格以及这些Buttons的单元格所在的整个列变宽。在这种情况下,您可能希望使用columnspan关键字参数将您的列分成更小、可调整大小的部分,以便您的Radiobuttons 可以更好地对齐。

import Tkinter as tk

window = tk.Tk()
radio_one = tk.Radiobutton(window, text="I'm a radio")
radio_two = tk.Radiobutton(window, text="I'm another radio")
button = tk.Button(window, text="I am a very long button", width=50)
button.grid(row=0, column=0, columnspan=2, sticky=tk.N+tk.S+tk.W+tk.E)
radio_one.grid(column=0, row=1, sticky=tk.N+tk.W)
radio_two.grid(column=1, row=1, sticky=tk.N+tk.W)

window.mainloop()
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关grid几何管理器可以使用哪些参数的更多信息,我建议您阅读本教程,我发现它在过去非常有帮助。

作为旁注,请注意您variableRadiobuttons的声明中错误地使用了关键字参数。你必须通过无论是tk.StringVartk.IntVar或一些其他类似的物体,如所描述这里