如何获取当前的 Spinbox 'from' 和 'to' 值

问题描述

如何在函数中从和到获取spinBox的值?

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] 应该会得到所需的结果。