首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spinbox上使用验证组件时的AttributeError

在Spinbox上使用验证组件时的AttributeError
EN

Stack Overflow用户
提问于 2015-01-09 18:56:55
回答 1查看 222关注 0票数 0

我正在进行一个测试,编写一个脚本来验证一个spinbox,以便在一个更大的系统上实现它,但是我正在与python斗争,因为它警告我的Window类中没有spinbox属性。检查我的代码:

代码语言:javascript
复制
from Tkinter import *

class Window:

  def __init__(self, toplevel):

    self.spinbox = Spinbox(toplevel, from_ = 0, to = 10,
                           validate = 'all', validatecommand = self.validate)
    self.spinbox.pack()

  def validate(self):

    print self.spinbox.get()

root = Tk()
Window(root)
root.mainloop()

这就是它所犯的错误:

代码语言:javascript
复制
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1486, in __call__
    return self.func(*args)
  File "D:\DOCS\FILIPE\PROGRAMMING\PYTHON\Tkinter sandbox\01 - spinbox validate.
py", line 13, in validate
    print self.spinbox.get()
AttributeError: Window instance has no attribute 'spinbox'

有人能帮我这个忙吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-09 19:09:02

如果将一些print语句添加到代码中:

代码语言:javascript
复制
class Window:
  def __init__(self, toplevel):
    print "A start", self, self.__dict__
    self.spinbox = Spinbox(toplevel, from_ = 0, to = 10,
                           validate = 'all', validatecommand = self.validate)
    self.spinbox.pack()
    print "A end", self, self.__dict__

  def validate(self):
    print "B", self, self.__dict__
    print self.spinbox.get()
#...

你得到的输出:

代码语言:javascript
复制
A start <__main__.Window instance at 0x7fe4f8deec20> {}
B <__main__.Window instance at 0x7fe4f8deec20> {}
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1532, in __call__
    return self.func(*args)
  File "t.py", line 14, in validate
    print self.spinbox.get()
AttributeError: Window instance has no attribute 'spinbox'
A end <__main__.Window instance at 0x7fe4f8deec20> {'spinbox': <Tkinter.Spinbox instance at 0x7fe4f8e0da28>}

这意味着在构造函数中调用验证函数来验证初始值,此时还没有设置self.spinbox。您需要检查是否仍在构建或延迟设置validatecommand,如下所示:

代码语言:javascript
复制
self.spinbox = Spinbox(toplevel, from_ = 0, to = 10,
                       validate = 'all')
self.spinbox["validatecommand"] = self.validate
self.spinbox.pack()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27867330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档