我已经为用户交互写了一个非常复杂的绘图工具。交互是通过fig.canvas.mpl_connect('key_press_event', on_key)
和fig.canvas.mpl_connect('pick_event', onpick)
如何让tkinter.Entry在与matplotlib'key_press_event'一起使用时保存注释?
处理,我想使用key_press_event
当用户按下“C”,它会提高一个tkinter.Entry
窗口为用户添加评论什么。
然后提取并存储此评论,并且用户继续前进。
tkinter.Entry
执行工作完全正常,单独工作。
所以我要在这里tkComment.py
:
import tkinter
from tkinter import Entry, StringVar
class tkComment(object):
def __init__(self):
root = self.root = tkinter.Tk()
tkinter.Button(root,text="save comment",command=root.destroy).pack(anchor=tkinter.S,side=tkinter.BOTTOM)
entryVar = self.entryVar = tkinter.StringVar()
entry = self.entry = Entry(master=root, width=60, textvariable=self.entryVar)
entry.pack(side=tkinter.TOP)
我使用IPython的方便测试(但是问题仍然存在IPython的之外)。我导入此tkComment
并有一些功能是测试
from __future__ import print_function
import matplotlib
matplotlib.use("TkAgg") #necessary for use with tkinter
from tkComment import tkComment
def runtkc():
global tkC
tkC = tkComment()
tkC.root.mainloop()
def print_comment():
global tkC
print('comment for this source:', tkC.entryVar.get())
from matplotlib import pyplot as plt
def on_key(event):
global tkC
if event.key == 'c':
runtkc()
if event.key == 'C':
print_comment()
def test_plot():
fig,ax = plt.subplots(1)
ax.plot(range(10))
keyID = fig.canvas.mpl_connect('key_press_event', on_key)
plt.show()
现在,问题:
,如果我只是叫runtkc()
然后print_comment()
一切工作完全正常。
如果我通过test_plot()
中的按键调用这些函数,则存储的字符串为空。即使从tkComment.tkComment
内打印!
我该如何让这些家伙合作?
如果您低估了我,请提供评论,告诉我如何改善此问题。我花了几天(甚至是晚上)在这方面工作,并且已经耗尽了我的编码能力。在SO或任何其他网站上都没有重复的问题,据我所知,这似乎是一个独特的问题。我也花了一些时间写作清理最低工作示例,以便于为SO进行简单的调试。 – FriskyGrub
这个例子并不是最小的。您不仅包含了美观的配置选项,而且还没有将代码修剪至受影响的区域。你需要给我们看似被打破的逻辑,某种输入和某种输出。 **没有**程序的其余部分是必要的,只要它可以运行。 –
@EthanField我真的认为这个例子很少。任何额外的代码都可以帮助我们理解问题,并显示课程本身按预期工作。这不应该泄气,因为每个想要帮助的人都需要自己写这些测试用例。也就是说,从找到一个变量*可以被存储并从类中读取的情况下,尝试找到一个最小*工作*例子当然是有意义的。这可以成为调试的一部分,最终可以看到工作与非工作之间的差异。 – ImportanceOfBeingErnest