Python 2.7.2 global variables + tkinter
- To make the Label update, set
textvariable=self.globvar
, whereself.globvar = tk.StringVar()
. The Label text is updated by callingself.globvar.set
. - Change
command=self.calc()
tocommand=self.calc
(withoutparentheses). With parentheses,self.calc()
is called at the timeself.buttn
is defined. And command gets set to the return value ofself.calc()
, which isNone
. Nothing happens when the button ispressed becausecommand
equalsNone
. Without parentheses,command
is set to the function objectself.calc
, and thefunction is called (correctly) whenever the button is pressed. - Try to avoid using global variables. It will help
Shuffle
to be self-contained, more easily reusable and importable.
import Tkinter as tkimport sys, randomclass Shuffle(object): def __init__(self,master=None): self.master=master self.text=tk.Label(master, text="Type in something:") self.box=tk.Entry(master) self.buttn = tk.Button(master, text="Done", width=10, command=self.calc) self.globvar = tk.StringVar() self.globvar.set(0) self.result = tk.Label(self.master, textvariable=self.globvar) def hide(self): self.text.pack_forget() self.box.pack_forget() self.buttn.pack_forget() self.result.pack_forget() def show(self): self.text.pack(padx=2, pady=2) self.box.focus_set() self.box.pack(side=tk.TOP, padx=3, pady=3) self.buttn.pack(side=tk.TOP, padx=3, pady=3) self.result.pack(side=tk.TOP, padx=3, pady=3) def calc(self): word = self.box.get() while len(word) != 0: i = random.randrange(0, len(word)) self.globvar.set(word[i]) word = word[0:i] + word[i+1:]class MainApp(object): def __init__(self,master=None): self.master=master app=self.app=tk.Tk() app.title("Mkee's Tools") app.geometry('500x500') menubar=tk.Menu(app) self.shuffle=Shuffle(master) self.current=self.shuffle program_menu=tk.Menu(menubar) program_menu.add_command(label='Shuffle',command=self.show_shuffle) menubar.add_cascade(label='Programs', menu=program_menu) app.config(menu=menubar) def show_shuffle(self): self.current.hide() self.current=self.shuffle self.shuffle.show() def show_buttons(self): self.current.hide() self.current=self.buttons self.buttons.show()def main(): m=MainApp() m.app.mainloop()if __name__=='__main__': main()