我正在构建一个数据显示GUI,使用的是Tkinter(这里去掉了)。其目标是使用Tkinter缩放滑块在Pandas数据帧中选择列并在列之间移动,并将选定的数据列显示为嵌入式MatplotLib图表。 然而,我在绑定缩放滑块到熊猫数据帧列和图表显示的选择时遇到了很大的麻烦。 对于来自Tkinter Scale(S1)的事件,被调用的函数(fromScale)应该更新类变量(displayField),然后更新字符串(dField),它是Pandas数据帧(dar_MAST)中的列索引,以便在嵌入的图表中显示。 在我发疯之前,任何重新定义绑定以允许缩放滑块移动以允许“滚动”显示的数据帧数据列的任何帮助都将是非常感谢的… (使用python3.6.5,PyCharm) 提前谢谢
尝试过许多Tkinter“绑定”、命令函数、全局变量与类变量的配置,但都不起作用。已在此处使用类变量解决,但仍无法更新图表显示
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import tkinter as tk
from tkinter import *
from tkinter import ttk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
class dar(Frame):
displayField = 0 # Class variable to identify the column in the dataframe to display
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
container = Frame(self)
container.pack(side='top', fill='both', expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
def init_window(self):
self.master.title('dar_FN')
content = ttk.Frame(root, padding=(3, 3, 3, 3))
dField = 'Fld_' + str(dar.displayField) # Column index for dataframe display
datas = np.random.uniform(size=(100, 10)) # Dummy random dataset
dar_MAST = pd.DataFrame(datas, columns=['Fld_0', 'Fld_1', 'Fld_2', 'Fld_3', 'Fld_4', 'Fld_5', 'Fld_6', 'Fld_7',
'Fld_8', 'Fld_9'])
frame6 = ttk.Notebook(content, width=465, height=150) # Frame containing Scale Slider
frame6_tab1 = ttk.Frame(frame6)
frame6.add(frame6_tab1, text='tp Selection')
frame6_tab1_canvas = tk.Canvas(frame6_tab1, width=464, height=145) # creates MAX canvas in tab
frame6.grid_rowconfigure(0, weight=1)
frame6.grid_columnconfigure(0, weight=1)
frame6_tab1_canvas.grid(column=20, row=60)
S1 = Scale(frame6_tab1_canvas, from_=0, to=9, orient=HORIZONTAL, length=360, # THE SCALE SLIDER
highlightcolor='lightblue', tickinterval=100, command=self.fromScale)
S1.grid(row=1, column=1, columnspan=10)
self.update_idletasks()
frame1a = ttk.Notebook(content, width=480, height=750) # Frame containing data display
frame1a_tab1 = ttk.Frame(frame1a)
frame1a.add(frame1a_tab1, text='1a')
frame1a_tab1_canvas = tk.Canvas(frame1a_tab1, width=470, height=745)
frame1a_tab1_canvas.grid(column=0, row=20, sticky='nsew')
frame1a_tab1_chart = plt.figure(figsize=(4.55, 7.46), dpi=100)
f1at1 = plt.subplot2grid((20, 25), (0, 0), rowspan=20, colspan=25)
f1at1.grid(True)
f1at1.set_ylim(0, 100, auto=False)
f1at1.plot(dar_MAST[dField], dar_MAST[dField].index, linewidth=1, label=dField)
f1at1.legend()
canvas_f1at1 = FigureCanvasTkAgg(frame1a_tab1_chart, frame1a_tab1_canvas)
canvas_f1at1.draw()
canvas_f1at1.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
content.grid(column=0, row=0, sticky=(N, S, E, W))
frame1a.grid(column=0, row=0, columnspan=3, rowspan=1, sticky=(N, S, E, W))
frame6.grid(column=0, row=1, columnspan=3, rowspan=1, sticky=(N, S, E, W))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
def fromScale(self, val): # Function to update Class displayField value from Scale Slider event
dar.displayField = int(val) # Update Class variable displayField
root = Tk()
app = dar(root)
app.mainloop()
刻度滑块的每次移动都应将显示的数据图表更改为darđMAST数据帧中的下一列或相关数据列,但只显示第一列数据,即:无绑定?在
目前没有回答
相关问题 更多 >
编程相关推荐