![](/img/trans.png)
[英]Embedding a figure plotted with user input, in a Python 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.