问题描述
sbDays=tk.SpinBox(frame,from_=0,to=366)
sbDays.place(relx=initialX,rely=ydistance)
sbDays.configure(validate='all',validatecommand=(windows.register(validate),'%P'))
def validate(userInput):
if userInput=="":
return True
try:
val=int(float(userInput))
except ValueError:
return False
return val>=0 and val<=366
而不是return val>=0 and val<=366
。我需要这个:
minVal=spinBox 'from' value of '0'
maxVal=spinBox 'to' value of '366'
return val>=minVal and val<=maxVal
在 C# 中,是这样的:
minVal=this.From()
maxVal=this.To()
解决方法
您可以使用 cget
方法从小部件获取属性。
在这种情况下,您需要 minVal = sbDays.cget("from")
和 maxVal = sbDays.cget("to")
编辑 - 对于多个旋转框
要将其与多个旋转框一起使用,请将 validatecommand
更改为validatecommand=(windows.register(validate),'%P','%W')
并将 validate(userInput)
更改为 validate(userInput,widget)
。然后用 sbDays
替换我的答案中的 windows.nametowidget(widget)
,它应该可以工作。
%W
中的 validatecommand
给出了小部件的名称(来自 here),然后用于获取带有 nametowidget
的小部件(来自 here) .
您也可以像这样使用 .config
方法:
sbDays.config("from")
和 sbDays.config("to")
。它返回类似 ('from','from','From',0.0)
或 ('to','to','To',366.0)
的内容。请注意,最后一个值是我们需要的值,因此使用 sbDays.config(...)[-1]
应该会得到所需的结果。