问题描述
我创建了一个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()
希望它可以帮助您获得一些想法,请让我知道是否有任何错误。
欢呼