как задать вводимый текст в соответствии с требованиями pysimplegui

#python #pysimplegui

Вопрос:

У меня есть макет и вводимый текст, и я хочу, чтобы вводимый текст не оставался пустым. Я искал всю документацию PySimpleGUI, но не увидел, как я могу настроить вводимый текст в соответствии с требованиями

вот мой код

 layout = [[sg.Text('enter your license code')],
              [sg.InputText()], # I wan't this input to be required
              [sg.Submit('OK'), sg.Cancel('Cancel')]]
    window = sg.Window('invalid License', layout, icon="logo.ico")
    while True:
        event, values = window.read()
        if event == 'Cancel' or event == sg.WIN_CLOSED:
            break  # exit button clicked
    window.close()
    license_input = values[0]
    read_configs('license.txt')
    lic = "license.txt"
    with open(lic, 'r ') as f:
        text = f.read()
        text = re.sub(license_code, license_input, text)
        f.seek(0)
        f.write(text)
        f.truncate()
 

Ответ №1:

Код лицензии, необходимый для всплывающего окна

  • Кнопка «Отмена» не нужна и удалена
  • Кнопка «Закрыть» окна отключена enable_close_attempted_event=True и sg.WINDOW_CLOSE_ATTEMPTED_EVENT не обрабатывается, или она сначала уничтожит окно при нажатии кнопки «Закрыть».
  • Прочитайте и верните текущее значение элемента ввода методом get или с помощью values[element] кнопки если не «Закрыть» события окна.
  • Прерывайте цикл событий только тогда, когда значение входного элемента не является нулевой строкой.
 import PySimpleGUI as sg

layout = [
    [sg.Text('enter your license code')],
    [sg.InputText(key='-INPUT-')],
    [sg.Submit('OK')],
]
window = sg.Window('invalid License',
    layout,
    #icon="logo.ico",
    enable_close_attempted_event=True)

while True:
    event, values = window.read()
    print(event, values)
    license_code = window['-INPUT-'].get().strip()
    if event == 'OK' and license_code:
        break

window.close()
print(license_code)
 

Комментарии:

1. чтение и запись в файл лицензии моя проблема в том, что, когда пользователь оставил его пустым, он удалит старое значение, и функция регулярного выражения не сработает в следующий раз, когда пользователь попытается ввести лицензию