我正在尝试创建一个函数,如果文本框后面的变量为空,则会将文本添加到文本框中。我试图使用.len()函数执行此操作,但我得到了
AttributeError: 'StringVar' object has no attribute 'length'.
我的代码如下:
line1var = StringVar()
line1var.set("")
def tobeplaced(value):
global line1var
if line1var.length() == 0:
txtReceipt.insert(END, value)
foo = Button(root, text="foo", command=lambda : tobeplaced("foo")).pack()
怎么办?
答案 0 :(得分:3)
Tkinter long
没有StringVar
或.len
方法。您可以使用.length
方法访问关联的字符串,并使用标准的Python内置get
函数获取该字符串的长度,例如
len
但它更干净(也更有效率)
if len(line1var.get()) == 0:
因为空字符串是假的。
这是一个小型(Python 3)演示:
if not line1var.get():
顺便说一下,你应该不做
import tkinter as tk
root = tk.Tk()
label_text = tk.StringVar()
label = tk.Label(textvariable=label_text)
label.pack()
def update():
text = label_text.get()
if not text:
text = 'base'
else:
text += '.'
label_text.set(text)
b = tk.Button(root, text='update', command=update)
b.pack()
root.mainloop()
foo = Button(root, text="foo", command=lambda : tobeplaced("foo")).pack()
方法(以及相关的.pack
和.grid
方法)返回.place
,因此上述语句会将None
分配给None
。要将窗口小部件分配给foo
,您需要在单独的语句中进行分配和打包,例如
foo