Python程序中的'StringVar'问题

7 投票
2 回答
20545 浏览
提问于 2025-04-16 22:48

我正在用Python的Tkinter库写一个非常简单的用户界面。可是我遇到了一个小问题,跟StringVar这个类有关。当我运行这个Python脚本时,在初始化StringVar变量的那一行出现了错误。我写了一个示例程序,想让它正常工作:

from Tkinter import *

var = StringVar()
var.set('test');

当我用Python运行它时,看到这个错误:

$ python test.py
Traceback (most recent call last):
  File "test.py", line 3, in <module>
    var = StringVar()
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 254, in __init__
    Variable.__init__(self, master, value, name)
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 185, in __init__
    self._tk = master.tk
AttributeError: 'NoneType' object has no attribute 'tk'
Exception AttributeError: "StringVar instance has no attribute '_tk'" in <bound method StringVar.__del__ of <Tkinter.StringVar instance at 0xb73cc80c>> ignored

我感觉这可能是我的Python安装出了问题,但也有可能是我做错了什么?我在Ubuntu Linux上使用的是Python 2.6.5,不知道这有没有影响。

2 个回答

1

我自己从来没有用过Tkinter,但从这里看,StringVar这个类是从一个叫Variable的基础类继承来的,正如在错误追踪中看到的对Variable.__init__()的调用。错误是在执行“self.tk = master.tk”这行代码时出现的。后面的错误信息表明这个“master”参数是NoneType,也就是说它没有tk这个属性。查看一下Tkinter的文档,关于StringVar的内容在这里:http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html

可以看到,master参数默认是None。这意味着master应该是一个包含这个StringVar的控件(也就是说,StringVar不和任何控件关联有意义吗?)。我必须说,确实需要把StringVar对象和一个控件关联起来,这样它才会有'tk'这个属性。

12

我觉得你可能需要在使用 StringVar 之前,先明确地调用 Tk()。

你只需要这样做:

from Tkinter import *
Tk() # Add this
var = StringVar()
var.set('test');

撰写回答