-1

如何在函数中从和到获取 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()
4

2 回答 2

3

您可以使用该cget方法从小部件中获取属性。
在这种情况下,您需要minVal = sbDays.cget("from")并且maxVal = sbDays.cget("to")

编辑 - 用于多个 spinbox
要将其与多个 spinbox 一起使用,请将 to 更改validatecommand
validatecommand=(windows.register(validate),'%P', '%W')
并更改validate(userInput)validate(userInput, widget). 然后sbDays在我的答案中替换windows.nametowidget(widget)它应该可以工作。 中的
给出了小部件的名称(来自这里),然后用于获取小部件(来自这里)。%Wvalidatecommandnametowidget

于 2021-02-22T11:52:33.717 回答
0

您也可以使用这样的.config方法: sbDays.config("from")sbDays.config("to"). 它返回类似('from', 'from', 'From', 0, 0.0)or的东西('to', 'to', 'To', 0, 366.0)。请注意,最后一个值是我们需要的值,因此使用sbDays.config(...)[-1]应该会给出所需的结果。

于 2021-02-22T11:56:51.287 回答