【问题标题】:Populate Tkinter OptionMenu with list of unknown length, i.e. list of serial ports使用未知长度列表填充 Tkinter OptionMenu,即串行端口列表
【发布时间】:2014-01-07 01:14:14
【问题描述】:

我正在开发一个 Python 程序,该程序将数据从串行端口记录到 .txt 文件中。该程序使用 Tkinter 的 OptionMenu 来询问用户使用哪个串口。端口列表如下:

def serial_ports():
    for port in list_ports.comports():
        yield port
OPTIONS = list(serial_ports())

然后程序制作 OptionMenu (window name = 'win', frame = '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)

ps。目前该程序是为 Mac OS X 和 Python 2.7.1 编写的。

【问题讨论】:

    标签: python macos serial-port tkinter optionmenu


    【解决方案1】:

    要创建一个包含OPTIONS 列表中所有选项的 OptionMenu,请使用:

    w =  OptionMenu(c, var, *OPTIONS)
    

    例如,

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

    【讨论】:

    • 你的第一个建议对我有用。使用课程我觉得有点难以理解(我是一个相当新手)。但我会尝试的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2018-08-14
    • 2017-12-31
    • 2019-07-04
    • 2023-02-26
    • 2022-01-25
    • 2022-08-09
    相关资源
    最近更新 更多