Как связать несколько строк, чтобы при выборе одной из них выбрать события? - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть график на FigureCanvasTkAgg, и я хочу использовать кнопку с именем «Retracement» для создания нескольких линий. Как связать несколько строк как один объект, чтобы при нажатии кнопки «Ластик» и выборе одной строки с помощью «событий выбора» все строки выбирались и удалялись вместе?

До сих пор, когда я использую кнопку «Ластик», я могу выбрать отдельные строки для удаления, но это не соответствует моей цели Before using eraser button Deleting only one line after using 'Eraser'

'' '

import tkinter as tk
from tkinter import ttk
import matplotlib
import numpy as np
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.backend_bases import MouseEvent
from matplotlib.figure import Figure
from matplotlib import style
from matplotlib import pyplot as plt



class XYZapp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)  # initialising tkinter within the class

        frame = ttk.LabelFrame(self)
        frame.pack(side=tk.TOP,fill=tk.BOTH, expand=True)

        f = Figure(figsize=(5,5), dpi=100)
        ax = f.add_subplot(111)

        x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]           # assume this is change in time which is constant
        y = [10, 14, 13, 12, 15, 18, 16, 20, 24, 21]  # assume this is price 


        self.canvas = FigureCanvasTkAgg(f, self)
        self.canvas.draw()
        self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
        ax.plot(x,y,color = 'r')
        self.canvas.draw()

        ly = []
        lx = []

        def callback_fr(event):
            if len(ly) < 2:
                ly.append(event.ydata)
                lx.append(event.xdata)
                print(ly)
            else :
                self.canvas.mpl_disconnect(cid)
                print('mpl disconnected')
                y1 = ly[0]
                y2 = ly[1]
                x_min = lx[0]
                x_max = lx[1]


                diff = y2-y1
                fib_r = {0:'r', 0.238:'g', 0.382:'b', 0.5:'y', 0.618:'k', 1:'c'}
                for k, v in fib_r.items():
                    fib = y2 - k*diff
                    ax.hlines(fib,x_min,x_max,linestyle = 'dashed', lw = 1, label='1',picker = True )
                    ax.annotate(str(k),xy=(x_max,fib))
                    self.canvas.draw()

        def onclick_fr():
            ly.clear()
            lx.clear()
            global cid
            cid = self.canvas.mpl_connect('button_press_event',callback_fr)

        def eraser2(event):
            thisline = event.artist
            thisline.remove()
            self.canvas.draw()

        def eraser():
            global cid4
            cid4 = self.canvas.mpl_connect('pick_event',eraser2)

        button1 = ttk.Button(frame, text = 'Retracement', command=onclick_fr)
        button1.grid(row=0, column=0)

        button2 = ttk.Button(frame, text='eraser', command=eraser)
        button2.grid(row=1, column=0)



        # Navigation toolbar
        self.toolbar = NavigationToolbar2Tk(self.canvas, self)
        self.toolbar.update()
        self.canvas._tkcanvas.pack(side=tk.TOP,fill=tk.BOTH, expand=True)

app = XYZapp()
app.geometry('1280x720')
app.mainloop() 

' ''

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