2011-11-18 43 views
2

所以我在Python中编写Pacman只是为了好玩,我想用Tkinter图形创建pacman的开放面(当他吃东西的时候)。我如何绘制一张张开的脸?我想使用canvas.create_arc创造了张嘴,但它不能正常工作:(在Tkinter中绘制Pacman's Face

任何帮助吗?谢谢!

+2

你试过了什么?它是如何失败的? – sarnold

+2

更重要的是,你如何为Pacman太太画弓? –

回答

2

你是正确的,你会使用create_arc方法。将开始45extent270,它看起来像吃豆子正面临着张着嘴的权利。

既然你刚开始学习我不会发布确切的代码,这样你就会有机会弄明白

0

这将工作:

import sys 
if sys.hexversion > 0x02ffffff: 
    from tkinter import * 
else: 
    from Tkinter import * 

class Application(Frame): 

    #Creates an arc  
    def draw_pieslice(self, canv,x,y,rad): 
     return canv.create_arc(x-rad, y-rad, x+rad, y+rad, fill='yellow', style=PIESLICE, start=self.start_angle, extent=self.stop_angle) 

    #To toggle the start and extent values of the arc, such that the pacman opens and closes the mouth 
    #Initially the mouth will be completely closed, but as the value is toggled we will get a 45deg space (mouth opens) 
    def toggle_mouth(self): 
     if self.start_angle is 1: 
      self.start_angle = 45 
      self.stop_angle = 270 
     else:      
      self.start_angle = 1 
      self.stop_angle = 359 

    #moves the pacman body horizontally 
    def movecircle(self): 
     self.repeat = self.repeat - 1   #sets a limit to horizontal movement 
     self.canvas.move(self.PacMouth,1,0)  
     if (self.repeat % 10) is 0:    #Adjusting the value in here, will help to adjust the mouth movement speed with the horizontal body movement 
      self.toggle_mouth() 
      self.canvas.itemconfig(self.PacMouth, start = self.start_angle, extent = self.stop_angle) 
     if self.repeat is not 0: 
      self.after(10, self.movecircle)  #By adjusting the time, we can adjust the horizontal movement speed 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 

     self.start_angle = 1 
     self.stop_angle = 359 

     self.canvas = Canvas(width=800, height=480, bg='black') 
     self.canvas.pack(expand=YES, fill=BOTH) 
     text = self.canvas.create_text(50,10, text="Pacman! Yeah!", fill="white") 
     self.PacMouth = self.draw_pieslice(self.canvas,100,240,20) 
     self.repeat = 600 

     self.movecircle() 


root = Tk() 
root.config(bg = "black") 
root.title("Im on stack overflow") 
root.geometry('{}x{}'.format(800, 480)) 
root.resizable(width=False, height=False) 

app = Application(master=root) 
app.mainloop()