У меня есть несколько переключателей для выбора цвета и ширины строки во встроенном графике. Я не могу очистить график, когда выбираю новый цвет или ширину, и новый график размещается под исходным графиком. Я, вероятно, усложнил ситуацию, используя tkinter, matplotlib и shapely. Мне удалось разрушить все окно и восстановить его, но оно показалось мне довольно неуклюжим. Как удалить старый график или фигуру, чтобы обновить цвет и ширину?
Я попробовал plt.clf() в методе Selection, и он вообще не удалился. Я также попытался поместить plt.clf() в конец исходного графика. При этом график был удален, но новый график все равно остался под пустой фигурой.
from tkinter import *
import tkinter as tk
import matplotlib.pyplot as plt
from shapely.geometry import LineString
from shapely.plotting import plot_line, plot_points
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg,NavigationToolbar2Tk)
root =tk.Tk()
root.title("DATA")
topFrame=tk.Frame(root)
bottomFrame=tk.Frame(root)
topFrame.pack(side='top')
bottomFrame.pack(side='bottom')
#Method and call to create initial plot
def CreatePlot(lineColour,lineWidth):
width = lineWidth
colour = "#"+ lineColour
peekFigure = Figure(figsize=(6, 4), dpi=100)
fig = plt.figure (dpi = 90,clear=True)
print("fig num: ", peekFigure)
ax = fig.add_subplot (111)
sample = LineString([(1.0,1.0), (2.0,2.0)])
plot_line(sample, ax=ax, add_points=False, alpha=0.7, color = colour,linewidth = lineWidth)
axes = plt.gca()
axes.set_aspect('equal')
plt.axis('off')
canvas = FigureCanvasTkAgg(fig, master = root)
canvas.draw()
canvas.get_tk_widget().pack()
width = 5
colour = 'ff0000'
CreatePlot(colour,width)
#plt.clf()
#Method for change in radiobutton selection
def Selection():
plt.clf()
CreatePlot(cVar.get(),wVar.get())
#Create buttons and labels
buttonExit =Button (bottomFrame, text = "Exit",command = root.destroy,width = 20)
buttonExit.pack()
labelColour = tk.Label(topFrame, text=" Colour")
labelColour.grid(row=0, column=1, sticky = 'w',padx=3, pady=2)
label3 = tk.Label(topFrame, text="Line Width")
label3.grid(row = 0, column = 2,padx=3, pady=2)
#Create radio buttons for line colour
colours = [{"colour":'red',"value":'ff0000'},{"colour":'blue',"value":"0000ff"},\
{"colour": 'amber',"value":'ffa500'},{"colour":'magenta',"value":'ff00ff'}]
cVar = tk.StringVar()
rowNo=0
radC={}
for c in colours:
columnNo = 1
rowNo=rowNo+1
radC[f'{rowNo}']= tk.Radiobutton(topFrame,text=(c["colour"]),value=(c["value"]),\
variable=cVar,command = Selection)
radC[f'{rowNo}'].grid(row = rowNo, column = columnNo,sticky='w',padx=3, pady=2)
if rowNo==1:
radC[f'{rowNo}'].select()
# Create radio buttons for line widths
widths = ["5", "10", "20","30"]
wVar = tk.IntVar()
rowNo=0
WBoxList = []
radW={}
for width in widths:
columnNo = 2
rowNo=rowNo+1
radW[f'{rowNo}']= tk.Radiobutton(topFrame,text=(width),value=(width),\
variable=wVar,command = Selection)
radW[f'{rowNo}'].grid(row = rowNo, column = columnNo,sticky='w',padx=3, pady=2)
if rowNo == 1:
radW[f'{rowNo}'].select()
root.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-new-one
Очистка подзаголовка для обновления новым ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение