2017-07-22 4 views
0

Ich versuche, eine einfache .bin-Editor erstellen, aber ich kann ein Problem sehr früh. Ich kann nicht herausfinden, wie man den Wert jedes Checkbuttons erhält. Wie Sie sehen, versuche ich, den Code so kompakt wie möglich zu halten, indem ich eine Klasse verwende, um alle Checkbuttons zu erstellen.Python: Get checkbutton Wert

Im Moment versuche ich nur die "saveSave" -Funktion zum Ausdrucken, wenn die Box aktiviert ist oder nicht, damit ich sie später in einer if ... else-Anweisung verwenden kann.

try: #Python 2 imports 
    from Tkinter import * 
    import ttk 
    import tkFileDialog as filedialog 

except ImportError: #Python 3 imports 
    from tkinter import * 
    from tkinter import ttk 
    from tkinter import filedialog 

def openSave(): 
    file = filedialog.askopenfilename() 

def saveSave(): 
    print MaxMP.get() 


class CB(Frame): 
    def __init__(self, parent=None, cheater=""): 
     Frame.__init__(self, parent) 
     self.var = BooleanVar() 
     rawr = Checkbutton(self, text=cheater, variable=self.var, onvalue=1, offvalue=0, bg="white", command=self.saveSave) 
     rawr.pack() 
     self.grid(sticky='w', columnspan=2) 

pmdxse = Tk() 
pmdxse.title("Project Mirai DX Save Editor") 
pmdxse.configure(bg="white", padx=10, pady=10) 
pmdxse.resizable(width=False, height=False) 

Button(pmdxse, text="Open", command=openSave).grid(row=0, column=0) 
Button(pmdxse, text="Save", command=saveSave).grid(row=0, column=1) 
MaxMP = CB(pmdxse, 'Max MP') 
MaxSnacks = CB(pmdxse, 'Max Snacks') 
MaxHighscore = CB(pmdxse, 'Max Highscore') 
MaxPerfentage = CB(pmdxse, 'Max Percentage') 
MaxCombo = CB(pmdxse, 'Max Combo') 
UnlockSongs = CB(pmdxse, 'Unlock all Songs') 
UnlockHard = CB(pmdxse, 'Unlock Hard/Super Hard Modes') 
UnlockItems = CB(pmdxse, 'Unlock all Items in the Shop') 
UnlockOutfits = CB(pmdxse, 'Unlock all Outfits') 
UnlockStamps = CB(pmdxse, 'Unlock all 115 Stamps') 
UnlockProfileOptions = CB(pmdxse, 'Unlock all Profile Options') 
MaxRank = CB(pmdxse, 'Set each song to \"Prefect\" rank') 
BuyItems = CB(pmdxse, 'Buy all Items') 
BuyOutfits = CB(pmdxse, 'Buy all Outfits') 


pmdxse.mainloop() 
+0

Verwendung ** 'trace' **. Siehe [die Dokumentation] (http://effbot.org/tkinterbook/variable.htm) –

+2

Mögliches Duplikat von [Wie erhalte ich einen Event-Callback, wenn ein Tkinter Entry-Widget geändert wird?] (Https://stackoverflow.com/ questions/6548837/how-do-i-get-ein-event-callback-wenn-ein-tkinter-entry-widget-is-modified) –

Antwort

0

Jede Instanz CB hat ein Attribut var, so können Sie einfach den Wert dieser Variablen erhalten:

def saveSave(): 
    print MaxMP.var.get() 

Eine andere Lösung ist es, eine get Methode zu Ihrer CB Klasse hinzuzufügen, zu verstecken die Implementierungsdetails vom Aufrufer:

class CB(...): 
    def get(self): 
     return self.var.get() 

def saveSave(): 
    print MaxMP.get() 
+0

Ehrfürchtig, danke! Ich dachte, es wäre etwas sehr Einfaches. Ich lerne wortwörtlich, wie man das alles heute macht, wenn man online liest. – user3251025