查找 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
,所以上面的语句赋值None
至 foo
。要将小部件分配给 foo
,您需要在单独的语句中进行分配和打包,例如
foo = Button(root, text="foo", command=lambda : tobeplaced("foo"))
foo.pack()
我正在尝试制作一个函数,如果文本框后面的变量为空,它将向文本框添加文本。我试图使用 .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
,所以上面的语句赋值None
至 foo
。要将小部件分配给 foo
,您需要在单独的语句中进行分配和打包,例如
foo = Button(root, text="foo", command=lambda : tobeplaced("foo"))
foo.pack()