簡體   English   中英

如何更新 canvas 中的圖形?

[英]How to update graph in canvas?

我正在制作一個 GUI,它正在可視化來自 a 的 json 數據。 我目前遇到的問題是我無法在 canvas 中更新圖表,它僅在我按下最大/最小按鈕時更新: 在此處輸入圖像描述 . 當我按下一個新文件時,有沒有辦法更新圖形? 圖形用戶界面的圖片: 在此處輸入圖像描述

繪制圖表的部分代碼:

##### Canvas ####
figure = plt.figure()
canvas = FigureCanvasTkAgg(figure, master=inspect_data)
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)


###### file gets selected #####


def items_selected(d):
    plt.clf()
    selected_indices = vores_listebox.curselection()
    selected_json = ",".join([vores_listebox.get(i) for i in selected_indices])
    full_file_path = path_us + selected_json
    open_json = js.load(open(full_file_path, "r"))
    time = [open_json['XML_Data']
            ['Wsk3Vectors']['X_Axis']['Values']['float']]
    rpm = [open_json['XML_Data']['Wsk3Vectors']
           ['Y_AxesList']['AxisData'][0]['Values']['float']]
    torque = [open_json['XML_Data']['Wsk3Vectors']
              ['Y_AxesList']['AxisData'][1]['Values']['float']]
    current = [open_json['XML_Data']['Wsk3Vectors']
               ['Y_AxesList']['AxisData'][2]['Values']['float']]
    angle = [open_json['XML_Data']['Wsk3Vectors']
             ['Y_AxesList']['AxisData'][3]['Values']['float']]
    depth = [open_json['XML_Data']['Wsk3Vectors']
             ['Y_AxesList']['AxisData'][4]['Values']['float']]


###### Using Matlib.pyplot to plot 5 graphs ######
    plt.rcParams["figure.figsize"] = (7, 10)

    plt.subplot(5, 1, 1)
    plt.scatter(time, rpm, c="b", linewidths=2,
                marker=",", edgecolor="b", s=1, alpha=0.5)
    plt.title(selected_json)
    plt.gca().axes.xaxis.set_ticklabels([])
    plt.ylabel("RPM")
    plt.grid()

    plt.subplot(5, 1, 2)
    plt.scatter(time, torque, c="g", linewidths=1,
                marker=",", edgecolor="g", s=1, alpha=0.3)
    plt.gca().axes.xaxis.set_ticklabels([])
    plt.ylabel("Torque [Nm]")
    plt.grid()

    plt.subplot(5, 1, 3)
    plt.scatter(time, current, c="r", linewidths=2,
                marker=",", edgecolor="r", s=1, alpha=0.5)
    plt.gca().axes.xaxis.set_ticklabels([])
    plt.ylabel("Current [Amps]")
    plt.grid()

    plt.subplot(5, 1, 4)
    plt.scatter(time, angle, c="m", linewidths=2,
                marker=",", edgecolor="m", s=1, alpha=0.5)
    plt.gca().axes.xaxis.set_ticklabels([])
    plt.ylabel("Angle [RAD]")
    plt.grid()

    plt.subplot(5, 1, 5)
    plt.scatter(time, depth, c="c", linewidths=2,
                marker=",", edgecolor="c", s=1, alpha=0.5)
    plt.xlabel("Time [ms]")
    plt.ylabel("Depth [mm]")
    plt.grid()


vores_listebox.bind('<<ListboxSelect>>', items_selected)

我嘗試了 root.update()、Canvas.update() 和許多其他命令,但沒有任何效果。 任何幫助表示贊賞!

您是否嘗試過調用canvas.draw_idle()canvas.draw()在哪里/何時要刷新 canvas 小部件?

def items_selected(d):
    plt.clf()
    selected_indices = vores_listebox.curselection()
    selected_json = ",".join([vores_listebox.get(i) for i in selected_indices])
    full_file_path = path_us + selected_json
    open_json = js.load(open(full_file_path, "r"))
    time = [open_json['XML_Data']
            ['Wsk3Vectors']['X_Axis']['Values']['float']]
    rpm = [open_json['XML_Data']['Wsk3Vectors']
           ['Y_AxesList']['AxisData'][0]['Values']['float']]
    torque = [open_json['XML_Data']['Wsk3Vectors']
              ['Y_AxesList']['AxisData'][1]['Values']['float']]
    current = [open_json['XML_Data']['Wsk3Vectors']
               ['Y_AxesList']['AxisData'][2]['Values']['float']]
    angle = [open_json['XML_Data']['Wsk3Vectors']
             ['Y_AxesList']['AxisData'][3]['Values']['float']]
    depth = [open_json['XML_Data']['Wsk3Vectors']
             ['Y_AxesList']['AxisData'][4]['Values']['float']]
    
    canvas.draw_idle()  # refresh the canvas with new data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM