从变量填充选项菜单

时间:2017-09-12 14:35:47

标签: python tkinter optionmenu

以下是我的代码的一部分。我有一个功能,扫描COM端口并拉出连接的可用COM端口。我想在选项菜单中将这些com端口列为不同的选择。当我运行此代码时,唯一可用的选项是COM2 COM4,是否有一种简单的方法将这些选项分成两个不同的选项?我不仅仅关注如何使用列表填充选项菜单,而是如何将我拥有的数据转换为列表。感谢。

    global model
    model = StringVar(master)
    self.option = StringVar()
    w = OptionMenu(master, self.option, ())

从com端口扫描,print语句返回[' COM2',' COM4']。

    print(serial_ports())
    global com
    com = list(serial_ports())
    self.option.set(com)

以下是扫描com端口的完整代码。

    def serial_ports():
        """ Lists serial port names

            :raises EnvironmentError:
                On unsupported or unknown platforms
            :returns:
                A list of the serial ports available on the system
        """
        if sys.platform.startswith('win'):
            ports = ['COM%s' % (i + 1) for i in range(256)]
        elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
            # this excludes your current terminal "/dev/tty"
            ports = glob.glob('/dev/tty[A-Za-z]*')
        elif sys.platform.startswith('darwin'):
            ports = glob.glob('/dev/tty.*')
        else:
            raise EnvironmentError('Unsupported platform')

        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())
        global com
        com = serial_ports()

        self.option.set(com)

1 个答案:

答案 0 :(得分:0)

这证明我所说的有效:

@Transactional(readOnly = true)

请阅读:

https://stackoverflow.com/a/18213202/4528269