Drawing Pacman's Face in Tkinter
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!
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