我已经找了一整天,找到了很多解决方案,但不能应用于我的问题,所以我现在绝望地问你们。我只是想要一个界面,你可以移动滑块,这将改变相应的情节。我已经做了,但问题是,整个图被重新绘制,这需要时间,是丑陋的。我只是想更新情节本身,但与轴等背景.应该保持不变我希望有人能帮助我。我的代码相当混乱,因为我试图实现各种解决方案,但如果你运行它,你就会明白我的想法和问题。
我读过使用blitting,但我只是不能将其应用于FigureCanvasTkAgg,因为我希望它是交互式的,而不是一个正在进行的动画。我的主要问题是,我需要将人物和画布交付给FigurCanvasTkAgg,并且无法将其与背景的保存和恢复结合在一起。
import tkinter as tk
import numpy as np
import PySimpleGUI as sg
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib
import matplotlib.pyplot as plt
_VARS = {'window': False,
'fig_agg': False,
'pltFig': False}
layout = [[sg.Canvas(key='figCanvas')],
[sg.Button('Send message'), sg.Button('Bye!')],
[sg.Slider(range=(0, 3000), default_value=1000,
expand_x=True, enable_events=True,
orientation='horizontal', key='-SL-')]]
_VARS['window'] = sg.Window('Such Window',
layout,
finalize=True,
resizable=True,
location=(100, 100),
element_justification="right")
x = np.linspace(0, 2 * np.pi, 100)
fig, ax = plt.subplots()
plt.show(block=False)
plt.pause(0.1)
bg = fig.canvas.copy_from_bbox(fig.bbox)
ax.plot(x, x)
fig.canvas.blit(fig.bbox)
calib_frame = tk.LabelFrame(_VARS['window']['figCanvas'].TKCanvas, text='probe angle calibration', padx=5, pady=5)
calib_frame.grid(column=0, row=0, sticky='ns')
calib_canvas = FigureCanvasTkAgg(fig, master=calib_frame)
calib_canvas.draw()
calib_canvas.blit(fig.bbox)
calib_canvas.get_tk_widget().grid(column=0, row=0)
def updateChart(Mon_Rueck):
fig.canvas.restore_region(bg)
fig.canvas.blit(fig.bbox)
calib_canvas = FigureCanvasTkAgg(fig, master=calib_frame)
ax.clear()
ax.plot(x, np.sin(Mon_Rueck*x))
calib_canvas.draw()
calib_canvas.get_tk_widget().grid(column=0, row=0)
while True:
event, values = _VARS['window'].read()
if event == sg.WIN_CLOSED or event == 'Bye!':
break
if event == '-SL-':
response = 'Monatliche Rücklagen: ' + str(values['-SL-'])
updateChart(values['-SL-'])
_VARS['window'].close()
字符串
1条答案
按热度按时间mum43rcc1#
我可能已经搞砸了轴值的变化,但它的平滑。问题,我能说的最好的,只发生在滑块被按住的时候。
我所做的更改是注解掉
updateChart
的前两行,这样它就不会进行恢复和blit。字符串
的数据