LinuxForum.Fans
Тема

Python: обновить список combobox (Решено)

Автор: caspar 5 сообщений 801 просмотров
28.05.2023 13:04 · отредактировано #438878

Пишу программу на Python. Столкнулся с проблемой.

Задача: Читаю текстовый файл, содержащий результаты некоторых тестов (в одном файле содержится несколько тестов).
Надо из файла выбрать один тест, обработать его и распечатать результат.
Читаю файл, нахожу первые строки тестов, имеющие вид : "1 2019.05.21 00:39:05" и их список записываю в список lTestHeaders.
Этот список передается в combobox:

text
# Создаем combobox выбора теста
t=StringVar()
test=ttk.Combobox(root,width=14,textvariable=t)
test['values']=lTestHeaders
test.grid(row=0,column=2,sticky=W)
test.current()
test.bind("<<ComboboxSelected>>",testSelect)

С помощью combobox test выбираю нужный тест и его обрабатываю.
Все работает прекрасно до тех пор, пока я работаю с одним файлом тестов. Стоит прочитать другой файл, список в combobox не обновляется и при попытке выбора теста программа вылетает с ошибкой.
Я не смог найти, как обновить список combobox.

Пока в качестве временной меры заглушил в меню пункт "Открыть файл.." и после обработки одного файла закрываю программу, а для обработки следующего запускаю вновь. Но это как-то не комильфо.

Подскажите, кто может, как после прочтения нового файла и составления нового списка обновить combobox.

28.05.2023 17:30 #438879

Насколько я понял, это Tkinter.

"caspar" написал:
text
test['values']=lTestHeaders

Вот это значение пробовали менять? Только насколько я понимаю, здесь не хватает установить state="readonly" и лучше как-то убрать выбор перед обновлением.

28.05.2023 17:48 · отредактировано #438880
"Rizado" написал:
Вот это значение пробовали менять?

При вставке этой строки в процедуре анализа входного файла выдает:

text
Traceback (most recent call last):
  File "/home/ses/BodyAn/BodyAn.py", line 194, in <module>
    clickOpen()
  File "/home/ses/BodyAn/BodyAn.py", line 78, in clickOpen
    readFile(fl)
  File "/home/ses/BodyAn/BodyAn.py", line 67, in readFile
    analProt()
  File "/home/ses/BodyAn/BodyAn.py", line 56, in analProt
    test['values']=lTestHeaders
NameError: name 'test' is not defined

Даже если переменная test описана в процедуре как global
Видимо здесь надо использовать не прямое присваивание, а метод, по аналогии как у меня меняются отображаемые значения на метках:

text
def updateLabels():
    # Показать надписи
    LabelHghtV.configure(text=str(iHeight))

Но для combobox я подходящего метода не нашел.

28.05.2023 20:07 #438882
"Rizado" написал:
не оно?

Спасибо. По-моему оно. Буду пробовать :) *DRINK*

Войдите или зарегистрируйтесь, чтобы ответить.