2016-07-07 1 views
1

matplotlib 사용법을 배우고 있는데 문제가 생겼습니다. "tkinter 프로젝트"에 Figure을 생성하고 서브 플로트를 부여하면 NavigationToolbar2TkAgg을 사용하여 툴바를 만듭니다. 이 툴바는 그래프 상단에 나타납니다. 아래쪽이나 왼쪽과 같은 다른 위치에 어떻게 설정할 수 있습니까?"NavigationToolbar2TkAgg"도구 모음의 위치는 어떻게 관리합니까?

the screenshot

  • 왜 바닥에으로 ToolBar1의 위치는 다음과 같습니다

    import tkinter as tk 
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 
    from matplotlib.figure import Figure 
    
    root = tk.Tk() 
    root.title("I am a newbie!") 
    
    # create the figure instances 
    fig = Figure() 
    a = fig.add_subplot(122) 
    b = fig.add_subplot(121) 
    
    # figure1 has two subplot and figure 2 has only one 
    fig2 = Figure(figsize=(2, 2)) 
    c = fig2.add_subplot(111) 
    
    # create canvas1 
    canvas = FigureCanvasTkAgg(fig, root) 
    canvas.show() 
    canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.X) 
    # put this to the top of the window 
    
    # toolbar for canvas1 (figure1) 
    toolbar = NavigationToolbar2TkAgg(canvas, root) 
    toolbar.update() 
    
    # create canvas2 
    canvas2 = FigureCanvasTkAgg(fig2, root) 
    canvas2.show() 
    canvas2.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.X) 
    # put this to the bottom 
    
    # toolbar for canvas2 (figure2) 
    toolbar2 = NavigationToolbar2TkAgg(canvas2, root) 
    toolbar2.update() 
    
    
    # this function just to exit 
    def _quit(): 
        root.quit() 
        root.destroy() 
    
    
    button = tk.Button(master=root, text='Quit', command=_quit) 
    button.pack(side=tk.BOTTOM) 
    
    root.mainloop() 
    

    이 표시되는 창은 다음과 같습니다

    코드인가?
  • 툴바 2가 캔버스 2 위에있는 이유는 무엇입니까?

나는 자신의 위치를 ​​설정하는 방법을 배우고 싶어요.

+0

,하지만 당신은 그림 캔버스 도구 모음과 자신의 창 프레임을 만들어야 할 수도 있습니다 것 같은데. 그렇게하면 원하는 곳에 도구 모음을 배치 할 수 있습니다. 그러나 아마도 꽤 많은 작업이 필요할 것입니다. – pathoren

+0

[mcve]를 작성하고 코드를 게시하면 도움이됩니다. – Ajean

+0

@Ajean, @ pathoren 답장을 보내 주셔서 감사합니다. 질문을 편집합니다. :) –

답변

1

NavigationToolbar2TkAgg

toolbar = NavigationToolbar2TkAgg(canvas, window) 

방법 NavigationToolbar2TkAgg._init_toolbar에 의해 인스턴스화라고합니다. 상위 위젯으로 window을 설정하고 메소드 끝에 self.pack(side=Tk.BOTTOM, fill=Tk.X)을 호출합니다. 이것은 도구 막대가 window 안에 어떻게 배치되는지에 영향을줍니다. 툴바 tk.Frame위한 위젯을 생성하여

, 툴바의 위치가 변경 될 수있다. 도구 모음은 이제 프레임 내부에 배치되어 있기 때문에

frame1 = tk.Frame(root) 
frame2 = tk.Frame(root) 

canvas = FigureCanvasTkAgg(fig, root) 
toolbar = NavigationToolbar2TkAgg(canvas, frame1) 
canvas2 = FigureCanvasTkAgg(fig2, root) 
toolbar2 = NavigationToolbar2TkAgg(canvas2, frame2) 

frame1.pack(side=tk.TOP, fill=tk.X) 
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.X) 
frame2.pack(side=tk.TOP, fill=tk.X) 
canvas2.get_tk_widget().pack(side=tk.TOP, fill=tk.X) 

button = tk.Button(master=root, text='Quit') 
button.pack(side=tk.TOP) 

, 두 번째 도구 모음에 대한 pack() 호출은 종료 버튼에 영향을주지 않습니다.

문제에있어서 github.

tkinter에 대해 너무 많이 알고없이
+0

고마워요! 너의 도움으로 마침내이 문제를 해결해! @pathoren에게도 감사의 말을 전하십시오. –

관련 문제