我想用 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()
在我点击的任何标签上,它只打印最后一个端口。
我将不胜感激。
答案 0 :(得分:0)
在 lambda 函数中使用默认关键字参数根据标签名称“存储”参数。改为:
port = str(portList[i])
Tool_portSub.add_command(label=port,command=lambda port=port: selectPort(port))