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

时间:2019-07-15 01:34:55

标签: python python-3.x matplotlib tkinter

我正在尝试使用matplotlib实现tkinter复选按钮,以更新绘图并仅显示所选绘图。

但是,复选按钮不会更改变量。

我尝试了不同版本的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

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

请随时将我指向在线资源。

1 个答案:

答案 0 :(得分:1)

您需要使用matplotlib.Figure而不是pyplot.figure
您也有两个具有相同名称的按钮,但这不是问题。

以下代码将matplotlib.Figuresubplottoolbar嵌入到具有tkinter.window和{{1 }}。我删除了令我烦恼的check_button,但您可以放回去,代码没有错。

quit_button