简体   繁体   English

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

[英]Dynamic Menu-tabs Tkinter - Serialport selection

I would like to create an application with Tkinter, where serialports can be selected via the menu tabs.我想用 Tkinter 创建一个应用程序,可以通过菜单选项卡选择串行端口。 So the programm is searching for Ports and creates Tabs in the menu accordingly.所以程序正在搜索端口并相应地在菜单中创建选项卡。 If I am clicking on a Port it should give me back the port that were selected.如果我单击一个端口,它应该将我选择的端口返回给我。

Usually this isn't a problem, if the exact amount of tabs is known and you just can initialise each tab singularly.通常这不是问题,如果知道标签的确切数量并且您可以单独初始化每个标签。 I have tried to create a function that is being called with a parameter(name of label), when ever a label is clicked:我试图创建一个 function ,当单击 label 时,它会使用参数(标签名称)调用:

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

On whatever label I am clicking, it only prints the last port.在我点击的任何 label 上,它只打印最后一个端口。

I would appreciate any help.我将不胜感激任何帮助。

Used default keyword parameters in lambda functions to "store" the parameters according to the label name.使用 lambda 函数中的默认关键字参数根据 label 名称“存储”参数。 Changed to:变成:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM