【问题标题】:tkinter pack geometry: 1 column with 4 radio buttons in one row?tkinter 包几何:1 列,一行中有 4 个单选按钮?
【发布时间】:2012-04-16 17:19:29
【问题描述】:

我想在一列中有四个水平按钮(整个 UI 是一列)。我无法弄清楚如何使用包几何管理器执行此操作。我已经使按钮垂直,但必须有办法做到这一点。我是 Python 新手,所以我的代码很简单:

v = IntVar()

Radiobutton(root, text="Red", variable=v, value=1, command = red).grid(row=1) 
Radiobutton(root, text="Blue", variable=v, value=2, command = blue).grid(row=2)
Radiobutton(root, text="Green", variable=v, value=3, command = green).grid(row=3)
Radiobutton(root, text="Other", variable=v, value=4, command = Other).grid(row=4)

如果我将它们放在同一行,它们就会相互堆叠。我阅读了另一篇关于对按钮进行分组的文章,但那是针对 Android 应用程序的。

【问题讨论】:

    标签: tkinter python-2.7


    【解决方案1】:

    当按钮垂直堆叠时,它们都在一列中。
    假设您的意思是:“我希望将四个水平按钮合二为一 。”,
    每个按钮在该行的单独列中,
    我的第一个建议是使用框架来包含按钮。

    这是一个使用 grid 及其 rowcolumn 选项的示例:

    import Tkinter as tki # tkinter in Python 3
    
    root = tki.Tk()
    
    frm = tki.Frame(root, bd=16, relief='sunken')
    frm.grid()
    
    var = tki.StringVar()
    
    mild = tki.Radiobutton(frm, text='Mild', variable=var)
    mild.config(indicatoron=0, bd=4, width=12, value='Mild')
    mild.grid(row=0, column=0)
    
    medium = tki.Radiobutton(frm, text='Medium', variable=var)
    medium.config(indicatoron=0, bd=4, width=12, value='Medium')
    medium.grid(row=0, column=1)
    
    hot = tki.Radiobutton(frm, text='Hot', variable=var)
    hot.config(indicatoron=0, bd=4, width=12, value='Hot')
    hot.grid(row=0, column=2)
    
    root.mainloop()
    

    或者您可以使用pack,将side 选项设置为'left'
    这是一个在循环中创建按钮并绑定到字典中的键的示例:

    import Tkinter as tki
    
    def print_var(*args):
        print root.getvar(name=args[0])
        # or
        print var.get()
    
    root = tki.Tk()
    
    frm = tki.Frame(root, bd=16, relief='sunken')
    frm.pack()
    
    var = tki.StringVar()
    var.trace('w', print_var)
    
    b_dict = {'Mild':0, 'Medium':0, 'Hot':0}
    
    for key in b_dict:
        b_dict[key] = tki.Radiobutton(frm, text=key, bd=4, width=12)
        b_dict[key].config(indicatoron=0, variable=var, value=key)
        b_dict[key].pack(side='left')
    
    root.mainloop()
    

    可以找到有关变量类及其方法的信息 → here

    【讨论】:

    • 我还不知道课程,但这绝对让我朝着正确的方向前进!谢谢。
    • 如果你正在创建一个简单的行或列,我推荐pack 而不是grid;它需要更少的代码。 pack 擅长创建单行或单列。
    • @user1332449 推荐阅读:4.4 & class example 1 , 2
    猜你喜欢
    • 2017-09-16
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多