我想知道,在關閉應用程序後檢查了哪些checkbutton。 如果我在任何集合中保存checkbuttons值,那麼在應用程序被銷燬後不可能訪問該集合。python在主循環結束後得到checkbutton值
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
有通常不需要做這個,但如果你真的需要,你可以有一個無論何時檢查按鈕更新調用的函數,並保存在一個變量的值。 – RobertR
如果有人知道更好的解決方案,請發帖 – gek0n