Python tkinter选项菜单未更改值

Python tkinter选项菜单未更改值,python,tkinter,Python,Tkinter,我正在创建一个程序来绘制不同产品的产品销售量值。但是,当我运行该程序时,它会自动打印选项菜单的默认值,当我更改该值并按ShowtheGraph时,它不会检索新值,因此不会更新图形 global aggregateMonthly aggregateSalesMonthly = cur.execute("""select SUM(HotDrink), SUM (ColdDrink), SUM(Cake), SUM(Smoothie), SUM(DecafDrink), strftime("%m-%Y

我正在创建一个程序来绘制不同产品的产品销售量值。但是,当我运行该程序时,它会自动打印选项菜单的默认值,当我更改该值并按ShowtheGraph时,它不会检索新值,因此不会更新图形

global aggregateMonthly
aggregateSalesMonthly = cur.execute("""select SUM(HotDrink), SUM (ColdDrink),
SUM(Cake), SUM(Smoothie), SUM(DecafDrink),
strftime("%m-%Y", Date) as 'month-year' 
from TotalDaySales group by strftime("%m-%Y", Date);""").fetchall()

root = tkinter.Tk()
root.wm_title("Analytics")



def plotter(title, index1):
    valueArray = []
    valueArray2 = []
    for values in aggregateSalesMonthly:
        valueArray2.append(values[-1])
        valueArray.append(values[index1])
        print(values[index1])
    #print(valueArray)    


    plt.title(title)
    plt.xlabel('Months')
    plt.ylabel('Sales Volume')
    plt.xticks(rotation=30)
    f = Figure()
    f.add_subplot().plot(valueArray2, valueArray)

    canvas = FigureCanvasTkAgg(f, master=root)  # A tk.DrawingArea.
    canvas.draw()
    canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)


d = {
    'Hot Drinks': (plotter, ('Hot Drinks', 0)),
    'Cold Drinks': (plotter, ('Cold Drinks', 1)),
    'Cake': (plotter, ('Cake', 2)),
    'Smoothie': (plotter, ('Smoothie', 3)),
    'DecafDrink': (plotter, ('DecafDrink', 4)),
    }

def showGraph(value):
    foo, args = d[(value)]
    foo(*args)


cats1 = StringVar(root)
cats1.set("Hot Drinks") # default value
catgeory = OptionMenu(root, cats1, "Total", "Hot Drinks", "Cold Drinks", "Food", 
"None")
catgeory.pack(side=LEFT)
variableGetter = cats1.get()

button = tkinter.Button(root, text="Show Graph")
button.bind("<Button-1>", print(cats1.get()))
button.pack(side=LEFT)


root.mainloop()

当程序启动时,只能查询数据库一次。如果希望在每次更改值时提取最新数据,则数据库查询需要位于更改值时调用的函数内。我理解您的逻辑。你愿意提供一个范例吗?Regards@TheDestroyer:Read,这也适用于这是为了测试新的更新值-这不起作用。我没有使用printcats1.get,而是使用showGraphcats1.get,但它仍然不起作用。我希望它只在单击时执行。您不能在绑定中使用showGraphcats1.get,原因是@stovfl指向。