我正在尝试创建一个tkinter gui,它可以根据这个下拉列表输出一个图表。这涉及到使用optionmenu,在这里我选择一个输入 Dataframe 。在选择 Dataframe 之后,我将它运行到一个名为function的函数中,该函数创建一个输出图表。
但是,输出图表与optionmenu下拉列表不在同一帧中输出。相反,它会为图表创建一个单独的窗口。此外,再次选择另一个下拉选项时,会创建更多窗口。
我不希望输出图表位于不同的窗口/框架上,而是希望它与选项菜单位于同一窗口上,并在每次选择其他下拉选项时替换输出图表。因此,在窗口中最多只能显示1个图表。
from tkinter import *
import plotly.graph_objects as go
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
import datetime
from plotly.subplots import make_subplots
# plotly.offline.init_notebook_mode(connected=True)
import pandas as pd
import numpy as np
import matplotlib as mpl # optional (here)
import matplotlib.pyplot as plt
import seaborn as sns # Optional, will only affect the color of bars and the grid
from ipywidgets import widgets, interactive
import tkinter
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
# Implement the default Matplotlib key bindings.
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import numpy as np
import os
files = os.listdir(path)
files
root = Tk()
oc = StringVar(root)
oc.set("Select")
def function(x):
root = tkinter.Tk()
inp = x
new_total = pd.read_csv(path+inp,index_col=None,parse_dates=['Dates'])
new_average = new_total.groupby(
['Dates']
)['Price'].median().reset_index(name='Daily Average Price')
new_average['Volume'] = new_total['Dates'].value_counts().sort_index(ascending=True).to_list()
############# Get line of best fit
from scipy import stats
xi = np.arange(0,len(new_average['Dates']))
y = new_average['Daily Average Price']
slope, intercept, r_value, p_value, std_err = stats.linregress(xi,y)
line = slope*xi+intercept
plt.clf()
#fig = Figure(figsize=(9, 5), dpi=100)
#fig.add_subplot(111).plot(new_average['Dates'], new_average['Daily Average Price'],'-o')
#fig.add_subplot(111).plot(new_average['Dates'], new_average['Volume'])
fig = plt.figure(1, figsize=(15,7),dpi=100)
fig.suptitle(x+' Price', fontsize=20)
barchart = plt.bar(new_average['Dates'], new_average['Volume'], color='lightgreen')
plt.twinx()
linechart = plt.plot(new_average['Dates'], new_average['Daily Average Price'], color='royalblue',label='Sum')
linechart = plt.plot(new_average['Dates'], line, color='orangered',label='Sum')
canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
def on_key_press(event):
print("you pressed {}".format(event.key))
key_press_handler(event, canvas, toolbar)
canvas.mpl_connect("key_press_event", on_key_press)
def _quit():
root.quit() # stops mainloop
root.destroy() # this is necessary on Windows to prevent
# Fatal Python Error: PyEval_RestoreThread: NULL tstate
button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)
o = OptionMenu(root, oc, *files, command=function)
o.pack()
root.mainloop()
暂无答案!
目前还没有任何答案,快来回答吧!