Python 2.7.2全局变量+ tkinter [英] Python 2.7.2 global variables + tkinter

查看:140
本文介绍了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 之前。
我在做什么错误?

解决方案


  1. code> textvariable = self.globvar ,其中
    self.globvar = tk.StringVar()。标签文本通过调用 self.globvar.set 来更新。

  2. 更改 command = self.calc( ) command = self.calc (不包括
    圆括号)。在括号中定义了
    self.buttn 时调用了 self.calc()。并且命令被设置为
    self.calc()的返回值,它是 None 。由于命令等于,按下
    按钮时没有任何反应。没有括号,
    命令被设置为函数对象 self.calc ,并且
    只要按下按钮,函数就会被调用(正确)。
  3. 尽量避免使用全局变量。它有助于 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?

解决方案

  1. To make the Label update, set textvariable=self.globvar, where self.globvar = tk.StringVar(). The Label text is updated by calling self.globvar.set.
  2. Change command=self.calc() to command=self.calc (without parentheses). With parentheses, self.calc() is called at the time self.buttn is defined. And command gets set to the return value of self.calc(), which is None. Nothing happens when the button is pressed because command equals None. Without parentheses, command is set to the function object self.calc, and the function is called (correctly) whenever the button is pressed.
  3. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆