从Tkinter,Python中的Array生成Radiobutton网格菜单

时间:2013-10-29 21:38:07

标签: python arrays grid tkinter

编辑:对不起,我不能回答自己的帖子,因为我是新手,但我想出来了:如果你删除了行“tki.Button(master,...”(第2个到最后一个代码行),那么代码运行得很好。我猜网格和按钮不像我说的那样工作。

很抱歉打扰,但我在找出这里的东西时遇到了一些麻烦。基本上我有一个我想循环的数组,并将每个值设置为一个无线电按钮IN A GRID。稍后我将循环遍历几个数组以生成更大的网格菜单,但是一旦我得到第一个循环工作,我就可以想出来。

这是我的代码:

import Tkinter as tki

master = tki.Tk()
frm = tki.Frame(master, bd = 16, relief = "sunken")
frm.grid()

tType = tki.StringVar()
tColumn = tki.IntVar()
tRow = tki.IntVar()
compType = ["iMac ", "Mac Mini ", "Mac Pro ", "Macbook ", "Macbook Air ", "Macbook Pro "]
tColumn.set(0)
tRow.set(0)

def radioCreate(typeArray):
    for t in typeArray:
        b = tki.Radiobutton(frm, text = t, variable = tType)
        b.config(indicatoron = 0, bd = 4, width = 16, value = t)
        b.grid(row = tRow.get(), column = tColumn.get())
        tRow.set((tRow.get() + 1))  #increment tRow for next run-through

def p():
    print tType.get()

radioCreate(compType)
tki.Button(master, command = p, text = "Display").pack()

master.mainloop()

现在请记住,我正在尝试让它在网格中运行,因为我将使用来自不同阵列的其他数据填充其他列。

1 个答案:

答案 0 :(得分:0)

问题是我。这两行:

frm.grid()
...
tki.Button(...).pack()

虽然在同一个应用程序中使用packgrid是完全可以接受的,但是不能在共享同一个主服务器的两个小部件上使用它们。

网格可能会根据其选项更改窗口小部件或其主控的大小。 Pack会注意到更改,并且可能会尝试根据其选项调整一个或多个小部件和/或主服务器的大小。网格会注意到这个变化,并且可能会调整大小... Pack会注意到变化并调整大小,......