2017-04-01 153 views
0

我想做一個函數,將文本添加到文本框,如果它後面的變量是空的。我試圖做到這一點使用.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() 

什麼辦法呢?

+1

不是'len(line1var)'工作嗎? – ForceBru

+0

@ForceBru:No.'TypeError:'StringVar'類型的對象沒有len()'。但是你可以'如果len(line1var.get())== 0:',儘管我更喜歡'如果不是line1var.get():'。 –

回答

2

A Tkinter StringVar沒有.len.length方法。你可以用get方法訪問相關的字符串,並獲得該字符串與內置len功能標準Python的長度,例如

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

但它的清潔劑(和更有效)做

if not line1var.get(): 

由於空字符串是false-ish。

這裏有一個小的(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() 

BTW,你應該

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

.pack方法(和相關.grid.place方法)返回None,因此上面的語句將None指定爲foo。要將小工具分配到foo,您需要在單獨的語句中執行分配和打包,例如

foo = Button(root, text="foo", command=lambda : tobeplaced("foo")) 
foo.pack() 
相關問題