Tkinter - получить выбранный COM-порт из выпадающего списка - PullRequest
0 голосов
/ 06 мая 2020

У меня есть флажок со списком всех последовательных портов, и пользователь выбирает тот из поля со списком, чтобы позже взаимодействовать с Arduino.

Вот интересные биты:

# --- functions ---
def serial_ports():    
    return serial.tools.list_ports.comports()

def on_select(event=None):

    # get selection from event    
    print("event.widget:", event.widget.get())

    # or get selection directly from combobox
    print("comboboxes: ", cb.get())

# --- functions ---



label0 = tk.Label(frame1, text="Select the COM port that the device is plugged in: ")
label0.config(font=("TkDefaultFont", 8))
label0.place(relx = 0.1, rely=0.3, relwidth=0.3, relheight=0.5)


cb = ttk.Combobox(frame1, values=serial_ports())
cb.place(relx=0.5, rely=0.5, anchor='center')
# assign function to combobox
cb.bind('<<ComboboxSelected>>', on_select)

cb.bind() переводит выбор на on_select(). Однако, когда я распечатываю данные выбора пользователя, используя функцию on_select(), я получаю:

event.widget: COM14 - Arduino Mega 2560 (COM14)

Я хотел бы получить только COM-порт, например 'COM14', чтобы он мог быть назначенным в переменной, а затем использоваться следующим образом:

ser = serial.Serial('COM14', baudRate, timeout=0, writeTimeout=0)

где вместо 'COM14' у меня будет только моя переменная.

Есть ли метод pySerial, чтобы получить только COM-порт, без полного описания?

1 Ответ

0 голосов
/ 06 мая 2020

Результатом serial.tools.list_ports.comports() будет список экземпляров serial.tools.list_ports.ListPortInfo.

Итак, если вы хотите иметь только имена портов, измените

def serial_ports():
    return serial.tools.list_ports.comports()

на

def serial_ports():
    return [p.device for p in serial.tools.list_ports.comports()]
...