查找 stringvar 的长度

Finding the length of a stringvar

我正在尝试制作一个函数,如果文本框后面的变量为空,它将向文本框添加文本。我试图使用 .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()

做什么?

Tkinter StringVar 没有 .len.length 方法。您可以使用 get 方法访问关联的字符串,并使用标准 Python 内置的 len 函数获取该字符串的长度,例如

if len(line1var.get()) == 0:

但这样做更干净(也更高效)

if not line1var.get():

因为空字符串是假的。

这是一个小的 (Python 3) 演示:

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方法)returnsNone,所以上面的语句赋值Nonefoo。要将小部件分配给 foo,您需要在单独的语句中进行分配和打包,例如

foo = Button(root, text="foo", command=lambda : tobeplaced("foo"))
foo.pack()