Python 如何使tkinter与matplotlib checkbutton集成以更改变量?

Python 如何使tkinter与matplotlib checkbutton集成以更改变量?,python,python-3.x,matplotlib,tkinter,Python,Python 3.x,Matplotlib,Tkinter,我试图用matplotlib实现tkinter检查按钮,以便更新绘图并仅显示选定的绘图 但是,check按钮不会更改变量 我尝试了不同版本的python,并将大部分代码剥离为简单的tkinter和matplotlib集成,但没有任何运气 # coding: utf-8 # usr/bin/python37 from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk from tkin

我试图用matplotlib实现tkinter检查按钮,以便更新绘图并仅显示选定的绘图

但是,check按钮不会更改变量

我尝试了不同版本的python,并将大部分代码剥离为简单的tkinter和matplotlib集成,但没有任何运气

# coding: utf-8
# usr/bin/python37

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from tkinter import messagebox, Button, Tk, BooleanVar
from tkinter.ttk import Checkbutton
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')


class GUI:
    fig = plt.figure()
    sub = fig.add_subplot(1, 1, 1)

    def __init__(self, root):
        self.root = root
        self.root.title("Testing")
        self.setupTk()

    def setupTk(self):
        self.canvas = FigureCanvasTkAgg(self.fig, master=self.root)
        self.canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
        self.canvas._tkcanvas.pack(side='top', fill='both', expand=1)
        '''
        Problem
        '''
        self.var = BooleanVar()
        self.var.set(True)
        self.button = Checkbutton(
            self.root, variable=self.var, text='Direvative', command=self.cb)
        self.button.pack(side='left')
        '''
        /Problem
        '''
        self.button = Button(master=self.root, text='Quit', command=self._quit)
        self.button.pack(side='right')

        self.toolbar = NavigationToolbar2Tk(self.canvas, self.root)
        self.toolbar.update()

        self.root.protocol("WM_DELETE_WINDOW", self._quit)

    def cb(self):
        print(self.var.get())

    def _quit(self):
        if messagebox.askquestion('Exit Application', 'Are you sure you want to exit the application', icon='warning') == 'yes':
            self.root.quit()
            self.root.destroy()


if __name__ == '__main__':
    root = Tk()
    mod = GUI(root)
    root.mainloop()
我正在使用:
Python:3.7.3
Matplotlib:3.1.1

我希望打印输出会随着用户单击“检查”按钮而改变


请随时为我指点在线资源。

您需要使用
matplotlib.Figure
而不是
pyplot.Figure

您还有两个同名按钮,但这不是问题所在

下面的代码将一个
matplotlib.Figure
嵌入到一个
tkinter.window
中,该窗口有一个
检查按钮
和一个
退出按钮
。我删除了我觉得恼人的
消息框
,但是你可以把它放回去,代码没有问题

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from tkinter import messagebox, Button, Tk, BooleanVar
from tkinter.ttk import Checkbutton
from matplotlib.figure import Figure
import matplotlib
matplotlib.use('TkAgg')


class GUI:

    fig = Figure()
    sub = fig.add_subplot(1, 1, 1)

    def __init__(self, root):
        self.root = root
        self.root.title("Testing")
        self.setupTk()

    def setupTk(self):

        self.var = BooleanVar()
        self.var.set(True)
        self.check_button = Checkbutton(
            self.root, variable=self.var, text='Direvative', command=self.cb)
        self.check_button.pack(side='left')

        self.quit_button = Button(master=self.root, text='Quit', command=self._quit)
        self.quit_button.pack(side='right')

        self.canvas = FigureCanvasTkAgg(self.fig, master=self.root)
        self.canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
        self.canvas._tkcanvas.pack(side='top', fill='both', expand=1)

        self.toolbar = NavigationToolbar2Tk(self.canvas, self.root)
        self.toolbar.update()

        self.root.protocol("WM_DELETE_WINDOW", self._quit)

    def cb(self):
        print(self.var.get())

    def _quit(self):
        self.root.destroy()


if __name__ == '__main__':
    root = Tk()
    mod = GUI(root)
    root.mainloop()

您缺少matplotlib导入,但它可以工作,谢谢!不客气。啊,是的,使用jupyter笔记本电脑的怪癖是导入和变量的持久性-很抱歉。我编辑了代码。一直想知道为什么
Figure
plt.Figure
更受欢迎+1用于展示:)是@HenryYik,谢谢,给出了简短的答案-较长的答案@HenryYik一般来说,
plt.figure()
没有问题。这里的关键是要将图形嵌入到tkinter中。在这种情况下,您不希望图形由pyplot管理,因为您希望通过正在使用的GUI工具包自己管理图形。