Tkinter spinbox textvariable - PullRequest
       5

Tkinter spinbox textvariable

0 голосов
/ 15 февраля 2012

Я пытаюсь создать простой графический интерфейс в 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()

1 Ответ

0 голосов
/ 15 февраля 2012

Я протестировал здесь 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]

также для отладки porpuse попробуйте поставить один отпечаток там, чтобы выможно проверить значение

trialNum = self.TrialNum.get()
print(trialNum)

извините, если я что-то упустил, я действительно никогда не трогал модуль matplotlib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...