Ich möchte herausfinden, welche Checkbuttons nach dem Schließen der Anwendung überprüft wurden. Wenn ich Checkbuttons Werte in einer Sammlung speichern, ist es nicht möglich, Zugriff auf diese Sammlung zu haben, nachdem die Anwendung zerstört wurde.python get checkbutton value nach Ende des Mainloops
app = Application(path_to_files)
app.initialize(data)
app.mainloop()
#i want to know all checkbuttons values on this line
checkerGUI.py
import Tkinter as tk
import tkFont
import webbrowser
import os
from PIL import ImageTk, Image
import ctypes
class Application(tk.Frame):
def __init__(self, pwd="", master=None):
tk.Frame.__init__(self, master)
self.initImages(pwd)
self.master.resizable(width=False, height=False)
self.index = 0
self.master.bind("<Return>", self.close)
self.grid()
self.games = []
self.gamesHiddenFlags = {}
def close(self, event):
self.master.destroy()
def getGamesHiddenFlags(self):
return self.gamesHiddenFlags
def initialize(self, games):
self.games = games
for game in self.games:
self.gamesHiddenFlags[game.name] = tk.BooleanVar()
self.createWidgetsFromGame(game, self.gamesHiddenFlags[game.name])
def initImages(self, path):
self.images = {}
buf = Image.open(os.path.join(path, "images", "Classic.png"))
buf = buf.resize((20, 20), Image.ANTIALIAS) # The (250, 250) is (height, width)
self.images['Classic'] = ImageTk.PhotoImage(buf)
buf = Image.open(os.path.join(path, "images", "Jeopardy.png"))
buf = buf.resize((20, 20), Image.ANTIALIAS)
self.images['Jeopardy'] = ImageTk.PhotoImage(buf)
buf = Image.open(os.path.join(path, "images", "On-site.png"))
buf = buf.resize((20, 20), Image.ANTIALIAS)
self.images['On-site'] = ImageTk.PhotoImage(buf)
buf = Image.open(os.path.join(path, "images", "On-line.png"))
buf = buf.resize((20, 20), Image.ANTIALIAS)
self.images['On-line'] = ImageTk.PhotoImage(buf)
def google_link_callback(event, site):
webbrowser.open_new(site)
def ShowImages(self, frame_in, type_img, place_img):
type_img = type_img.replace("Attack-Defense", "Classic").replace("Attack", "Classic")
type_img = type_img.replace("Hack quest", "Jeopardy")
label = tk.Label(frame_in, image=self.images[type_img])
label.pack(side="right")
label = tk.Label(frame_in, image=self.images[place_img])
label.pack(side="right")
def createWidgetsFromGame(self, game, flag):
frame = tk.Frame(self, relief='sunken')
frame.grid(row=0, column=self.index, sticky="WN")
frame_in = tk.Frame(frame)
frame_in.grid(row=0, sticky="WE", column=self.index)
header = tk.Label(frame_in, anchor="nw", justify="left", text="Игра: ")
header.pack(expand=True, fill="x", side="left")
self.ShowImages(frame_in, game.type, game.place_type)
header = tk.Label(frame, anchor="nw", justify="left", text="Состояние: ")
header.grid(row=1, sticky="WE", column=self.index)
header = tk.Label(frame, anchor='nw', justify="left", text="Дата проведения: ", height=2)
header.grid(row=3, sticky="WEN", column=self.index)
header = tk.Label(frame, anchor="nw", justify="left", text="Продолжительность: ")
header.grid(row=5, sticky="WE", column=self.index)
header = tk.Label(frame, anchor="nw", justify="left", text="Сайт игры: ")
header.grid(row=6, sticky="WE", column=self.index)
header = tk.Label(frame, anchor="nw", justify="left", text="Ранг: ")
header.grid(row=7, sticky="WE", column=self.index)
header = tk.Checkbutton(frame, text="Не показывать: ", variable=flag) # There is variable
header.grid(row=8, sticky="WE", column=self.index)
self.index += 1
frame2 = tk.Frame(self, relief='sunken')
frame2.grid(row=0, column=self.index, sticky="WN")
header = tk.Label(frame2, anchor="nw", justify="left", text=game.name)
header.grid(row=0, sticky="WE", column=self.index)
header = tk.Label(frame2, anchor="nw", justify="left", text=game.state)
header.grid(row=1, sticky="WE", column=self.index)
header = tk.Label(frame2, anchor="nw", justify="left", text=game.date['start'].strftime("с %d %B в %H:%M"))
header.grid(row=2, sticky="WE", column=self.index)
header = tk.Label(frame2, anchor="nw", justify="left", text=game.date['end'].strftime("до %d %B в %H:%M"))
header.grid(row=3, sticky="WE", column=self.index)
header = tk.Label(frame2, anchor="nw", justify="left", text="%d дней %d часов" % (game.duration['days'], game.duration['hours']))
header.grid(row=4, sticky="WE", column=self.index)
header = tk.Label(frame2, anchor="nw", justify="left", fg='blue', font=tkFont.Font(underline=1, size=10), cursor="hand2", text=game.site)
header.bind("<Button-1>", lambda e: self.google_link_callback(game.site))
header.grid(row=5, sticky="WE", column=self.index)
header = tk.Label(frame2, anchor="nw", justify="left", text=game.rank)
header.grid(row=6, sticky="WE", column=self.index)
self.index += 1
Es gibt in der Regel keine Notwendigkeit, dies zu tun, aber wenn Sie wirklich brauchen, um eine Funktion namens haben kann, wenn ein Check-Button aktualisiert wird und die Werte in einer Variablen zu speichern. – RobertR
Wenn jemand bessere Lösung kennt, poste es bitte – gek0n