带有类的Python函数变量

时间:2014-11-29 15:19:06

标签: python function class variables tkinter

这是不好的做法和/或是否有更好的方法来访问函数变量而不是:

class Start_up:
    def __init__( self ):
        self.root       = Tk()
        self.user_entry = StringVar()
        self.change     = StringVar()

        self.label  = Label  ( self.root, textvariable = self.change     )
        self.entry  = Entry  ( self.root, textvaribale = self.user_entry )
        self.button = Button ( self.root, text="Buttton", command = self.doSomething )

    def doSomething( self ):
        self.change.set("Text Changed")
        got_it = self.user_entry.get()

我想知道这些功能是否有办法完全相同但没有上课?

提前感谢您的任何帮助,我已经环顾四周,但无法找到TKinter的这个例子。

2 个答案:

答案 0 :(得分:1)

不,没有更好的方法。在存储和访问变量时,您在示例中显示的是正确的方法。

当然,你可以在没有课程的情况下完成。那么您的实例变量必须是全局变量。通常,应尽可能避免全局变量。通过使用类,您的数据可以很好地封装在使用数据的代码中。

至于你的示例的其余部分,我建议在app类中创建根窗口,尽管在某种程度上是个人偏好。我个人对程序结构的建议如下:https://stackoverflow.com/a/17470842/7432

答案 1 :(得分:0)

基本想法没问题,但你应该把根移到课外。

class App:
    def __init__(self, master):
        self.user_entry = StringVar()
        self.change = StringVar()

        self.label = Label(master, textvariable=self.change)
        self.entry = Entry(master, textvaribale=self.user_entry)
        self.button = Button(master, text="Buttton", command=self.doSomething 

    def doSomething(self):
        self.change.set("Text Changed")
        got_it = self.user_entry.get()

root = Tk()
app = App(root)
root.mainloop()

更详细地描述了here

你还应该阅读the official python style guide(正如@jonrsharpe所说),尤其是关于间距的部分。我在上面的示例中更正了您的间距。