Python Tkinter spinbox文本变量
我试图在Tkinter中创建一个简单的GUI来显示一些xy数据。数据在试验中排列,目标是有一个spinbox,允许您选择要查看的试验。我不明白为什么,但在下面的代码中,textvariable的值没有更新,因此我总是查看相同的试用版。有什么明显的东西我遗漏了吗?代码如下。Tk.IntVar在init中设置,与spinbox(最底层)关联,并在UpdateDataOpot中使用Python Tkinter spinbox文本变量,python,tkinter,Python,Tkinter,我试图在Tkinter中创建一个简单的GUI来显示一些xy数据。数据在试验中排列,目标是有一个spinbox,允许您选择要查看的试验。我不明白为什么,但在下面的代码中,textvariable的值没有更新,因此我总是查看相同的试用版。有什么明显的东西我遗漏了吗?代码如下。Tk.IntVar在init中设置,与spinbox(最底层)关联,并在UpdateDataOpot中使用 #graphing stuff import matplotlib matplotlib.use('TkAgg') fr
#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()
我在这里测试了tk.spinbox,它与您的布局完美匹配,只是检查了您的代码,您没有收到任何异常吗
#self.data = '/data/data', is this right?
#'/data/data'['polaris_rawPositions']
#also [:,0] using period, should use dots [:.0]
self.xRaw = self.data['polaris_rawPositions'][trialNum][:,0]
另外,对于调试端口,请尝试将一个打印放在那里,以便您可以检查该值
trialNum = self.TrialNum.get()
print(trialNum)
抱歉,如果我遗漏了什么,我真的从来没有接触过matplotlib模块。“/data/data”是消息/帖子的占位符。在我的电脑上,它是一本真正的字典,充满了numpy数组。我已经完成了打印(trialNum),它总是给我0(或者我设置变量初始值的任何值)。逗号对于numpy索引是正确的。嗯,这个例子看起来不错。你在哪个站台?