PySimpleGUI: _ткинтеру.Ошибка TclError: недопустимое имя команды «.!верхний уровень.!кадр 3.!запись»

#python #tkinter #pysimplegui

Вопрос:

Я пытаюсь обновить поле ввода PySimpleGUI. Это мой код:

 import PySimpleGUI as sg layout=[ [sg.InputText('',key='-IN-')], [sg.InputText('',readonly='true',key='-RESULT-')] ] win=sg.Window('Test',layout) while True:  event,values=win.Read()  win['-RESULT-'].update(win['-IN-'].get())  

Но я получаю такую ошибку :

 Traceback (most recent call last):  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 9, in lt;modulegt;  win['-RESULT-'].update(win['-IN-'].get())  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/PySimpleGUI/PySimpleGUI.py", line 1666, in update  self.TKEntry.icursor(tk.END)  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/tkinter/__init__.py", line 3057, in icursor  self.tk.call(self._w, 'icursor', index) _tkinter.TclError: invalid command name ".!toplevel.!frame2.!entry"  

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

1. Вы используете tkinter вместе с PySimpleGUI?

2. Да, я использую PySimpleGUI, а PySimpleGUI использует tkinter

Ответ №1:

Мы можем обнаружить, что есть только одно событие, которое является кнопкой закрытия окна, нажатой. После нажатия кнопки закрытия окна окно будет уничтожено, и вы ничего не сможете с ним поделать, поэтому вам нужно проверить, закрыто ли окно, и выйти из цикла while, чтобы закрыть окно.

Вы можете установить опцию enable_events=True sg.Input включения события, генерируемого при вводе.

 import PySimpleGUI as sg  layout = [  [sg.InputText('', enable_events=True, key='-IN-')],  [sg.InputText('', readonly=True, key='-RESULT-')] ] win = sg.Window('Test',layout)  while True:   event, values = win.read()   if event == sg.WINDOW_CLOSED:  break  elif event == '-IN-':  # win['-RESULT-'].update(win['-IN-'].get())  text = values['-IN-']  win['-RESULT-'].update(text)  win.close()  

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

1. Ура, я использовал событие, и оно сработало! Мне не нужно было использовать значения[-В-], я использовал window[‘-В-‘].get (), и это было нормально. Еще раз спасибо, теперь я сделал свой собственный калькулятор восьмеричных чисел, который автоматически обновляет результат.