2016-06-19 4 views
1

TicTacToe 프로그램을 구현하려고합니다. 저는 파이썬에서 절대 초보자입니다. 많은 튜토리얼을보고 몇 권의 책을 읽은 후에 파이썬의 기초를 이해했습니다. 프레임에 버튼을 표시하려고하지만 빈 창이 나옵니다. Tkinter : 프레임 내의 버튼이 보이지 않습니다.

link for image of the resultant window

내가 지금까지 가지고있는 코드 : 문제가 나는 코드의 끝 부분에 변수를 추가 할 필요가 있었다

from Tkinter import * 

class Buttons(object): 

    def __init__(self,master): 
     frame = Frame(master) 
     frame.pack() 

     self.button1= Button(frame,text="1",height=4,width=8,command=self.move) 
     self.button1.pack(side=LEFT) 

     self.button2= Button(frame,text="2",height=4,width=8,command=self.move) 
     self.button2.pack(side=LEFT) 

     self.button3= Button(frame,text="3",height=4,width=8,command=self.move) 
     self.button3.pack(side=LEFT) 


root = Tk() 
root=mainloop() 
+0

좋아요, 문제를 이해하고 작동시키기 위해 b = Buttons (루트)를 넣어야했습니다. 이것이 왜 필요한지 설명한다면 도움이 될 것입니다. 고맙습니다. –

+0

좋아, 몇 분 후에 답변을 게시하겠습니다. –

답변

2

Buttons 클래스를 정의했지만 해당 클래스의 인스턴스를 만들지 않아 실제로 버튼이 구성되지 않았습니다.

root=mainloop() 

당신이 move 콜백 메소드를 정의하지 않았다, 또한

root.mainloop() 

해야한다 : 또한, 오타/구문 오류가 있었다.

from Tkinter import * 

class Buttons(object): 

    def __init__(self,master): 
     frame = Frame(master) 
     frame.pack() 

     self.button1 = Button(frame, text="1", height=4, width=8, command=self.move) 
     self.button1.pack(side=LEFT) 

     self.button2 = Button(frame, text="2", height=4, width=8, command=self.move) 
     self.button2.pack(side=LEFT) 

     self.button3 = Button(frame, text="3", height=4, width=8, command=self.move) 
     self.button3.pack(side=LEFT) 

    def move(self): 
     print "click!" 

root = Tk() 
Buttons(root) 
root.mainloop() 

그러나,이 여전히 문제가 있습니다 :

여기에 코드의 수정 된 버전 년대 move 방법은 버튼을 호출하는 알 수있는 방법이 없습니다. 이를 해결할 수있는 한 가지 방법이 있습니다. 또한

import tkinter as tk 

그것은 "별"수입을 사용하는 것이 좋습니다 아니에요에

from Tkinter import * 

을 변경했습니다. 코드를 읽기가 어렵게 만들고 가져온 모듈 (Tkinter의 경우 175 개의 이름)에 정의 된 모든 이름으로 네임 스페이스를 오염 시키면 이름 충돌이 발생할 수 있습니다.

import Tkinter as tk 

class Buttons(object): 

    def __init__(self,master): 
     frame = tk.Frame(master) 
     frame.pack() 

     self.buttons = [] 
     for i in range(1, 4): 
      button = tk.Button(
       frame, text=i, height=4, width=8, 
       command=lambda n=i:self.move(n) 
      ) 
      button.pack(side=tk.LEFT) 
      self.buttons.append(button) 

    def move(self, n): 
     print "click", n 

root = tk.Tk() 
Buttons(root) 
root.mainloop() 
+0

이 게시물에 너무 감사드립니다! 그것은 대단히 도움이된다! –

+0

@ms : 기쁩니다! 프로그램에 행운을 빈다. '.pack' 대신'.grid' 메쏘드를 사용하여 tic-tac-toe grid를 만드는 것이 더 쉽습니다. –

+0

예, 저는 이미 그것에 대해 알고 있습니다. 게임 부분을 구현하기 시작하면 많은 어려움에 직면하게됩니다. 다행히 SO가 그것을 통해 나를 도울 것입니다 : D 다시 한 번 감사드립니다! –

0

좋아요. b = 버튼 (루트)과 같은 것. 이제 작동 중입니다.