Jak změnit států Tkinter políčka při vytváření políčka s dictionary?

0

Otázka

Dělám program, který dává uživateli na výběr zaškrtávacích políček vybrat. Zaškrtávacích políček jsou automaticky vytvořeny s poutkem. Jsem schopen zjistit, která políčka mají být zaškrtnuto, ale nejsem schopen změnit stav příslušných políček sám později. Konkrétně, chci odstranit všechny klíšťata z zaškrtnuta políčka po klepnutí na tlačítko, ale více obecně, rád bych věděl, jak změnit stav jednotlivých políček. Zde je ukázka kódu:

import tkinter
from tkinter import *
tagsValue = {'Beef': 0, 'Fish': 0, 'Chicken': 0, 'Pork': 0, 'Lamb': 0, 'Egg': 0, 'Ham': 0}

def execute():
    my_text.delete('1.0', END)
    for tag in tagsValue:
        if tagsValue[tag].get() == '1':
            my_text.insert(INSERT, ('\n' + tag))

root = Tk()
root.title('User Selection')
root.geometry("300x300")
my_button = Button(root, text ="Submit",command = execute)
my_text = Text(root)

for tag in list(tagsValue):
    tagsValue[tag] = Variable()
    l = Checkbutton(root,justify=LEFT,width=8, text=tag, variable=tagsValue[tag])
    l.deselect()
    l.pack()

my_button.pack()
my_text.pack()
root.mainloop()

Snažil jsem se pomocí věci, jako je tagsValue['Ham'] = '0' a tagsValue['Ham'] = 0 před root.mainloop() ale ty nefungují. Jsem si vědom pomocí ['state'] změnit stav políčka, ale protože políčka nejsou pojmenované, to nemůžu použít. (Nemůžu název políčka individuálně, protože mám mnoho mnoho mnoho políčka). Tak, jak mohu změnit stav políčka?

checkbox python-3.x tkinter
2021-11-24 02:49:00
1

Nejlepší odpověď

1

Po pro smyčce, všechny hodnoty tagsValue bude instance Variable. Takže můžete použít, například, tagsValue['Ham'].set('0') změnit stav checkbutton pro Ham.

Pokud chcete vymazat všechny klíšťata pomocí tlačítka, jak je uvedeno níže:

def clear():
    for var in tagsValue.values():
        var.set('0')
...

clear_button = Button(root, text='Clear', command=clear)
clear_button.pack()
...

Jako @Bryan řekl v komentáři použít konkrétní StringVar nebo IntVar místo toho, generic Variable v obecné.

2021-11-24 03:06:36

Vaše def clear funguje perfektně, děkuji, ale když se snažím pomocí tagsValue['Ham'].set('0') to není zaškrtnout Ham zaškrtávací políčko. Změnil jsem Variable() k IntVar() jak navrhl, tak jsem změnil řádek tagsValue['Ham'].set(0) a udělal další změny v mém def execute ale to stále nefunguje
PythonHacks999

Normálně .set(1) na klíště v checkbutton.
acw1668

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................