首页 > 解决方案 > 为什么我不能在课堂上使用 matplotlib 和 tkinter

问题描述

我在同时使用 matplotlib 和 tkinter 时遇到问题。我正在尝试使用单选按钮创建一个 matplot 图形并将其嵌入到 tkinter 在 Internet 上的一些示例和文档之后,我创建了以下代码:

import random
import matplotlib
import tkinter as Tk
import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

matplotlib.use('TkAgg')

root = Tk.Tk()
root.wm_title("Embedding in TK")

class TKInterGUI():

    def __init__(self, master,fig):

        self.fig = fig
        self.master = master

    def test(self):
        canvas = FigureCanvasTkAgg(self.fig[0], self.master)
        canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
        ax = self.fig[0].add_axes([0.10, 0.7, 0.15, 0.15],facecolor='yellow')
        r = RadioButtons(ax, ('2 Hz', '4 Hz', '0 Hz'))

fig = []
fig.append(plt.Figure(figsize=(5,5), dpi=100))
my_gui = TKInterGUI(root,fig)
my_gui.test()
Tk.mainloop()

此代码按预期生成图形和单选按钮。但是单选按钮不起作用。他们变得完全没有反应。现在,如果我将单选按钮代码更改为主程序,如下面的代码,一切正常:

import random
import matplotlib
import tkinter as Tk
import matplotlib.pyplot as plt
from matplotlib.widgets import RadioButtons
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

matplotlib.use('TkAgg')

root = Tk.Tk()
root.wm_title("Embedding in TK")

class TKInterGUI():

    def __init__(self, master,fig):

        self.fig = fig
        self.master = master

    def test(self):
        canvas = FigureCanvasTkAgg(self.fig[0], self.master)
        canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

fig = []
fig.append(plt.Figure(figsize=(5,5), dpi=100))
my_gui = TKInterGUI(root,fig)
my_gui.test()
ax = fig[0].add_axes([0.10, 0.7, 0.15, 0.15],facecolor='yellow')
r = RadioButtons(ax, ('2 Hz', '4 Hz', '0 Hz'))

Tk.mainloop()

谁能解释为什么第一个代码不起作用,但第二个代码起作用?

标签: pythontkintermatplotlib-widget

解决方案


推荐阅读