matplotlib: как сделать правильное большее количество подзаговоров с помощью figurecanvastkagg в прокручиваемом окне - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь создать пользовательский интерфейс, который показывает некоторые графики с полосой прокрутки для моих коллег, и я застрял в последней части кода.

Логика:

Используя главное окно, ониумеют добавлять файлы для запуска.Когда они запускают код, графики будут отображаться под главным окном в другом кадре.

Примерно, они используют 20-30 файлов для каждого запуска, и это показывает около 20-30 графика.

Я создал все немного грязно, но это работает.Тем не менее, когда количество вспомогательных участков велико (> 10), участки выглядят как сжатые в верхней части экрана, и почти нижняя часть выглядит пустой.Я пытался выяснить в течение нескольких недель, но я не мог найти хорошее решение, хотя я видел такие же вопросы, как мой, и я хотел задать еще раз.

Так, как избежать сжатых графиков для этой ситуации.

Примечание : я использовал resize_callback в "FigureCanvasTkAgg" каким-то образомэто решило мою проблему, но я не смог правильно использовать функцию NavigationToolbar2Tk в моем окне.

С уважением,

Вот мой код:

def gui():
...
...

def func():
    fig, axs=plt.subplots(nrows=len(files),ncols=1,figsize=(20,10*len(fsa_file)), dpi=100, squeeze=False)
    fig.subplots_adjust(hspace=0.5)
    axs=axs.ravel()
    w,h=fig.get_size_inches()



    for v in range(files):

        ...(other things)
        ...
        ...


        axs[v].plot(cb_blue, color="blue")
        axs[v].plot(cb_green, color="green")
        axs[v].plot(cb_black, color="black")
        axs[v].plot(cb_red, color="red")
        axs[v].set_title(files[v].split("/")[6].split(".")[0])


    frame_Agg =Frame(root, width=(20* (fig.dpi)), height=(h * (fig.dpi)))
    canvas=Canvas(frame_Agg,width=(20* (fig.dpi)), height=(h * (fig.dpi)))

    yScrollbar = Scrollbar(root, orient=VERTICAL)
    yScrollbar.pack(side=RIGHT, fill=Y)

    figAgg = FigureCanvasTkAgg(fig,canvas)

    figAgg.get_tk_widget().config(width=(20* (fig.dpi)), height=(h (fig.dpi)))
    figAgg.get_tk_widget().config(yscrollcommand=yScrollbar.set)
    figAgg.get_tk_widget().config(scrollregion=(0,0, 20 * fig.dpi, h * fig.dpi))
    yScrollbar.config(command=figAgg.get_tk_widget().yview)
    figAgg.get_tk_widget().pack(side=tkinter.TOP,fill=tkinter.BOTH,expand=1)

    toolbar = NavigationToolbar2Tk(figAgg, frame_Agg)
    toolbar.update()

    figAgg.draw()
    frame_Agg.pack()
    canvas.pack()

return func

def main():
    gui()
main()

1 Ответ

0 голосов
/ 07 января 2019

Я сам решил проблему с использованием параметров grid ().

...