下拉菜单tkinter问题的解决方案

时间:2018-04-12 18:34:50

标签: python tkinter drop-down-menu

我目前正在开发一个python GUI应用程序,用户可以在其中搜索股票市场价格的变化等。我正在尝试创建一个搜索历史记录类型下拉菜单,我没有运气。用户输入的每个公司都存储到文本文件中,然后程序从单个用户的文本文件中读取该文本文件,然后该文本文件形成搜索历史。我设置代码的方式是运行for循环以向下拉菜单添加新命令,其中标签对应于用户先前搜索过的每个公司。但是,我需要获取标签的价值才能搜索股票价格的详细信息。

 def CreateMenu(self):
    menu=Menu(self.window2)
    self.subMenu=Menu(menu)
    self.window2.config(menu=menu)
    menu.add_cascade(label="Search History", menu=self.subMenu)
    f=open(self.entered_text+'.txt','r+')
    for line in f:
        self.subMenu.add_command(label=line, command=self.getdata)

所以在这里我在文本文件中的每个数据的菜单下拉列表中创建一个新命令。当用户选择其中一个命令时,如何在菜单或索引中获得该特定命令的标签? 我知道.entrycget函数,但是我需要知道所选命令的位置,有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用lambda将参数传递给函数:

for line in f:
    self.subMenu.add_command(label=line, 
        command=lambda label=line: self.getdata(label))

然后,您需要修改getdata以接受参数:

def self.getdata(self, label):
    ...

答案 1 :(得分:0)

对于一个自包含的示例,

from tkinter import *

def go(line):
    print(line)

root = Tk()

menu=Menu(root)
subMenu=Menu(menu)
root.config(menu=menu)
menu.add_cascade(label="Search History", menu=subMenu)
commands = []
f=open('search_menu.txt','r+') # text file with one search entry per line
for line in f:
    commands.append(subMenu.add_command(label=line[:-1], command=lambda x=line[:-1]:go(x)))

# [:-1] is getting rid of \n

root.mainloop()