Я пытаюсь показать график с некоторыми виджетами на нем, используя Matplotlib. Виджеты должны просто позволять пользователю вводить начальную и конечную точки подгонки. Приведенный ниже код работает, однако, когда я нажимаю на виджет для ввода данных, он захватывает фокус с основного графика, а это означает, что инструменты масштабирования, панорамирования и т. Д. Больше не работают на графике. Кроме того, когда это происходит, координаты, показанные в нижнем левом углу, становятся теми внутри виджета, что означает, что они исчезают при наведении на график и появляются снова при наведении на виджет.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import TextBox
class fit_parameter :
val = 0
def __init__(self, start_value):
self.val = start_value
def change(self, new_value):
self.val = float(new_value)
def fit_to_zero(x_axis, y_axis, color, y_label) :
plt.clf()
plt.semilogx(x_axis, y_axis, linewidth=0.5, marker="o", markersize=1, color=color)
plt.xlabel(r'$y \,\, [keV \, / \, \mu m]$')
plt.ylabel(y_label)
plt.title("Linear interval selection")
print("Write the start and end point of the linear interval")
fit_start, fit_end = fit_parameter(0.1), fit_parameter(0.4)
axbox1 = plt.axes([0.65, 0.82, 0.2, 0.04])
text_box1 = TextBox(axbox1, 'start ', initial="0.1")
text_box1.on_submit(fit_start.change)
axbox2 = plt.axes([0.65, 0.76, 0.2, 0.04])
text_box2 = TextBox(axbox2, 'end ', initial="0.4")
text_box2.on_submit(fit_end.change)
plt.show()
#...
Вот изображение вопроса:
Изображение
Я протестировал это на Windows 10 и Ubuntu 18.04, используя Pyhton 3.