我已經爲用戶交互寫了一個非常複雜的繪圖工具。交互是通過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