首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当与Tkinter一起使用时不会生成mplcur子。我做错了什么?

当与Tkinter一起使用时不会生成mplcur子。我做错了什么?
EN

Stack Overflow用户
提问于 2019-04-16 12:04:22
回答 1查看 1.3K关注 0票数 0

在tkinter中嵌入时,我无法使用mplcursors将游标添加到绘图中。鼠标单击似乎没有注册。然而,变焦,潘功能工作良好。我遗漏了什么?

我使用Anaconda Python 3.7.3、matplotlib 3.0.3和mplcursors库。https://mplcursors.readthedocs.io/en/stable/#

我可以复制简单的例子,没有tkinter和添加交互式游标的需要。我还可以在tkinter应用程序中嵌入matplotlib图。然而,当两者结合在一起时--即使显示的是没有错误的图形,交互游标也不能工作。

代码语言:javascript
复制
import tkinter

from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.backend_bases import key_press_handler
import matplotlib.pyplot as plt

import numpy as np
import mplcursors


root = tkinter.Tk()
root.wm_title("Embedding in Tk")


t = np.arange(0, 3, .01)

fig, ax = plt.subplots(1, 1)
line = ax.plot(t, 2 * np.sin(2 * np.pi * t))

mplcursors.cursor(line)

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)


def on_key_press(event):
    print("you pressed {}".format(event.key))
    key_press_handler(event, canvas, toolbar)


canvas.mpl_connect("key_press_event", on_key_press)


def _quit():
    root.quit()
    root.destroy()  

button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)

tkinter.mainloop()

我应该能够添加和操作游标,比如在没有tkinter的情况下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 13:28:40

两个问题:

  1. 在GUI中嵌入matplotlib时,不应该使用pyplot。请参考嵌入tk示例
  2. mplcursors需要使用图形画布。因此,它只能在画布定义之后才能使用。因此,代码线需要在定义FigureCanvasTkAgg之后出现。

完整代码:

代码语言:javascript
复制
import tkinter

from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
# Implement the default Matplotlib key bindings.
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure

import numpy as np
import mplcursors


root = tkinter.Tk()
root.wm_title("Embedding in Tk")


t = np.arange(0, 3, .01)

fig = Figure()
ax = fig.add_subplot(111)
line = ax.plot(t, 2 * np.sin(2 * np.pi * t))

canvas = FigureCanvasTkAgg(fig, master=root)

mplcursors.cursor(line)

canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)


def on_key_press(event):
    print("you pressed {}".format(event.key))
    key_press_handler(event, canvas, toolbar)


canvas.mpl_connect("key_press_event", on_key_press)


def _quit():
    root.quit()
    root.destroy()  

button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)

tkinter.mainloop()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55707731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档