Question

So I'm coding Pacman in Python just for fun and I want to create pacman's open face (when he is eating food) using Tkinter graphics. How exactly do I draw an open face? I was thinking about using canvas.create_arc to create the open mouth but it doesn't work properly :(

Any help? Thanks!

Was it helpful?

Solution

You are correct that you would use the create_arc method. Set the start to 45 and the extent to 270 and it will look like pacman is facing to the right with his mouth open.

Since you are just learning I'll not post the exact code so you'll have a chance to figure it out on your own.

OTHER TIPS

This would work:

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()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top