我有一个tkinter条目和相应的StringVar的字典,我想检查它是否具有Truthy / Falsy值。我知道我可以在all()上编写我自己的版本,它可以遍历StringVar并使用.get()来访问值:
>>> from tkinter import *
>>> root=Tk()
>>> row={'new':{}, 'old':{}}
>>> row['new']['data']=StringVar(value='something')
>>> row['new']['non_data']=StringVar(value='')
>>>
>>> def my_all(StringVarIter):
... for element in StringVarIter:
... if not element.get():
... return False
... return True
...
>>> my_all(row['new'].values())
False
>>> row['new']['non_data']=StringVar(value='something else')
>>> my_all(row['new'].values())
True
使用内置输入和tkinter功能是否有更清洁,更pythonic的方式?我正在思考这些问题,也尝试过滤(函数,可迭代)
>>> map(StringVar.get(),row['new'].values())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: get() missing 1 required positional argument: 'self'
但这甚至没有让我获得所有()
所需的迭代答案 0 :(得分:0)
你实际上与return write_f.name
非常接近;错误是因为您在不提供实例的情况下调用类上的方法。 map(StringVar.get(), row['new'].values())
的第一个参数应该是一个可调用的,它将可迭代的第二个参数中的每个项依次作为单个参数。
所以你实际上可以引用该方法,而不是试图调用它,并依次传递实例:
map
或使您自己的单参数可调用(您经常会看到map(StringVar.get, row['new'].values())
# ^ note no parentheses, we're not calling the method
用于此目的):
lambda