【问题标题】:Push Buttons in Tkinter and MatplotlibTkinter 和 Matplotlib 中的按钮
【发布时间】:2020-12-20 22:11:40
【问题描述】:

我想通过按钮在 Tkinter 中生成 Matplotlib 图。该按钮应该启动数据收集例程(最终从串行端口),并且在收集过程完成后绘制数据。下面的代码经过简化,只包含一些虚拟数据。我的问题是按下“绘图”按钮时没有出现图表。

import tkinter
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg)
from matplotlib.figure import Figure

window = tkinter.Tk()

fig = Figure(figsize=(5, 4), dpi=100)
ax = fig.add_subplot(1, 1, 1)
canvas = FigureCanvasTkAgg(fig, master=window) 
canvas.draw()

def plotData(ax):
    xs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    ys = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    ax.clear()
    ax.plot(xs, ys)
   
CloseButton = tkinter.Button(master=window, text="Close", command=window.destroy)
PlotButton = tkinter.Button(master=window, text = "Plot", command = lambda: plotData(ax))
    
CloseButton.pack(side=tkinter.LEFT, padx = 10, pady = 10)
PlotButton.pack(side=tkinter.LEFT, padx = 10, pady = 10)

canvas.get_tk_widget().pack(side=tkinter.RIGHT, fill=tkinter.BOTH, expand=1)

tkinter.mainloop()

【问题讨论】:

    标签: python python-3.x matplotlib tkinter


    【解决方案1】:

    您需要在函数末尾添加canvas.draw()

    def plotData(ax):
        xs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        ys = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        ax.clear()
        ax.plot(xs, ys)
        canvas.draw()
    

    【讨论】:

    • 在这个帮助下,我还意识到 lambda 函数和传递 ax 作为参数并不是完成这项工作所必需的。
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2013-07-15
    • 2018-08-15
    • 2021-04-14
    • 2017-10-05
    相关资源
    最近更新 更多