Я пытаюсь создать простой графический интерфейс в Tkinter для отображения некоторых данных xy.Данные располагаются в виде проб, и цель состоит в том, чтобы иметь спин-бокс, который позволяет вам выбрать, какую пробу просматривать.Я не понимаю, почему, но в приведенном ниже коде значение textvariable не обновляется, и поэтому я всегда заканчиваю просмотр одной и той же пробной версии.Есть ли что-то очевидное, чего мне не хватает?Код следует.Tk.IntVar устанавливается в init , связывается со спинбоксом (в самом низу) и используется в updateDataToPlot.
#graphing stuff
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from matplotlib.lines import Line2D
import Tkinter as Tk
import numpy as np
import matplotlib.pyplot as plt
from scipy import randn
from collections import defaultdict
class DataPlotter:
def __init__(self, ax, data):
self.ax = ax
self.canvas = ax.figure.canvas
self.data = data
self.xRaw = []
self.yRaw = []
self.lineRaw = Line2D(self.xRaw, self.yRaw, animated=True, marker = None, color = 'black')
self.ax.add_line(self.lineRaw)
self.background = None
self.canvas.mpl_connect('draw_event', self.updateBackground)
self.ax.set_ylim(-3,3)
self.ax.set_xlim(-3,3)
self.ax.set_xlabel('X Pos (mm)')
self.ax.set_ylabel('Y Pos (mm)')
self.TrialNum = Tk.IntVar()
self.TrialNum.set(0)
def updateBackground(self, event):
self.background = self.canvas.copy_from_bbox(self.ax.bbox)
def updateDataToPlot(self):
trialNum = self.TrialNum.get()
print trialNum
self.xRaw = self.data['polaris_rawPositions'][trialNum][:,0]
self.yRaw = self.data['polaris_rawPositions'][trialNum][:,1]
self.updateView()
def updateView(self):
if self.background is None: return True
self.ax.figure.canvas.draw()
self.canvas.restore_region(self.background)
self.lineRaw.set_data(self.xRaw, self.yRaw)
self.ax.draw_artist(self.lineRaw)
self.canvas.blit(self.ax.bbox)
data = defaultdict(list)
for i in range(100):
data['polaris_rawPositions'].append(randn(200,2))
root = Tk.Tk()
root.wm_title("Data Explorer")
f = Figure()
ax = f.add_subplot(111)
canvas = FigureCanvasTkAgg(f, master=root)
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
canvas.show()
Plotter = DataPlotter(ax, data)
spinbox = Tk.Spinbox(master=root, textvariable = Plotter.TrialNum, command = Plotter.updateDataToPlot, fg= 'black', from_ = 0, to = 100, increment = 1)
spinbox.pack(side=Tk.BOTTOM, anchor='e', padx = 5)
root.mainloop()