J'ai une petite application graphique en Python qui utilise Tk. Il a plusieurs filtres --- des entrées de texte (ils définissent des valeurs de filtre) avec des cases à cocher (qui activent/désactivent le filtre). Créer des filtres en tant que classe inhetrited de l » Labelframe
ttk
:Widgets dépendants dans tkinter
from tkinter.ttk import Labelframe
import tkinter as tk
class FilterWidget(Labelframe):
def __init__(self, parent, label):
Labelframe.__init__(self, parent, text=label)
self.grid()
self._entry = tk.Entry(self)
self._entry.grid(row=0, column=0)
self._checkbox = tk.Checkbutton(self, command=lambda: print(self))
self._checkbox.grid(row=0, column=1)
Puis-je créer plusieurs instances de cette classe et de les placer dans l'interface graphique:
root = tk.Tk()
source_filter = FilterWidget(root, "Source")
source_filter.grid(row=0, column=0)
level_filter = FilterWidget(root, "Severity")
level_filter.grid(row=0, column=1)
root.mainloop()
Les widgets sont créés et affichés correctement. Cependant, quand l'une des cases est cochée et change d'état, l'autre change d'état aussi!
Lorsque vous cliquez sur les différentes cases à cocher, print
commande les sorties .!filterwidget
et .!filterwidget2
, il s'agit donc d'objets distincts. Il semble qu'ils soient en quelque sorte implicitement syncronisés, mais je n'ai aucune idée de comment cela s'est passé. Donc, la question est: comment supprimer cette dépendance et cocher les cases indépendamment les unes des autres?
Je n'obtiens pas le comportement que vous décrivez. Êtes-vous certain que ce code exact présente le problème? –
Oui, deux extraits dans la réponse sont le code complet qui reproduit le problème pour moi. Je cours Python 3.6.2 (v3.6.2: 5fd33b5, 8 juillet 2017, 04:14:34) [MSC v.1900 32 bits (Intel)]) sur Windows 7. – Month