2013-05-29 2 views
3

프레임을 가로 지르는 상자를 표시하는 기본 tkinter 예제를 작성하려고합니다. 이 시점에서 아래 코드는 최종 결과 만 인쇄하고 상자 이동을 표시하지 않습니다. 이동과 같은 것을 사용하여 시간이 지남에 따라 작동하도록 코드를 수정하려면 나중에 모양을 수정할 수 있도록하려면 어떻게해야합니까?살아 움직이는듯한 Tkinter

from tkinter import Tk, Canvas, Frame, BOTH 
from time import sleep 


class Example(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.parent.title("Board") 
     self.pack(fill=BOTH, expand=1) 
     self.canvas = Canvas(self)   
     self.ctr = 10 
     self.initUI() 


    def initUI(self): 
     print(self.ctr) 
     #The first four parameters are the x,y coordinates of the two bounding points. 
     #The top-left and the bottom-right. 
     r = self.canvas.create_rectangle((self.ctr * 10), 0, (self.ctr * 10 + 50), 50, 
      outline="#fb0", fill="#fb0") 
     ''' 
     canvas.create_rectangle(50, 0, 100, 50, 
      outline="#f50", fill="#f50") 
     canvas.create_rectangle(100, 0, 150, 50, 
      outline="#05f", fill="#05f") 
     '''   
     self.canvas.pack(fill=BOTH, expand=1) 

     if self.ctr > 0: 
      self.updateUI() 

    def updateUI(self): 
      self.ctr -= 1 
      sleep(1) 
      self.initUI() 



def main(): 

    root = Tk() 
    root.geometry("400x100+300+300") 
    ex = Example(root) 
    root.mainloop() 


if __name__ == '__main__': 
    main() 

답변

5

이렇게하면 중간에 들게됩니다. 들여 쓰기를 수정해야하며, 오프셋이 정확하지 않으며 카운터가 초기화되지 않습니다. 앞으로는 예를 들어 GUI의 이벤트 루프를 사용할 때 절전 모드를 호출하지 않도록하십시오. 대부분의 GUI에는 이벤트 루프 (이 경우에는 root.after 호출)에 무언가를 연결하는 메서드가 있습니다. 내가 한 모든 일은 코드 작업을 부분적으로 만듭니 다 - 이것은 관용적 인 파이썬을 나타내는 것으로 보아서는 안됩니다.

from tkinter import Tk, Canvas, Frame, BOTH 
from time import sleep 

class Example(Frame): 

def __init__(self, parent): 
    Frame.__init__(self, parent) 
    self.parent = parent 
    self.parent.title("Board") 
    self.pack(fill=BOTH, expand=1) 
    self.canvas = Canvas(self) 
    self.ctr = 10 


def initUI(self): 
    print(self.ctr) 
    #The first four parameters are the x,y coordinates of the two bounding points. 
    #The top-left and the bottom-right. 
    r = self.canvas.create_rectangle((self.ctr * 10), 0, (self.ctr * 10 + 50), 50, 
     outline="#fb0", fill="#fb0") 
    ''' 
    canvas.create_rectangle(50, 0, 100, 50, 
     outline="#f50", fill="#f50") 
    canvas.create_rectangle(100, 0, 150, 50, 
     outline="#05f", fill="#05f") 
    ''' 
    self.canvas.pack(fill=BOTH, expand=1) 

    self.ctr += 1 
    if self.ctr > 0: 
     self.parent.after(1000, self.initUI) 

def main(): 

root = Tk() 
ex = Example(root) 
root.geometry("400x100+300+300") 
root.after(1000, ex.initUI) 
root.mainloop() 

if __name__ == '__main__': 
main()