【问题标题】:python tkinter inside class - getting state of widgets类内的python tkinter - 获取小部件的状态
【发布时间】:2020-12-11 15:55:30
【问题描述】:

我编写了一个程序,并且正在学习类,因此,我重写了代码以利用类和对象。

我的问题是,如果我从一个类创建一个 tkinter 小部件“下拉菜单”,我无法检索 get.state 变量。

class ...:
    def make_drop_menu(self,parent,drop_opts,drop='empty',state=''):
        self.parent = parent
        self.drop = drop
        self.drop_opts = drop_opts

        self.state = tk.StringVar()
        self.state.set(self.drop_opts[0])  # sets default value on drop (drop down menu)
        self.drop = OptionMenu(self.parent, self.state, *self.drop_opts)  # completed drop
        return self.drop
----------------
class main:

self.widget = self.var.make_drop_menu(self.obj_mainwindow.btm_frame, self.col_opts)


Added for clearity:
window = windowclass() #windowclass is the style for tkinter. Makes a tkwindow.
self.widget = self.windowclass.var.make_drop_Menu() # 


为了简化,我省略了一些代码。但我的主要问题是我创建了一个名为 self.widget 的小部件,它构建了我的下拉菜单。但是,我不知道如何获取下拉菜单的状态。

希望代码有意义。

【问题讨论】:

    标签: python class tkinter


    【解决方案1】:

    如果您的类名为MyClass,那么要访问state 变量,您将使用该类的实例。在您的情况下,self.var 似乎是您的类的实例,所以它看起来像这样:

    self.var = MyClass()
    self.var.make_drop_menu(...)
    ...
    print(self.var.state.get())
    

    【讨论】:

    • obj是打开的TK窗口。在该对象内部,有创建小部件的方法。 ``` 所以 self.var = class_window dropmenu = self.var.make_drop_menu() # 创建下拉菜单但此时我无法访问下拉菜单的状态 ``
    • @EricConnaisseur:我不确定我是否理解你。底线是您的 state 变量是该类的实例变量。因此,就像任何类的任何实例变量一样,您可以通过实例引用它。
    • 我相信我的问题是我在一个类中有一个类。我移动了 make_drop_menu 类,使其不依赖于其他任何东西。这种方法使创建下拉菜单所需的行数增加了一倍,但使我能够根据需要访问变量。所以我想它已经解决了。
    • @EricConnaisseur:您对术语的使用非常混乱。 make_drop_menu 不是一个类,它是一个方法。如果您确实在另一个类定义中确实有一个文字类定义,您可能应该停止这样做。它使代码难以理解,并且通常不会比在全局级别定义内部类提供任何额外的价值。
    【解决方案2】:

    使 make_drop_menu 类独立于任何其他类对象。这样我就可以创建一个下拉菜单,分配父 tk 窗口,并创建一个在调用时获取状态变量的方法。 感谢 Bryan Oakley 的帮助!

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2012-04-06
      • 2022-12-08
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2014-12-17
      相关资源
      最近更新 更多