使用长度未知的列表填充Tkinter OptionMenu,即串口列表。

3
我正在开发一个Python程序,用于将串口数据记录到.txt文件中。该程序使用Tkinter的OptionMenu来询问用户要使用哪个串口。端口列表制作如下:
def serial_ports():
    for port in list_ports.comports():
        yield port
OPTIONS = list(serial_ports())

然后程序创建了一个OptionMenu(窗口名为'win',框架为'c'):
var = StringVar(win)
var.set(OPTIONS[0]) # initial value
    for item in OPTIONS:
        print item #statement here is temporary to prevent the prog from giving error while testing
w =  apply(OptionMenu, (c, var, item))
w.pack(side=RIGHT)

我可以依次获取要打印的项目,但我找不到在OptionMenu中获取它们的方法。类似以下代码:

for n in OPTIONS:
    #tried different things here: count, n = item, et whatever crazy stuff one tries.
w =  apply(OptionMenu, (c, var, OPTIONS[n]))

未解决问题。

最终的想法是选择OptionMenu后返回串口名称,最好是字符串(而不是索引),然后将其插入到以下位置:

ser0 = serial.Serial(port = '[HERE!!!]', baudrate = 9600, timeout = 0.5)

提示:目前该程序使用Python 2.7.1编写,适用于Mac OS X操作系统。

1个回答

1
要创建一个包含列表OPTIONS中所有选项的OptionMenu,请使用以下代码:
w =  OptionMenu(c, var, *OPTIONS)

For example,

import Tkinter as tk

def serial_ports():
    for port in list('ABCDE'):
        yield port

OPTIONS = list(serial_ports())

class App(object):
    def __init__(self, master, **kwargs):
        self.master = master
        self.var = tk.StringVar()
        self.var.set('Port')
        self.option = tk.OptionMenu(master, self.var, *OPTIONS)
        self.option.pack()


root = tk.Tk()
app = App(root)
root.mainloop()

你的第一个建议对我有用。对于类的工作,我发现有点难以理解(我是个新手)。但我会尝试的。谢谢。 - Hydrographer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接