在Python中获取所有COM端口到tkinter组合框

时间:2016-12-16 11:36:23

标签: python python-2.7 tkinter serial-port

我有一个带有组合框的 tkinter GUI

我想在启动GUI时将所有可用的COM端口放到组合框中,我需要在更改组合框值时执行一个功能。

我有 pyserial ,我正在使用 Python 2.7

我该怎么做?

更新

这是获取COM端口的功能..我想为我的GUI绑定它。我需要一个组合框更改事件。

import sys
import glob
import serial


def serial_ports():


    ports = ['COM%s' % (i + 1) for i in range(256)]

    result = []
    for port in ports:
        try:
            s = serial.Serial(port)
            s.close()
            result.append(port)
        except (OSError, serial.SerialException):
            pass
    return result


if __name__ == '__main__':
    print(serial_ports())

我添加了此配置以获取端口到组合框。

self.comboComNum.configure(values=serial_ports())

问题

如何为获取COM端口实现更准确,更快速的功能?

如何获得组合框更改事件?

2 个答案:

答案 0 :(得分:1)

serial.tools.list_ports,也许它会更快(我不会使用Windows,所以我可以测试它)

import serial.tools.list_ports

print serial.tools.list_ports.comports()

您收到了评论链接示例combobox-get-selection

这里是较短的版本

import tkinter as tk
import tkinter.ttk as ttk
import serial.tools.list_ports

# --- 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())

# --- main ---

root = tk.Tk()

cb = ttk.Combobox(root, values=serial_ports())
cb.pack()

# assign function to combobox
cb.bind('<<ComboboxSelected>>', on_select)

root.mainloop()

答案 1 :(得分:0)

#Muestra los Puertos COM en Python
import serial.tools.list_ports
# Llamamos a la libreria que nos ayudara a buscar
# los puertos habilidatos.


find_com = serial.tools.list_ports

COM = find_com.comports()

#Nos devuelve una lista
# EL primer parametro es el puerto.
print(COM[0]) # Nombre completo del puerto.
print(COM[0][0]) # Solo puerto COM#