python tkinter填充选项菜单与功能列表

问题描述

我创建了一个tkinter GUI。

我已将功能def scrape绑定到按钮。 当我按下按钮时,硒将从不同的元素中获取数据并将其存储在不同的列表中。

在我的GUI中,我希望每个列表都有一个OptionMenu

问题是,列表是在我按下按钮后创建的。

当我想将OptionMenu添加到GUI并加载列表作为值时,我得到一个错误,没有变量“列表”。这是因为app.mainloop()开始时尚未创建列表。

这是我的抓取代码

def scrape():
    li_leagues = []
        print('Getting leagues...\n')
        #click the dropdown menue to open the folder
        league_dropdown_menu = driver.find_element_by_xpath('/html/body/main/section/section/div[2]/div/div[2]/div/div[1]/div[1]/div[7]/div')
        league_dropdown_menu.click()
        time.sleep(1)
        
        # scrap all text
        scrape_leagues = driver.find_elements_by_xpath("//li[@class='with-icon' and contains(text(),'')]")
        for league in scrape_leagues:
            export_league = league.text
            export_league = str(export_league)
            export_league = export_league.replace(',','')
            li_leagues.append(export_league)

这是我为OptionMenu做的尝试:

str_quality = StringVar()
str_quality.set(li_quality[0])

#Dropdown
d_quality = OptionMenu(app,str_quality,*li_quality)

我如何才能将OptionMenu添加到GUI中?

编辑:

调用li_quality = []之前,我将列表的名称作为空列表app.mainloop()添加到了代码中。

GUI现在正在使用OptionMenu加载。但是在我抓取数据后,它并没有得到更新。

解决方法

我不确定这是否是您想要的东西,但是我在互联网上找到了一些东西,并且我对其进行了一些修改,请看一下:

from tkinter import *

root = Tk()

def hey():
    lst = [1,2,3,4]
    m = a.children['menu']
    for val in lst:
        m.add_command(label=val,command=lambda v=sv,l=val:v.set(l))

sv = StringVar()
dummy = []
a = OptionMenu(root,sv,*dummy)
a.pack()

b = Button(root,text='Click me',command=hey)
b.pack()

root.mainloop()

此处,a最初设置为空列表,但是单击按钮后,将从列表中填充它。

Here is the link to the discussion

替代方法:

无论如何,我建议您稍后在接收到项目之后,在函数内部创建OptionMenu,或者使用其他能够执行此操作的小部件。我很确定ttk.Combobox也是有可能的。

下面介绍如何使用Combobox进行操作:

from tkinter import *
from tkinter import ttk

root = Tk()

def hey():
    lst = [1,4]
    a.config(value=lst)

dummy = []
a = ttk.Combobox(root,value=dummy,state='readonly')
a.pack()

b = Button(root,command=hey)
b.pack()

root.mainloop()

希望它可以帮助您获得一些想法,请让我知道是否有任何错误。

欢呼