动态菜单选项卡 Tkinter - 串行端口选择

时间:2021-01-01 07:47:27

标签: python tkinter

我想用 Tkinter 创建一个应用程序,可以通过菜单选项卡选择串行端口。所以程序正在搜索端口并相应地在菜单中创建选项卡。 如果我点击一个端口,它应该会返回我选择的端口。

通常这不是问题,如果标签的确切数量是已知的,并且您可以单独初始化每个标签。 我试图创建一个使用参数(标签名称)调用的函数,每当点击标签时:

import serial.tools.list_ports
from tkinter import *

def getPorts():
       return list(serial.tools.list_ports.comports())

def selectPort(port):
        print(port)
        #do port selection


root = Tk()

#Menu bar-------------
menu_bar = Menu(root)

#main tab: Tool 
Tools_menuTab =Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label='Tools', menu=Tools_menuTab)

#sub tab: Port
Tool_portSub = Menu(Tools_menuTab, tearoff=0)
Tools_menuTab.add_cascade(label='Port: ', menu=Tool_portSub)

#ports
portList = getPorts()
for i in range(len(portList)):
    #pass a parameter with lambda
    Tool_portSub.add_command(label=str(portList[i]),command=lambda: selectPort(str(portList[i])))


root.config(menu=menu_bar)
root.mainloop()

在我点击的任何标签上,它只打印最后一个端口。

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

在 lambda 函数中使用默认关键字参数根据标签名称“存储”参数。改为:

port = str(portList[i])
Tool_portSub.add_command(label=port,command=lambda port=port: selectPort(port))