【问题标题】:calling a method from tkinter class从 tkinter 类调用方法
【发布时间】:2019-01-25 15:48:28
【问题描述】:

我是 Python 的新手,我正在尝试开发一种假数据生成器软件,让数据科学家能够更快地学习。 我的问题是关于我们如何从 tkinter 对象类之间的子方法调用方法。我有创建根窗口的根类和创建顶层(子窗口)的顶层类。 我的子窗口类需要更新根窗口中的小部件,而我做不到。

enter code here

class Menu():
    def __init__(self,master):
    ....
    def openwindow(self):
        secondwindow = my_sub_window(root)
    def dosomething(self):
        ....

class my_sub_window():
    def __init__(self, master):
        update_root()
    def update_root(self):
        dosomething()  # How can I call dosomething method in Menu() class?

root = Tk()
myApp = Menu(root)
root.mainloop()

【问题讨论】:

  • 如果你有两个菜单怎么办? my_sub_window 类如何知道哪个应该处理dosomething?如果你在想“这永远不会发生。我确定我只会有一个菜单”,那么你应该首先考虑菜单是否需要成为一个类。 (我并不是说它绝对不应该是一门课;只是要考虑的事情)
  • 您使用以下语法Class.Method() 调用类方法。你的例子是Menu.dosomething(self)
  • @gbeaven:如果调用者中的self 不是Menu 的实例,那可能不会像你期望的那样工作。
  • @BryanOakley 好点。

标签: python class tkinter methods


【解决方案1】:

在您的特定情况下,您将根据全局 myApp 类调用该函数:

class my_sub_window():
    def update_root(self):
       myApp.dosomething()

不过,像这样依赖全局变量通常不是一个好主意。最常见的解决方案是将Menu 的实例传递给my_sub_window 类。

例子:

class Menu():
    def openwindow(self):
        secondwindow = my_sub_window(root)
        ...

class my_sub_window():
    def __init__(self, root):
        self.root = root
    def update_root(self):
        self.root.dosomething()

【讨论】:

  • 非常感谢,它成功了。 “myApp.dosomething()”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2021-12-12
  • 2023-03-04
  • 2017-11-09
相关资源
最近更新 更多