【问题标题】:Python function variables with classess [closed]具有类的Python函数变量[关闭]
【发布时间】:2015-01-28 00:08:16
【问题描述】:

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

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 的这个示例。

【问题讨论】:

  • 你到底想做什么? self.entry 根本没有使用,got_it 也没有使用。
  • 正确。这只是我想做的一个例子。如前所述,我希望能够从第二个函数访问第一个函数的 tkinter 变量。
  • 那么你想要一个类,因为唯一的选择是使共享变量全局化,这很少被推荐。类提供了一种以结构化方式在函数之间共享数据的方法。
  • 感谢您的超级快速帮助!所以我放的代码会被推荐用于在它们之间传递变量吗?您还建议在 init 中调用窗口还是在类中调用新函数?

标签: python function class variables tkinter


【解决方案1】:

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

当然,您可以在没有课程的情况下做到这一点。您的实例变量必须是全局变量。一般来说,如果可能的话,应该避免使用全局变量。通过使用类,您的数据可以很好地封装在使用数据的代码中。

至于您示例的其余部分,我建议不要在应用程序类中创建根窗口,尽管在某种程度上这是个人喜好。我个人对程序结构的建议在这里:https://stackoverflow.com/a/17470842/7432

【讨论】:

    【解决方案2】:

    基本的想法是可以的,但是你应该把根移到类之外。

    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 所说),尤其是关于间距的部分。我在上面的示例中更正了您的间距。

    【讨论】:

    • 虽然您链接到的示例在课堂外定义了root,但这不是强制性的。您还可以从TkFrame 继承App
    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多