【问题标题】:Is there any way to delimit minimum and maximum of an integer input range in PySimpleGui spinboxes, so that minimum doesn't surpases maximum?有没有办法在 PySimpleGui spinboxes 中分隔整数输入范围的最小值和最大值,以便最小值不会超过最大值?
【发布时间】:2021-03-27 23:34:59
【问题描述】:

我的目标是使用旋转框在 PySimpleGui 的窗口中输入最小值和最大值。 但想法也是根据彼此限制旋转框的范围,使最小值不超过最大值;前任。如果我在上旋转框中输入 50(最小),下旋转框(最大)应该不能取低于 50 的数字,或者同样反过来,如果我在下旋转框中输入 60(最大),上旋转框( minimum) 应该只接受低于 60 的数字。

到目前为止,我已经为两个 spinbox 的代码完成了此操作(setValues 是一个集合,其中包含先前在代码中定义的整数)。

minValues = int(min(setValues))
maxValues = int(max(setValues))
print(minValues, maxValues)

layout = [[sg.Spin([i for i in range(minValues,maxValues+1)], initial_value=minValues), sg.Text('Minimum value')],
        [sg.Spin([i for i in range(minValues,maxValues+1)], initial_value=maxValues), sg.Text('Maximum value')],
        [sg.Submit(), sg.Cancel()]]
window = sg.Window('Window Title', layout)

虽然我希望在 PySimpleGui 中有一个解决方案,但也欢迎其他 GUI 库中建议的答案。

【问题讨论】:

    标签: python pysimplegui


    【解决方案1】:

    当此sg.Spin 发生事件时,更新另一个sg.Spin 的选项values

    演示代码如下,

    import PySimpleGUI as sg
    
    sg.theme("DarkBlue")
    sg.set_options(font=("Courier New", 16))
    
    minValue = 5
    maxValue = 20
    
    layout = [
        [sg.Spin([i for i in range(minValue, maxValue)],     initial_value=minValue, size=(2, 1), enable_events=True, key='-MIN-'), sg.Text('Minimum value')],
        [sg.Spin([i for i in range(minValue+1, maxValue+1)], initial_value=maxValue, size=(2, 1), enable_events=True, key='-MAX-'), sg.Text('Maximum value')],
        [sg.Submit(), sg.Cancel()],
    ]
    
    window = sg.Window('Title', layout, finalize=True)
    
    value_min, value_max = minValue, maxValue
    
    while True:
        event, values = window.read()
        if event == sg.WINDOW_CLOSED:
            break
        elif event == '-MAX-':
            value_max = values[event]
            window['-MIN-'].update(values=[i for i in range(minValue, value_max)])
        elif event == '-MIN-':
            value_min = values[event]
            window['-MAX-'].update(values=[i for i in range(value_min+1, maxValue+1)])
        print(event, values)
    
    window.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 2013-06-27
      • 2020-08-27
      • 2016-11-25
      相关资源
      最近更新 更多