- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 tkinter 应用程序,可以绘制大量数据,但我注意到当 Canvas 上有大量数据时,平移和缩放性能很差。
查看 tkagg_backend(如 this 和其他几个问题所建议的),函数和文档表明 Canvas 仅应在用户空闲时重新绘制。然而,根据当前和以前的经验, Canvas 始终在缩放/平移中更新(重绘)。因此,我正在研究所涉及的具体功能,并对此有疑问。
dynamic_update函数:
def dynamic_update(self):
'update drawing area only if idle'
# legacy method; new method is canvas.draw_idle
self.canvas.draw_idle()
canvas.draw_idle() 函数:
def draw_idle(self):
'update drawing area only if idle'
if self._idle is False:
return
self._idle = False
def idle_draw(*args):
try:
self.draw()
finally:
self._idle = True
self._idle_callback = self._tkcanvas.after_idle(idle_draw)
._idle
参数在后端初始化为 True
。这就是我陷入困境的地方,因为我无法理解 ._idle
如何链接到鼠标事件(我认为是这样,如果这是错误的,请纠正我)。
有趣的是, Canvas 的行为就像我所期望的那样,通过注释 self.canvas.draw_idle()
行(松开鼠标按钮后重新绘制),因此不会调用整个 draw_idle
函数。
因此,我的问题是_idle
是如何设置的,或者为什么当我不idle
时它会重绘我的整个 Canvas ?
最佳答案
当提到“空闲”时,并不是指用户或其鼠标事件,而是指 GUI 主循环。仅当主循环当前不忙时才应重绘 Canvas 。当然,这里 self._idle
仅指 GUI 的 matplotlib 部分,而 draw_idle
内部的这个结构应该做的是防止 Canvas 在绘制时被绘制。正在绘制。
平移或缩放时很容易发生这种情况。鼠标移动到新位置,导致重新绘制。当这次重绘发生时,鼠标已经进一步移动并导致下一次重绘。那时第一次重画可能尚未完成,因此它会排队。等等,以至于在某些时候 GUI 可能会变得无响应。为了防止这种情况发生,只有前一个绘制完成后才会初始化新的绘制,并且此行为由 self._idle
为 true 或 false 来控制。
关于python - Matplotlib tkagg 后端性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416336/
我需要使用 Tkagg backent 在 Tkinter 程序中使用 matplotlib,并且收到“ImportError: No module named backend_tkagg”错误消息。
我有一个 tkinter 应用程序,可以绘制大量数据,但我注意到当 Canvas 上有大量数据时,平移和缩放性能很差。 查看 tkagg_backend(如 this 和其他几个问题所建议的),函数和
尝试在 Linux 上使用 Matplotlib,但我不断收到此错误: ImportError: Cannot load backend 'TkAgg' which requires the 'tk'
在 Ubuntu 20.04 上的 Jupyter 中运行以下代码时: import matplotlib try: matplotlib.use("TkAgg") import ma
当我尝试使用 TkAgg 后端进行绘图时,我的计算机将我注销(“崩溃”)(请参见下面的示例)。我正在使用 mojave 10.14.6 和 python 3.7.3。 from sys import
我在运行 Matplotlib 时一直遇到问题与 tkinter。这种情况发生在我的代码和其他人身上,包括我从网上下载的示例代码,这些代码可能适用于其他人。 来自 matplotlib.use('Tk
有谁知道如何更改 backend的PyPlot来自"TkAgg"至Qt5Agg在 Julia ? 当我尝试 Using PyPlot 时收到此警告在 Julia : julia> using PyPl
我在 Ubuntu 16.04 上使用 Matplotlib 2.0 和 Python 3.6 来创建数据图。计算机显示器的分辨率为 4k,分辨率为 3840x2160。情节数字看起来非常小,字体很小
脚本在 for 循环中运行,每次迭代调用 plt.plot() 并在循环调用 plt.show() 之后 - 并崩溃(屏幕卡住并需要强制重启)。崩溃之前或之后都不会显示任何错误消息。 IMO,这不是内
这可能只是一个一般的 Python Tkinter 问题,不一定是 matplotlib 问题。 因此,我正在使用 Matplotlib“TkAgg”后端(使用 TkInter 将 Agg 渲染到 T
我的 matplotlib 代码在 Azure DevOps 的 ubuntu VM 中失败;而相同的代码适用于 Azure Windows VM 和我自己的 ubuntu VM。这个简化的 Azur
我对嵌入式 Python 2.7.2 解释器 的问题感到困惑。我已将解释器嵌入到 Visual C++ 2010 应用程序中,它实际上只是调用用户编写的脚本。 我的最终用户想使用 matplotlib
我是一名优秀的程序员,十分优秀!