Python: 如何从子模块设置 TkInter 属性?

Python: how to set TkInter attribute from submodule?

我正在使用 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 按钮小部件的秘诀。

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

如有指点,将不胜感激!

在您的代码中某处您正在创建 processorDialog 的实例。您需要保存它,并且 that 是您的 "xxxx":

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

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

示例:

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

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

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

有关标准 python 约定的详细信息,请参阅 PEP8