0

我在这里创建检查按钮:

var = []
k=0
for i in results:
    var.append(IntVar())
    Checkbutton(frame, text = i[0], variable = var[k], wraplength=500).pack()
    k+=1

在这里,我获得了每个检查按钮的变量,并希望打印被检查的检查按钮的文本:

# function is called when a button is clicked
def delHist():
    for i in range(len(var)):
        if var[i].get()==1:      # checking if the checkbutton is checked
            # want to print the text in the checkbutton here

如何仅使用变量打印该检查按钮的文本?

编辑:这里的问题似乎很相似: 如何从 python 中的复选按钮获取文本?(Tkinter)

我尝试分配Checkbutton(frame, text = i[0], variable = var[k], wraplength=500).pack()给一个列表ch[p],以便在它迭代时,它被分配给一个新对象。当我print ch[p].get()在函数下添加时,我得到一个错误。我也试过print ch[p].get('text'),但我得到了错误

TypeError:“get()”接受 1 个位置参数,但给出了 2 个

4

3 回答 3

1

如果将 设置onvalue为与文本相同的值(或您想要的任何值),则变量将包含该值或空字符串。

您需要先从 切换IntVarStringVar,然后设置onvalueand offvalue

var.append(StringVar())
buttons.append(Checkbutton(tk, text = i[0], variable = var[k], wraplength=500, onvalue=i[0], offvalue=""))

接下来,您可以修改delHist为仅打印非空字符串的值:

def delHist():
    for variable in var:
        value = variable.get()
        if value:
            print(value)
于 2020-06-17T16:29:14.467 回答
0

Tkinter是 OOP,因此发生相反的情况。
扩展tk.Checkbutton对象并忘记variable=tk.IntVar().
扩展Checkbutton知道他的text=状态checked

在此处输入图像描述

import tkinter as tk


class Checkbutton(tk.Checkbutton):
    def __init__(self, parent, **kwargs):
        self._var = tk.IntVar()
        # kwargs['variable'] = self._var
        super().__init__(parent, variable=self._var, **kwargs)

    @property
    def checked(self):
        return self._var.get() == 1

    def __str__(self):
        return f"Checkbutton: {self['text']}={self.checked}"

用法:

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.frame = tk.Frame(self)
        self.frame.pack()
        for text in ('option 1', 'option 2', 'option 3'):
            Checkbutton(self.frame, text=text, wraplength=500).pack()

        tk.Button(self, text='Show Checkbutton state', command=self.on_button_click).pack()

    def on_button_click(self):
        for ckb in self.frame.children.values():
            print(ckb)

if __name__ == '__main__':
    App().mainloop()

输出:

Checkbutton: option 1=False
Checkbutton: option 2=True
Checkbutton: option 3=False
于 2020-06-17T16:11:40.860 回答
0

如果我理解正确(在评论中纠正我),这就是你需要的:

from tkinter import *

tk = Tk()

var = []
buttons = []
k=0
def delHist():
    for i in range(len(var)):
        if var[i].get()==1:
            print(buttons[i]['text'])
for i in 'abcde':
    var.append(IntVar())
    buttons.append(Checkbutton(tk, text = i[0], variable = var[k], wraplength=500))
    buttons[-1].pack()
    k+=1

Button(text='delHist', command=delHist).pack()

请注意,之后我将附加Checkbutton(...)到 list,notCheckbutton(...).pack()和 running.pack()方法。原因是第一个返回一个Checkbutton对象,而第二个返回一个对象NoneType——这不是 jQuery。希望这会有所帮助!

于 2020-06-17T15:36:27.963 回答