【问题标题】:Solution to drop down menu tkinter issue下拉菜单 tkinter 问题的解决方案
【发布时间】:2018-09-23 00:41:43
【问题描述】:

我目前正在开发一个 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 函数,但我需要知道被选中命令的位置,有没有办法解决这个问题?

【问题讨论】:

    标签: python tkinter drop-down-menu


    【解决方案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):
        ...
    

    【讨论】:

    • 非常感谢!
    【解决方案2】:

    举一个独立的例子,

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

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多