Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter spinbox文本变量_Python_Tkinter - Fatal编程技术网

Python Tkinter spinbox文本变量

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

我试图在Tkinter中创建一个简单的GUI来显示一些xy数据。数据在试验中排列,目标是有一个spinbox,允许您选择要查看的试验。我不明白为什么,但在下面的代码中,textvariable的值没有更新,因此我总是查看相同的试用版。有什么明显的东西我遗漏了吗?代码如下。Tk.IntVar在init中设置,与spinbox(最底层)关联,并在UpdateDataOpot中使用

#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索引是正确的。嗯,这个例子看起来不错。你在哪个站台?