Как сделать меню настройки последовательного порта, желательно в tkinter

Уже неделю пытаюсь разобраться как сделать это меню с комбобоксами, честно говоря - даже удивлён тому, что нигде нет примеров именно настройки портов, именно выбора параметров в самой программе, а не создание порта с заранее заданными значениями того же порта, битрейта, четности, и прочего. Может плохо ищу, может всё настолько просто, что это не требует объяснений, но видимо я слишком глуп, чтоб это понять. Серьёзно, за всю неделю видел только один пример программы на питоне, в которой была настройка порта, но все комментарии там на китайском, криво переведённом на английский, да и написана она видимо на более старой версии как Питона, так и PySerial, ибо её копия тупо не запускается, ругаясь на неправильное написание и отсутствие модулей. Уже даже задавал похожий вопрос тут, но внятного ответа так и не получил, только что-то вроде "так это ж переменные, меняй как хочешь". Как их менять-то?

Чего пытаюсь добиться: запускаю программу, открывается окно, в нём уже выбираю из комбобоксов порт, битрейт, тип четности, кол-во битов в пакете, кол-во стопбитов и уже после этого отправляю сообщения из полей ввода. Интерфейс уже есть


Ответы (1 шт):

Автор решения: Bogdan M.

В целом задача ну очень легкая. чтобы сделать окно используй следующий код:

from tkinter import *
from tkinter import ttk
root = Tk()

root.geometry("500x500")

чтобы создать комбобокс

combobox_values = ['apple', 'banana', 'orange'] #сюда вставляете нужные параметры

combobox = ttk.Combobox(root, values = combobox_values, state = "readonly")

чтобы не париться с получениям значения используйте StringVar(для сторки) или IntVar(для числа) для выбраного значения

combobox_value = StringVar()
# или
combobox_value = IntVar()
# чтобы задать значение по умолчанию используйте параметр value как для StringVar так и для IntVar
combobox_value = StringVar(value='apple')

полноценный код для создания комбобокса:

combobox_values = ['apple', 'banana', 'orange']
combobox_value = StringVar(value = combobox_values[0])
combobox = ttk.Combobox(root, values = combobox_values, textvariable = combobox_value, state = "readonly")
combobox.pack() #размещения в окне, можно также использовать grid или place 
#подробнее тут: https://www.delftstack.com/de/tutorial/tkinter-tutorial/tkinter-geometry-managers/

чтобы получить значение используйте метод .get()

combobox_value.get() # -> "apple"

полностью код будет выглядеть так:

from tkinter import *
from tkinter import ttk

root = Tk()

root.geometry("500x500")

combobox_values = ['apple', 'banana', 'orange']
combobox_value = StringVar(value = combobox_values[0])
combobox = ttk.Combobox(root, values = combobox_values, textvariable = combobox_value, state = "readonly")
combobox.pack()

def get_combobox_value():
    print(combobox_value.get())

button = Button(text = "Подтвердить", command = get_combobox_value)
button.pack()

root.mainloop()

результат видео

добавление значений

def add_combobox_value(new_value):
    values = list(combobox.cget('values'))
    values.append(new_value)
    combobox.configure(values = values)
→ Ссылка