2017-04-01 39 views
1

私のタイトルは紛らわしいかもしれませんが、基本的には4秒ごとに別々の図形を描きたいと思っています。たとえば、2番目のものは三角形を描きたい、2番目は2番目に線を描きたい、2番目の3つは長方形を描きたい、2番目の4つは楕円を描きたい。 2番目の5つは、このプロセスを繰り返すことです。私の考えは、2番目の7まで働く残りを使うことでした。また、追加のモジュールをインポートせずにこれを行うことも可能です。どんな助けも素晴らしいと思います。あなたがしたい場合はここで1秒ごとに異なるアクションを実行してから4秒ごとに繰り返す方法

おかげで、 スコット

を実行するために私の現在のコードです:あなたが探しているものを

from tkinter import * 
from random import * 


#creates a class 
class mainWindow(): 
    def __init__(self,theWindow,winName): 

     #Sets values for variable 
     self.running = 0 

     #makes theWindow and instnace var 
     self.theWindow = theWindow 

     #creates the main frames 
     self.mainFrame = Frame(theWindow,width=600,height=200,bg="light gray") 
     self.secondframe = Frame(theWindow,width=600, height =287, bg = "green") 

     self.mainFrame.grid() 
     self.secondframe.grid() 

     # gives the window a title 
     theWindow.title(winName) 

     # do not resize window based on widgets 
     self.mainFrame.grid_propagate(False) 

     # window location 
     theWindow.geometry('+500+300') 

     #Makes it so the window wont resize 
     self.theWindow.resizable(0,0) 

     # 
     self.theWindow.wm_attributes("-topmost",1) 


`enter code here`#Creates the three frames that will be used 

     #Inerts a blank label to help with formating 
     self.blank1 = Label(self.mainFrame, bg= "light gray", height =3, width=19) 
     self.blank1.grid(row=0, column=0, rowspan =1) 

     #Creates and places the start button 
     self.startbutton = Label(self.mainFrame,text = "Start", bg= "green", height =1, width=10,relief=RAISED) 
     self.startbutton.bind("<Button-1>", self.startTimer) 
     self.startbutton.grid(row=0, column=2, rowspan =1, sticky = E) 

     #Creates and places the stop button 
     self.stopbutton = Label(self.mainFrame,text = "Stop", bg= "red", height =1, width=10,relief=RAISED) 
     self.stopbutton.bind("<Button-1>", self.endTimer) 
     self.stopbutton.grid(row=0, column=3, rowspan =1, sticky =W) 

     #Creates and places the timer 
     self.timerLabel = Label(self.mainFrame,text = "Time: 0", bg= "white", height =2, width=14,relief=SUNKEN) 
     self.timerLabel.bind("<Button-1>",) 
     self.timerLabel.grid(row=3, column=2, columnspan =2, pady =25) 

     #draws the canvas 
     self.drawCanvas = Canvas(self.secondframe,width=598,height=285, bg= "light green") 
     self.drawCanvas.grid() 

    #Function for strting the timer 
    def startTimer(self,event): 
     if self.running == 0: 
      self.running = 1 
      self.countElapse(0) 

    #function for ening the timer 
    def endTimer(self,event): 
     if self.running == 1: 
      self.running = 0 
      self.timecount = 0 
      self.drawCanvas.delete(ALL) 
      self.timerLabel.configure(text = "Time: %d" %0) 


    #function for showing the time 
    def countElapse(self,localTime = NONE): 
     #self.timerLabel.configure() 
     if self.running: 
      if localTime is not NONE: 
       self.timecount = localTime 
      self.timerLabel.configure(text ="Time: "+str(self.timecount+1)) 
      self.timecount = self.timecount+1 
      self.drawshapes(self.timecount) 
      self.mainFrame.after(1000,self.countElapse) 

    #function for drawing the shpaes 
    def drawshapes(self,timecount): 

     self.drawCanvas.delete(ALL) 
     color = ["red","white","purple","green","lime green", "cyan", "black","light blue","blue","pink","brown","gray"] 
     numshapes = 100 
     counter = 0 
     print(self.timecount) 

     var = self.timecount 

     #draws ovals 
     if var % 4 ==0: 
      while counter != numshapes: 
       counter += 1 
       x = randint(10,600) 
       y = randint(10,600) 
       x1 = randint(10,600) 
       y1 = randint(10,600) 

       #draws the shape 
       self.drawCanvas.create_oval(x,y,x1,y1,fill=choice(color)) 

     #draws rectangles 
     elif var % 3 ==0: 
      while counter != numshapes: 
       counter += 1 
       x = randint(10,600) 
       y = randint(10,600) 
       x1 = randint(10,600) 
       y1 = randint(10,600) 
       self.drawCanvas.create_rectangle(x,y,x1,y1,fill= choice(color)) 

     #draws Lines 
     elif var % 2 ==0: 
      while counter != numshapes: 
       counter += 1 
       x = randint(10,600) 
       y = randint(10,600) 
       x1 = randint(10,600) 
       y1 = randint(10,600) 
       self.drawCanvas.create_line(x,y,x1,y1,fill= choice(color)) 

     #draws triangles 
     elif var % 1 ==0: 
      while counter != numshapes: 
       counter += 1 
       x = randint(10,600) 
       y = randint(10,600) 
       x1 = randint(10,600) 
       y1 = randint(10,600) 
       x2 = randint(10,600) 
       y2 = randint(10,600) 
       self.drawCanvas.create_polygon(x,y,x1,y1,x2,y2,fill= choice(color)) 



def main(): 
    # create a tkinter object 
    mainWin = Tk() 
    # create a mainWindow object 
    theMainWin = mainWindow(mainWin,"Scott Rodgers") 
    # keep the window displaying 
    mainWin.mainloop() 


#calls main 
main() 
+0

[の可能性の重複を与えられた時間の後に呼び出され、アラームコールバックを登録することですPythonでx秒ごとに関数を実行しますか?](http://stackoverflow.com/questions/474528/what-is-the-best-way-to-repeatedly-execute-a-function-every-x-seconds-in -python) – litepresence

+0

tkinterメソッド 'after'に関するいくつかの調査を行います。これはfuで実行するようにスケジュールするために使用できます確かにstackoverflowには多くの例があります。 –

答えて

0

は.afterメソッドを使用する方法です。

これはどのように動作するのですか。より高度な表記法については

Lbl = Label() 
Lbl.pack() 
Lbl.after([Amount of milliseconds], lamba: [Function]) 

after(delay_ms, callback=None, *args) 

これが何をするか、それは繰り返しに最良の方法は何

関連する問題