【问题标题】:Gathering Output of Multiple Tkinter Checkbuttons收集多个 Tkinter 检查按钮的输出
【发布时间】:2018-07-25 09:34:20
【问题描述】:

我有一个包含devices = {'dev1': ['192.168.200.73', 'foo', 'bar'], 'dev2': ['192.168.200.109', 'foo', 'bar']} 之类的数据的字典,我将字典打印为检查按钮,我需要获取选定的检查按钮名称。基本代码:

for name in devices:
v1 = BooleanVar()
c= Checkbutton(top, text=name, variable= v1)
c.grid(columns=1, rows= rs)
rs +=1

谢谢。

【问题讨论】:

  • 字典长什么样?另外,您是否尝试过自己在 for 循环中制作 Checkbuttons?您遇到了什么问题?
  • 好的,我正在研究它,最近发现它很容易,但我仍然需要获取每个检查按钮的状态。我的字典也看起来像devices = {'d1': ['192.168.2.73', 'p', 'p'], 'd2': ['192.168.2.109', 'p', 'p']}

标签: python-3.x user-interface variables checkbox tkinter


【解决方案1】:
from tkinter import *

root = Tk()

devices = {'dev1': ['192.168.2.73', 'foo', 'bar'],
           'dev2': ['192.168.2.109', 'foo', 'bar']}

check_dict = dict() # Dict of checkbox names and IntVars
for name in devices:
    var = IntVar()      # Create an IntVar for the checkbox
    chk = Checkbutton(root, text=name, variable=var, onvalue = 1, 
                      offvalue = 0, height=5, width = 20)
    chk.pack()
    check_dict[name] = var  # Save name and IntVar reference

def go(event):  # Prints out all checkbox IntVars on <space>
    for name, var in check_dict.items():
        print(name, var.get())

root.bind('<space>', go)
root.mainloop()

使用列表和网格的示例:

from tkinter import *

root = Tk()

devices = {'dev1': ['192.168.2.73', 'foo', 'bar'],
           'dev2': ['192.168.2.109', 'foo', 'bar']}

check_list = [] # List of chexkbox names and IntVars
for name in devices:
    var = IntVar()          # Create an IntVar for the checkbox
    chk = Checkbutton(root, text=name, variable=var, onvalue = 1, 
                      offvalue = 0, height=5, width = 20)
    chk.grid()
    check_list.append([name,var])  # Save name and IntVar reference

def go(event):  # Prints out all checkbox IntVars on <space>
    for v in check_list:
        print(v[0], v[1].get())

root.bind('<space>', go)
root.mainloop()

【讨论】:

  • 谢谢,但我无法得到你打印我看不到它们的变量的部分, 是什么?另外我如何将它们附加到列表中?
  • 你在哪里指定按钮的位置,我认为它可以附加一些东西,但由于窗口空间有限,我需要改变位置。我知道怎么做,但是 chk.grid() 东西在哪里?
  • 我将 SPACEBAR 绑定到函数 go() 以便在您按下空格键时打印所有名称和 IntVars。至于位置,你可以把它们放在你喜欢的任何地方。我在示例中使用了pack(),但您可以使用grid(),它们都是几何管理器。我将添加一个使用列表而不是字典的示例。
  • 那么首先,如何将按钮用作空格键?非常感谢。
  • 该列表包含子列表,每个子列表都有设备的名称,然后是对与该复选框关联的 IntVar 的引用。当我说空格键时,我指的是键盘上实际的物理空格键。按键盘上的空格键,go() 函数将运行并打印列表的内容。
猜你喜欢
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2021-09-04
  • 2021-07-06
  • 1970-01-01
  • 2019-07-10
相关资源
最近更新 更多