【问题标题】:Python: how to set TkInter attribute from submodule?Python:如何从子模块设置 TkInter 属性?
【发布时间】:2018-09-21 23:54:27
【问题描述】:

我正在使用 TkInter 在 Python 2.7 下显示一个 GUI 对话框。

我在主模块中定义了 GUI,并尝试将逻辑拆分到我导入的单独模块中。

import sys

from Tkinter import *
import ttk

import dialoglogic

       :
       :

class processorDialog:
    def _init__(self, top=None):
           :
           :
        self.ButtonProcess = Button(top)
        self.ButtonProcess.configure( state=DISABLED)
        self.ButtonProcess.configure( text='''Start Process''')

现在在 dialoglogic 模块中,我需要将按钮的状态设置为 NORMAL。

我知道我需要使用

xxxx.ButtonProcess.configure(state=NORMAL)

但我一直无法确定“xxxx”从子模块访问父模块中的 TkI 按钮小部件的秘诀。

如果答案就在那里,我对如何用谷歌搜索它感到困惑,因为我没有得出任何结果(但似乎每个人都需要在某个时候做某事 ;-))

任何指针将不胜感激!

【问题讨论】:

  • 大概,在某些时候你实际上构造了一个processorDialog 的实例。可能,您将对该实例的引用存储在某处 - 可能是全局变量,或者是某个其他类中的实例变量。 那个参考是你的xxxx。如果你没有存储它,你就不能使用它。

标签: python python-2.7 tkinter tk


【解决方案1】:

您在代码中的某处创建processorDialog 的实例。您需要保存它,那个 是您的“xxxx”:

xxxx = processorDialog()
...
xxxx.ButtonProcess.configure(state=NORMAL)

虽然,纯粹从 OO 的角度来看,一个类修改另一个类的组件的内部状态有点不寻常。更好的解决方案是在processorDialog 中创建一个方法来设置状态,并让您的代码调用它。

例子:

class processorDialog:
    ...
    def enable_button():
        self.ButtonProcess.configure(state=NORMAL)

xxxx = processorDialog()
...
xxxx.enable_button()

最后一点,您的命名约定似乎倒退了,这使您的代码难以阅读。您的类应以大写字母开头(例如:ProcessDialog),您的实例变量应以小写字母开头(例如:self.buttonProcess

有关标准 python 约定的更多信息,请参阅PEP8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2013-04-09
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多