Python 2.7.2全局变量+ tkinter [英] Python 2.7.2 global variables + tkinter
本文介绍了Python 2.7.2全局变量+ tkinter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
#Dev by Mkee
导入Tkinter为tk
import sys,random
globvar = 0
class Shuffle(object):
def __init __(self,master = None):
self.master = master
self.text = tk.Label(master,text =输入内容:)
self.box = tk.Entry(master)
self.buttn = tk.Button(master,text =完成,宽度= 10,命令= self.calc())
self.result = tk.Label(self.master,text = globvar)
def hide(self):
self.text.pack_forget()
self.box.pack_forget()
self.buttn.pack_forget()
self.result.pack_forget()
高清显示(个体经营) :
self.text.pack(padx = 2,pady = 2)
self.box.focus_set()
self.box.pack(side = tk.TOP,padx = 3, pady = 3)
self.buttn.pack(侧= tk.TOP,padx = 3,pady = 3)
self.result.pack(侧= tk.TOP,padx = 3,pady = 3)
def calc(self):
word = self.box.get()
while len(word)!= 0:
i = random.randrange(0,len(word))
global globvar
globvar = 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(菜单=菜单栏)
DEF show_shuffle(个体):
self.current.hide()
self.current = self.shuffle
self.shuffle.show()
def show_buttons(self):
():
m = MainApp()
m.app.mainloop()
if __name __ =='__ main__':
main()
当我点击按钮 self.buttn = tk.Button(master,text =Done,width = 10,command = self.calc())
。我想让 self.result = tk.Label(self.master,text = globvar)
显示从calc得到的globvar,但是它显示了设置的globvar在类 globvar = 0
之前。
我在做什么错误?
解决方案
- code> textvariable = self.globvar ,其中
self.globvar = tk.StringVar()
。标签文本通过调用self.globvar.set
来更新。 - 更改
command = self.calc( )
到command = self.calc
(不包括
圆括号)。在括号中定义了
self.buttn
时调用了self.calc()
。并且命令被设置为
self.calc()
的返回值,它是None
。由于命令
等于无
,按下
按钮时没有任何反应。没有括号,
命令
被设置为函数对象self.calc
,并且
只要按下按钮,函数就会被调用(正确)。
- 尽量避免使用全局变量。它有助于
Shuffle
自足,更容易重复使用和导入。
< hr>
导入Tkinter为tk
导入sys,随机
类别Shuffle(object):
def __init __(self,master = None):
self.master = master
self.text = tk.Label(master,text =输入内容:)
self。盒= tk.Entry(主)
self.buttn = tk.Button(主,文本= 完成,宽度= 10,命令= 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.butt n.pack(side = tk.TOP,padx = 3,pady = 3)
self.result.pack(side = tk.TOP,padx = 3,pady = 3)
def calc ):
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:]
$ b $ 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 =菜单栏)
def show_shuffle(self):
self.current.hide()
self.curren t = 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()
I'm having some problems with the global variables:
#Dev by Mkee
import Tkinter as tk
import sys, random
globvar = 0
class 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.result = tk.Label(self.master, text=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))
global globvar
globvar = 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()
I get the problem when I click the buttonself.buttn = tk.Button(master, text="Done", width=10, command=self.calc())
. I want to make the self.result = tk.Label(self.master, text=globvar)
show the globvar taken from calc, but instead it shows the globvar that is set before the classglobvar = 0
.
What am I doing wrong?
解决方案
- 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
(without parentheses). 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 is pressed becausecommand
equalsNone
. Without parentheses,command
is set to the function objectself.calc
, and the function 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 tk
import sys, random
class 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()
这篇关于Python 2.7.2全局变量+ tkinter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文