【问题标题】:Reading variables for a set of Checkbuttons in TKinter在 TKinter 中读取一组 Checkbuttons 的变量
【发布时间】:2013-05-31 06:14:00
【问题描述】:

我在 root.frame1 上有一组检查按钮,我想在 root 的子框架中使用选定的按钮来制作选项菜单。我采取的方法是:

import Tkinter as Tk
root = Tk.Tk()
frame1 = Tk.Frame(root)
variables = dict()
s = {'WZ':'1','ZB':'2','RS':'3','CC':'4','CL':'5'}
for k,v in s.iteritems():
     variables[k]= Tk.IntVar()
     cb = Tk.Checkbutton(frame1, text=v,onvalue=v, offvalue=0, variable=variables[k], anchor=W)
     cb.pack(side='top',fill='x')

frame1.pack()

然后当我选择一些复选按钮时,变量字典中的值仍然是0:

for k,v in variables.iteritems():
      print k,' ',v.get()

打印出来的:

'WZ' 0
'ZB' 0
....

我尝试使用元组列表而不是字典,即 variables =[('WZ',),...] 但值仍然没有改变。 你知道我的代码有什么问题吗?请告诉我。 谢谢 阿里

【问题讨论】:

  • 我会更改一些部分,但您的代码对我有用。你试过用Tk.IntVar(frame1)替换Tk.IntVar()吗?
  • 该代码也适用于我在带有 python 2.7 的 Mac 上。你能展示一个完整的工作程序,以便我们可以看到你是如何打印出这些值的吗?我的猜测是,您在主循环运行之前以某种方式打印它们。
  • 没错。作为 Tkinter 的新手,我在运行主循环之前打印了变量。

标签: python checkbox tkinter


【解决方案1】:

您的代码对我有用。但是,使用可运行代码会有所帮助。这对你有用吗?

import Tkinter as tk

class App(object):
    def __init__(self, master, **kwargs):
        frame = tk.Frame(master)
        self.variables = {}
        s = {'WZ':1,'ZB':2,'RS':3,'CC':4,'CL':5}
        for k, v in s.iteritems():
             self.variables[k] = tk.IntVar()
             cb = tk.Checkbutton(
                 frame, text=k, onvalue=v, offvalue=0,
                 variable=self.variables[k],
                 command=self.oncheck(k),
                 anchor='w')
             cb.pack(side='top',fill='x')
        frame.pack()
    def oncheck(self, key):
        def _oncheck():
            print('{l} => {v}'.format(l=key, v=self.variables[key].get()))
        return _oncheck

root = tk.Tk()
app = App(root)
root.mainloop()

【讨论】:

  • 谢谢,效果很好。我应该运行 mainloop()。唯一的区别是在我的字典中,值是字符串,当我将 onvalue 定义为字符串时,复选按钮显示为禁用。
猜你喜欢
  • 2020-01-20
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多