【问题标题】:tkinter combobox gets full focus and figure connection is losttkinter 组合框获得全部焦点并且图形连接丢失
【发布时间】:2020-11-29 00:46:05
【问题描述】:

您好,当我将 fig.canvas.mpl_connecttkinter 组合框 一起使用时,我遇到了问题。我只是将我的数字连接到我的键盘。但是,当我使用组合框选择一种颜色(组合框的值只是我的图形的颜色),然后我绘制图形时,连接丢失。但是,在我从组合框中选择一个值之前,连接有效。请记住,如果我不选择任何值并让当前值,它可以工作。但是,如果我选择一个值,它不会(焦点在组合框上,当我按下键盘键打印“我可以打印这个”时,我正在写在组合框上)。

import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from tkinter import ttk
import tkinter as tk
import matplotlib
win=tk.Tk()

def myplot():
    ax.plot([1,2,3,4,5,6],color=cb.get())
    canvas.draw()

def myfun(event):
    print('i can print this')


bt=tk.Button(win,text="plot",command=myplot);bt.grid(row=2,column=1)


cb=ttk.Combobox(win,state="readonly",values=['red','blue','green','yellow']);cb.grid(row=0,column=1)
cb.current(0)

fig,ax=plt.subplots()
canvas = FigureCanvasTkAgg(fig, master=win)
canvas.get_tk_widget().grid(row=0,column=0)
canvas.draw()

con=fig.canvas.mpl_connect('key_press_event',myfun)


win.mainloop()

【问题讨论】:

    标签: python matplotlib tkinter


    【解决方案1】:

    您将需要绑定到整个窗口,而不仅仅是图:

    # ~ con=fig.canvas.mpl_connect('key_press_event',myfun)
    win.bind('<KeyPress>',myfun)
    

    【讨论】:

    • 感谢您的回复。它可以工作,但是如果我打印 x 轴的数据(event.xdata),它会说“事件”对象没有属性“xdata”
    • 啊,对了,该事件现在是一个 tkinter 事件,因此它不再与该图有任何链接。您需要通过其他方式获取该数据。
    • 好吧,这就是问题所在。我有这个图,我想在我使用组合框选择它的颜色并使用按钮绘制它之后按下键盘按钮时获取 x 轴数据。这就是我使用 fig.canvas.mpl_connect 的原因。如果我不使用组合框,它可以工作。然而,组合框做了一些事情并带走了对图形的关注....
    • 是的,“某事”刚刚成为焦点。 mpl_connect 仅在小部件具有焦点时才有效。如果您将焦点放在另一个小部件上,它将具有相同的结果。只需从 line.get_xdata() 获取 x_data 或(更好)只需将其保存在方便的地方即可。
    • emm 不,对不起,我需要将 fig.canvas.mpl_connect 与组合框一起使用。无论如何谢谢你的帮助!!如果你能想到什么,请告诉我!!
    猜你喜欢
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多