Arhn - архитектура программирования

Рисование области выделения мышью в Tkinter

Я разрабатываю приложение, которое принимает данные от пользователя в форме .csv и строит график для соответствующих значений, используя matplotlib.

def plotgraph():
    x = []
    y = []
    data = text.get("1.0", END)
    sepFile = data.split('\n')

    for plotPair in sepFile:
        xAndY = plotPair.split(',')
        if len(xAndY[0]) != 0 and len(xAndY[1]) != 0:
            x.append(float(xAndY[0]))
            y.append(float(xAndY[1]))

    graph = Figure(figsize=(5,4), dpi=100)
    a = graph.add_subplot(111)
    a.plot(x,y)
    a.set_xlabel('Velocity')
    a.set_ylabel('Absorbance')
    canvas = FigureCanvasTkAgg(graph, master=RightFrame)
    canvas.show()
    canvas.get_tk_widget().grid(column=2, row=1, rowspan=2, sticky=(N, S, E, W))

Мне нужна аналогичная функция, подобная этой Matplotlib: нарисуйте область выбора в форме прямоугольника с помощью мыши в Tkinter, что дает мне x0, x1, y0, y1 после выбора. Я мог бы заставить уже заданный вопрос работать и настроить его в соответствии со своими потребностями, но не знаю, что я делаю ошибку в __init__(self)

root = Tk()
class Annotate(object):
    def __init__(self):
        self.fig = mplfig.Figure(figsize=(1.5, 1.5))
        self.ax = self.fig.add_subplot(111)
        self.ax.plot([0,1,2,3,4],[0,8,9,5,3])        
        self.canvas = tkagg.FigureCanvasTkAgg(self.fig, master=root)
        self.x0 = None
        self.y0 = None
        self.x1 = None
        self.y1 = None
        self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press)
        self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release)
        self.ax.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)

Когда я запускаю этот код, я получаю пустое окно Tk. Может ли кто-нибудь сказать мне, что мне делать и в чем я ошибаюсь


  • Вы запускали это в консоли/терминале/cmd.exe? Возможно, было какое-то сообщение об ошибке. Если да, добавьте полное сообщение об ошибке. 14.07.2014
  • Вы запускали только эту часть кода с root=Tk() и class Annotate(object) ? Если да, то вы работаете только root=Tk() и вам нужно научиться использовать классы. 14.07.2014
  • Ваша ошибка: вы не создали объект, используя класс Annotate, поэтому python не может запускать код в __init__. 14.07.2014
  • @furas Я запускаю свой код в Spyder (у которого есть консоль). Я пытаюсь работать с вашими предложениями и посмотреть, получится ли что-то или нет. Спасибо за ваши предложения. 15.07.2014

Ответы:


1

Чтобы использовать класс, вам нужно в списке что-то вроде этого

class Annotate(object):
    def __init__(self):
        print "Annotate is runing"
        # rest of your code

root = Tk()
my_object = Annotate()

root.mainloop()

И, вероятно, вам потребуется больше работы с этим.

14.07.2014
  • Спасибо за Ваш ответ. Я не создавал никаких объектов. Теперь начальные и конечные координаты отображаются в консоли, но область выбора не отображается. Не могли бы вы взглянуть на это stackoverflow.com/q/24748589/1581133 15.07.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..