簡體   English   中英

將 Matplotlib 圖形和工具欄嵌入 PySimpleGUI 后進入平移模式

[英]Entering pan mode after embedding Matplotlib figure and toolbar into PySimpleGUI

鑒於圖形嵌入到 PySimpleGUI 中,有沒有辦法以編程方式進入 Matplotlib 的平移模式? 像這樣

我基本上是在尋找相當於

fig.canvas.manager.toolbar.pan()

(這似乎不適用於 PySimpleGUI,因為fig.canvas.manager在這種情況下為None )。

下面是使用工具欄將 Matplotlib 嵌入 PySimpleGUI 的簡單代碼:

import matplotlib.pyplot as plt
import PySimpleGUI as sg
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk



"""----------------------------- matplotlib stuff -----------------------------"""
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
x_data = np.linspace(-42, 42, 300)
ax.plot(x_data, np.sin(x_data))



"""----------------------------- PySimpleGUI stuff -----------------------------"""
window_layout = [
    [sg.Canvas(key="-CANVAS_TOOLBAR-")],
    [sg.Canvas(key="-CANVAS_FIG-")]
]

window = sg.Window('Window', window_layout, resizable=True, finalize=True)



"""--------------------- embedding matplotlib into the GUI ---------------------"""
class Toolbar(NavigationToolbar2Tk):
    def __init__(self, *args, **kwargs):
        super(Toolbar, self).__init__(*args, **kwargs)

def draw_figure_w_toolbar(canvas_fig, canvas_toolbar, figure):
    figure_canvas_agg = FigureCanvasTkAgg(figure, canvas_fig)
    toolbar = Toolbar(figure_canvas_agg, canvas_toolbar)
    figure_canvas_agg.draw()
    toolbar.update()
    figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=True)
    return figure_canvas_agg

fig_agg = draw_figure_w_toolbar(window['-CANVAS_FIG-'].TKCanvas, window['-CANVAS_TOOLBAR-'].TKCanvas, fig)
# print(type(fig_agg))
# print(type(fig.canvas))



"""-------------------------- reading the GUI window --------------------------"""
while True:
    event, values = window.read()
    print("event", event, "\nvalues", values)
    if event in (sg.WIN_CLOSED, "-ESCAPE-"):
        break

window.close()

我看過這個問題,但我想使用 Matplotlib 的工具欄。

即使這樣也不起作用,因為在我的情況下plt.get_current_fig_manager()返回None

從上面的代碼中打印type(fig_agg)時,我得到

<class 'matplotlib.backends.backend_tkagg.FigureCanvasTkAgg'>

這也是fig.canvas的類型。

順便說一句,我想到了一個技巧來做到這一點。 按鍵盤上的p通常會激活平移模式,因此以編程方式按下按鈕可以達到目的:但這將是 .nethical 作弊(:

我找到了問題的答案。 如果它對某人有幫助,解決方案很簡單

fig.canvas.toolbar.pan()

即我們從上面提到的原始呼叫中刪除manager

暫無
暫無

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

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