Я попытался добавить некоторые опции для встроенного сюжета matplotlib в tkinter. Стиль графика (то есть сплошная линия или пунктирная линия) изменяется правильно, а цвет - нет. Однако, изменяя размеры окна tkinter, цвет обновлялся. Связанная часть моего кода показана ниже:
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from tkinter.colorchooser import askcolor
import numpy as np
class Ploter:
DEFAULT_PEN_SIZE = 5.0
DEFAULT_COLOR = 'black'
DEFAULT_STYLE = '-'
def __init__(self, master, size = (5,4), dpi = 100):
self.master = master
self.size = size
self.dpi = dpi
self.color = self.DEFAULT_COLOR
self.style = self.DEFAULT_STYLE
self.fig = Figure(figsize = self.size, dpi=self.dpi)
self.canvas = FigureCanvasTkAgg(self.fig , master=self.master)
self.ax = self.fig.add_subplot(111)
self.t = np.arange(0, 3, 0.01)
self.tf = 2 * np.sin(2 * np.pi * self.t)
def PlotWidgets(self):
toolbar = NavigationToolbar2TkAgg(self.canvas, self.master)
toolbar.update()
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
list1 = ["Solid", "Dashed", "Dash-dot", 'Dotted']
self.line_style = tk.StringVar()
self.line_style.set('Line Style')
self.line_style.trace("w", self.choose_style)
droplist = tk.OptionMenu(self.master, self.line_style, *list1)
droplist.config(width=10)
droplist.pack(side = tk.LEFT , padx = 10 , pady = 10)
color_button = tk.Button(master = self.master, text='color',
command = self.choose_color)
color_button.pack(side = tk.LEFT , padx = 10 , pady = 10)
self.ploter()
def ploter(self):
self.ax.clear()
style = self.style
self.ax.plot(self.t, self.tf, style , color = self.color)
self.canvas.draw()
def choose_color(self):
style = self.style
self.color = askcolor(color=self.color)[1]
self.ax.plot(self.t, self.tf, style , color = self.color)
#self.canvas.draw()
def choose_style(self, * args):
if self.line_style.get() == "Solid":
self.style = '-'
self.ploter()
if self.line_style.get() == "Dashed":
self.style = '--'
self.ploter()
if self.line_style.get() == "Dash-dot":
self.style = '-.'
self.ploter()
if self.line_style.get() == "Dotted":
self.style = ':'
self.ploter()
root = tk.Tk()
root.wm_title("Embedding in tkinter")
pp = Ploter(root)
pp.PlotWidgets()
root.mainloop()
Я попытался перезагрузить компьютер, использовать другую среду IDE или запустить скрипт из терминала, и ни один из них не помог исправить ситуацию.
ЭтоСтоит отметить, что я использую Linux Mint 19.2 (рабочий стол MATE, сервер отображения x11), Python 3.6.8, Matplotlib 2.1.1, Tkinter 8.6.