如何对齐tkinter小部件?

时间:2017-04-02 15:51:01

标签: python python-3.x tkinter

如何调整我的Radiobutton?我可以向test4添加空格,但该解决方案似乎不合适。这就是目前的样子 - 你可以看到text111111有额外的字符。我尝试过使用padx

screenshot of current results

我的代码:

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()

2 个答案:

答案 0 :(得分:3)

您可以在sticky=W内使用.grid用于所有按钮,使其在左侧对齐。而且你还可以包括pady = 20,使其不会一直向左移动。

答案 1 :(得分:3)

您应该使用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()

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

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

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

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()

如果您想了解grid几何经理可以使用哪些参数的更多信息,建议您阅读this tutorial,我发现它在过去非常有用。

作为旁注,请注意您在variable声明中使用Radiobutton关键字参数不正确。您必须传递tk.StringVartk.IntVar或其他类似对象,如here所述。