Виджет ввода текста крадет фокус с основного сюжета - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь показать график с некоторыми виджетами на нем, используя 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.

...