替代在Tkinter中使用全局参数

时间:2014-04-30 17:49:21

标签: python tkinter

有没有更好的方法来实现这样的代码而不使用全局参数? 我被告知全局参数在python中通常不是一件好事。 你们有什么感想?你认为全球参数还可以吗?

这是代码

import Tkinter as tk


def main():    
    global root

    root = tk.Tk()   # parent window


    message = tk.Label(root, text = "Hello World") 
    message.pack() 

    buttton = tk.Button(root, text="exit", command = buttonPushed) 
    button.pack()

    tk.mainloop()  


def buttonPushed():
    global root
    root.destroy()

main()

在我创建按钮的行上,如果我写了这样的东西;

buttton = tk.Button(root, text="exit", command = buttonPushed(root)) 
button.pack()


def buttonPushed(root):
    root.destroy()    

程序无法按要求运行。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您的buttonPushed功能是不必要的,因为您可以直接将按钮的command参数分配给root.destroy功能:

button = tk.Button(root, text="exit", command=root.destroy) 

因此,您的代码只是 1

import Tkinter as tk

def main():    

    root = tk.Tk()

    message = tk.Label(root, text="Hello World") 
    message.pack() 

    button = tk.Button(root, text="exit", command=root.destroy) 
    button.pack()

    tk.mainloop()  

main()

1 注意:我还删除了global root顶部的main行,因为这是不必要的。

答案 1 :(得分:3)

您可以使用classes来编写它,但正如iCodez所说,现在这个按钮是不必要的。

import Tkinter as tk

class interface(tk.Frame):
    def __init__(self, root):
        tk.Frame.__init__(self, root)

        self.root = root
        message = tk.Label(self.root, text = "Hello World") 
        button = tk.Button(self.root, text="exit", command = self.buttonPushed) 

        message.pack()
        button.pack()

    def buttonPushed(self):
        self.root.destroy()

root = tk.Tk()
inter = interface(root)
root.mainloop()