2014-12-09 4 views
0

나는 TKinter에서 게임을위한 그리드를 만들고 있는데, 아래쪽이나 파란색 타일 그리드 옆에 버튼이 있어야합니다. 나는 이미 시도했다 :TKinter에서 그리드 옆에있는 버튼을 추가하는 방법

from tkinter import * 

class BattleScreen(Frame): 
    def __init__(self, root): 
     Frame.__init__(self, root) 
     self.grid() 

     for row in range(20): 
      for col in range(20): 
       butt1 = Button(self, bg='blue', width=1) 
       butt1.grid(row=row, column=col) 

     #self.but_frame = Frame(self) 
     #self.but_frame.pack(fill=X) 
     button1 = Button(self, text='Quit', width=6, command=lambda root=root:root.destroy()) 
     button1.grid(row=21) 


root = Tk() 
sheet = BattleScreen(root) 
root.mainloop() 

이 실행되면 블루 타일 아래의 버튼을 생성하지만 그것은 모두 같은 그리드에 있고 버튼이 넓은이기 때문에, 버튼 위의 모든 것을 망쳐 놨어요.

주석 처리 된 두 줄의 코드는 단추를 그리기 위해 그리드 프레임과 별도의 다른 프레임을 만들려는 시도 였지만 사용자가 그렇게 할 수는 없다고 생각합니다. 내가 잘못?

파란색 타일의 배열을 어지럽히 지 않고 격자의 파란색 타일 아래 또는 옆에 단추를 가져 오는 방법은 무엇입니까?

+0

언제든지 전함 – 13ros27

답변

0

사용 columnspan option이 만들 수있는 버튼 셀 스팬 여러 열 : - 버튼의 그리드 하나, 하나를위한

button1.grid(row=20, columnspan=20) 
나를 위해

enter image description here

+0

고맙습니다. 그게 효과가있어! – James4701

0

, 할 수있는 가장 쉬운 방법은 두 개의 프레임을 사용하다 다른 버튼. 그런 다음 위에서 아래로 나란히 포장 할 수 있습니다. 그런 다음, 그리드의 버튼 그리드를 그리드 또는 다른 버튼의 그리드를 사용하십시오.

그리드와 버튼은 논리적으로 구별되며 나머지 디스플레이에 어떤 영향을 주는지에 관계없이 각각 배치 할 수 있습니다. 이로 인해 프로그램은 시간이 지남에 따라 유지 관리가 쉽고 커집니다.

다음은 내가 BattleScreen에서 self.grid()을 제거했음을 유의하십시오. 프레임에 부모를 배치하는 것은 바람직하지 않습니다. 부모는 배치를 제어해야합니다.

from tkinter import * 

class BattleScreen(Frame): 
    def __init__(self, root): 
     Frame.__init__(self, root) 

     for row in range(20): 
      for col in range(20): 
       butt1 = Button(self, bg='blue', width=1) 
       butt1.grid(row=row, column=col) 


class Controls(Frame): 
    def __init__(self, root): 
     Frame.__init__(self, root) 
     self.quit = Button(self, text="Quit", width=6, 
          command=root.destroy) 
     self.quit.pack() 

root = Tk() 
screen = BattleScreen(root) 
controls = Controls(root) 
controls.pack(side="bottom", fill="x") 
screen.pack(side="top", fill="both", expand=True) 
root.mainloop() 
관련 문제