Die Steuervariable funktioniert nicht, wenn ein Verweis auf ein Objekt in einer Liste als Variableneigenschaft eines Widgets verwendet wird. Der folgende Code veranschaulicht ein Beispiel für ein Anwendungsobjekt, das auf eine Liste von TkInt-Objekten festgelegt wird. Ein Testbeispiel wird nur auf eine Membervariable gesetzt, bei der ein einzelnes TkInt-Objekt wie erwartet funktioniert. Warum schlägt das fehl und was ist die richtige Art, Widgets und Steuervariablen zu verwalten, die in der Anzahl variabel sind?Warum können PyTk Tkinter-Steuerwertvariablen nicht aktualisiert werden, wenn sie in einer Liste gespeichert sind? Was ist die Alternative?
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.pack()
self.createWidgets()
self.line_whole = [tk.IntVar() for _ in range(6)]
def createWidgets(self):
tk
self.line_whole=list()
#self.line_whole = [tk.IntVar() for _ in range(6)]
self.line_whole_cb = list()
for x in range(6):
self.line_whole.append(tk.IntVar())
self.line_whole_cb.append(tk.Checkbutton(self,variable=self.line_whole[x]))
self.line_whole_cb[x].pack(side="left")
self.test_val = tk.IntVar()
self.test_cb = tk.Checkbutton(self,variable=self.test_val)
self.test_cb.pack(side="bottom")
self.output_record_btn = tk.Button(self)
self.output_record_btn["text"] = "Output Check Values"
self.output_record_btn["command"] = self.say_hi
self.output_record_btn.pack(side="top")
self.QUIT = tk.Button(self, text="QUIT", fg="red",
command=root.destroy)
self.QUIT.pack(side="bottom")
def say_hi(self):
print("checks:",",".join([str(tk_int.get()) for tk_int in self.line_whole]))
print ("test_check",self.test_val.get())
root = tk.Tk()
app = Application(master=root)
app.mainloop()
ich diese Referenz aus der Standard-Python-Dokumentation für viersion 3.5 verknüpft wurde mit der tk.IntVar sagte verwenden http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/control-variables .html –