【问题标题】:Stopping Statement Execution Until true停止语句执行直到为真
【发布时间】:2021-05-07 12:40:02
【问题描述】:

我正在尝试使用pysimplegui 处理用户输入。

如果用户在输入框中输入任何值,我需要确保它是整数类型。

如果成功,我需要将用户输入的值替换为默认值。

我尝试在 while 循环中使用 try except。我在这里担心的是,如果用户输入了一个字符串值,我需要提供一个重试选项。

但是,try 块下方的 if else 块正在执行。 如何确保为用户提供重试输入值的选项?

import PySimpleGUI as sg

sg.theme('SandyBeach')

layout = [
    [sg.Text('Please enter your Phone')],
    [sg.Text('Phone', size=(15, 1)), sg.InputText(key="lp1", do_not_clear=False)],
    [sg.Button("e"), sg.Quit()]
]
window = sg.Window('Simple data entry window', layout)
while True:

    event, values = window.read()

    if event in (sg.WINDOW_CLOSED, "Quit"):
        break
    elif event == "e":

        text = values['lp1']
        log_timer = 1200
        user_input = None

        if text == '':
            log_timer = 1200
        else:
            while True:
                try:
                    user_input = int(text)
                    break

                except ValueError:
                    sg.popup_error("Only Integer Allowed")
                    break

如果输入了字符串值,我需要停止下面的块。

        if type(user_input) == int:

            log_timer = user_input
            print(log_timer)

        elif log_timer == 1200:
            print("no cha")

window.close()
 

【问题讨论】:

  • 你的第二个while True: 没用。你break 在这两种情况下都不行。
  • 用于检查我是否添加了 coz,如果我删除了 try & keep on 的中断,除非 ui 卡在循环上,你可以建议修复它吗

标签: python python-3.x pysimplegui


【解决方案1】:

您的代码中有很多杂音。 当您将其减少到仅需要的内容时,它会变得更加清晰。

import PySimpleGUI as sg
sg.theme('SandyBeach')

layout = [
    [sg.Text('Please enter your Phone')],
    [sg.Text('Phone', size=(15, 1)), sg.InputText(key="lp1", do_not_clear=False)],
    [sg.Button("e"), sg.Quit()]
]
window = sg.Window('Simple data entry window', layout)
# Add some defaults for user_input and log_timer
user_input = None
log_timer = 1200
while True:
    event, values = window.read()
    text = values['lp1']
    # break on Quit
    if event in (sg.WINDOW_CLOSED, "Quit"):
        break
    elif event == "e" and text != '':
        # Attempt to convert to int
        try:
            user_input = int(text)
        except ValueError:
            sg.popup_error("Only Integers Allowed")
        # If the attempt was unsuccessful user_input will remain None
        if user_input is not None:
            # the only place log_timer is changed from the default
            log_timer = user_input
            break
print(log_timer)
window.close()

代码中的两个breaks 意味着它只会在两种情况下停止运行。 输入了一个有效数字。或者按下了退出按钮。

在一个位置重新分配log_timer 意味着它可以改变默认值的唯一方法是输入一个有效的数字。

一旦你学会了函数等等,显然有待改进。但这是一个很好的起点。

【讨论】:

  • 谢谢这就是我要找的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 2021-08-19
  • 2018-11-24
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多