【问题标题】:"module" object has no attribute error when trying to get Checkbutton status尝试获取 Checkbutton 状态时,“模块”对象没有属性错误
【发布时间】:2016-06-07 12:24:29
【问题描述】:

我正在尝试获取冗余检查按钮的状态,以查看是否应该运行 test.py 脚本。正如它现在工作的那样,一旦单击按钮,run.py 就会触发并正常运行 testSomething 函数。每当我尝试使用.get() 或类似的东西来获取状态时,它都会抛出模块对象没有属性错误。知道我做错了什么吗?另外,将 if 语句放在 run.py 文件或 test.py 文件中会更好吗?提前致谢。


Tool.py相关行

类 ToolGui(Frame): def create_widgets(self): self.redundancyChecked = IntVar()

    self.redundancyCheckbutton = Checkbutton(rightframe, onvalue=1, offvalue=0,  text="Run Script?", variable=self.redundancyChecked)

    self.redundancyCheckbutton.pack(side=TOP, pady=(5,0))

run.py相关行

类线程(threading.Thread): def runC(self, varis) :

    ####if checkbutton is checked, run this...could go here

    test.trySomething(workDir)

test.py相关行

import os
import sys
import subprocess


def trySomething(dir):
    import Tool
  ###or If statement could go here, not sure which would be better
    Tool.redundancyCheckbutton.config(state=DISABLED)

【问题讨论】:

  • 请显示实际错误——它会告诉您哪个模块和哪个属性。根据经验,您应该从字面上理解错误信息并假设它说的是真话。

标签: python tkinter


【解决方案1】:

redundancyCheckbutton 属于某个类的某个实例的一个实例。我不知道什么类,因为你没有显示足够的代码。

可能导致问题的行(我假设,因为您没有显示实际的错误消息)是这样的:

import Tool
Tool.redundancyCheckbutton.config(...)

在这种情况下,Tool 是一个模块。这个模块没有redundancyCheckbutton 属性,就像错误消息告诉你的那样。同样,该属性属于 object,而不是 module

很可能在Tool 的某个地方定义了一个类。既然你没有说,为了这个答案,我会说它被命名为GUI。因此,您有一个模块Tool,有一个类GUI。这个类定义了一个属性self.redundancyCheckbutton

创建该检查按钮的唯一方法是创建该类的实例。所以,在你的代码的某个地方,你必须做这样的事情:

gui = GUI(...) # or maybe Tool.GUI(...)

因此,要访问redundancyCheckbutton,您必须使用gui.redundancyCheckbutton,因为它是对象的属性,由工具模块中的类定义。

【讨论】:

  • 这是正确的。 Tool.py 包含一个类和函数: ToolGui(Frame): def create_widgets(self): self.redundancyChecked = IntVar() ... 等等带有检查按钮,那么我将如何获得redundancyChecked 值?做一个实例?
  • @burghermeister:你不需要创建它的 another 实例。要使复选按钮存在,您必须已经创建了一个实例。您只需要保留对该实例的引用。
猜你喜欢
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2016-09-29
相关资源
最近更新 更多