2016-08-04 4 views
1

목표 : "탭"(선택한 탭을 기준으로 표시되는 정보가 변경 될 수 있음)이있는 화면 부분과 동일한 항목을 계속 표시하는 GUI를 만들려고합니다.Python Tkinter 탭과 캔버스

import ttk 
import Tkinter 


def demo(): 
    #root = tk.Tk() 
    schedGraphics = Tkinter 
    root = schedGraphics.Tk() 


    root.title("Testing Bot") 
    universal_height = 606 
    canvas = schedGraphics.Canvas(root,width = 900, height = universal_height) 

    nb = ttk.Notebook(root) 


    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it 
    page1 = ttk.Frame(nb,width = 300,height = universal_height) 
    # second page 
    page2 = ttk.Frame(nb,width = 300,height = universal_height) 


    nb.add(page1, text='One') 
    nb.add(page2, text='Two') 

    # 

    nb.grid() 

    day_label = schedGraphics.Label(page1, text="Day1:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 

    day_label = schedGraphics.Label(page2, text="Day2:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 


    canvas.create_rectangle(50,500,300,600,fill = "red") 
    canvas.grid() 



    root.mainloop() 

if __name__ == "__main__": 
    demo() 

문제 : 탭이없는 좌측 화면의 중앙에 위치하는 현재 구성

  1. .

  2. canvas.grid()를 canvas.pack()으로 변경하면 실제로 어떤 창이 열리지 않습니까?

  3. 캔버스에 사각형이 나타납니다!

감사합니다.

답변

0
  1. 이 작업을 수행하려면 노트북을 리딩 할 때, 인수 column를 통과하고이 같은, 가장 왼쪽에 위치 할 수 있도록, 0를 선택하기 때문에

    nb.grid(column=0)

  2. 의 그 당신은 .grid().pack() 사이에서 tkinter 앱을 선택해야합니다. 두 개는 호환되지 않습니다. 전에 .grid()을 사용 했으므로 창이 열리지 않고 TclError이 나타납니다.

  3. 캔버스가 실제로 노트 아래에 숨겨져 있습니다. 0 grid를 사용할 때이 위에 있음이 문제를 해결하려면 다음과 같이의 row 인수를 설정합니다

    canvas.grid(column=1, row=0)

최종 코드 :

import Tkinter 
import ttk 


def demo(): 
    #root = tk.Tk() 
    schedGraphics = Tkinter 
    root = schedGraphics.Tk() 

    root.title("Testing Bot") 
    universal_height = 606 

    nb = ttk.Notebook(root) 

    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it 
    page1 = ttk.Frame(nb, width= 300,height = universal_height) 
    # second page 
    page2 = ttk.Frame(nb,width = 300,height = universal_height) 

    nb.add(page1, text='One') 
    nb.add(page2, text='Two') 

    nb.grid(column=0) 

    day_label = schedGraphics.Label(page1, text="Day1:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 

    day_label = schedGraphics.Label(page2, text="Day2:") 
    day_label.pack() 
    day_label.place(x=0, y=30) 

    canvas = schedGraphics.Canvas(root, width=900, height=universal_height) 
    canvas.create_rectangle(50, 500, 300, 600, fill="red") 
    canvas.grid(column=1, row=0) 

    root.mainloop() 

if __name__ == "__main__": 
    demo() 

나는이 희망 도와 줘요!

+0

포인트 1은 오도 된 것입니다. 하나의 경우, 열 0을 사용하지만 열 1을 사용하여 표시한다고 가정합니다. 둘째, 가장 왼쪽 열에 있기 때문에 창 왼쪽 가장자리에 맞지 않을 수도 있습니다. –

+0

@BryanOakley 오타를 불러내 죄송합니다. 감사합니다. 두 번째 사항은 맨 왼쪽으로 나는 노트북과 가장자리 사이에 아무 것도 없을 것이라는 것을 의미하지만 꼭 꼭 붙어 있어야하는 것은 아닙니다. – TrakJohnson

+0

@TrakJohnson! 감사합니다! 완벽한 대답을하고 정확히 내가 원하는 걸합니다. 질문 후 수행 : 탭에서 사각형 그리기를 원한다고 가정합니다 (캔버스 위로 끌어 올 수 있습니다). 이미 드래그 코드가 캔버스에서 작동하지만 "탭"에 그릴 직사각형을 얻을 수 없습니다. – smarttylerthecreator