Рисование лица Пакмана в Ткинтере - PullRequest
2 голосов
/ 18 ноября 2011

Так что я пишу Pacman на Python просто для удовольствия и хочу создать открытое лицо Пакмана (когда он ест еду) с использованием графики Tkinter.Как именно я рисую открытое лицо?Я думал об использовании canvas.create_arc для создания открытого рта, но он не работает должным образом: (

Любая помощь? Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

Вы правы, что использовали бы метод create_arc.Установите начало на 45 и extent на 270, и это будет выглядеть так, будто pacman смотрит направо с открытым ртом.

Поскольку вы только учитесь, я не буду публиковать точный код, так что у вас будет возможность выяснить его самостоятельно.

0 голосов
/ 18 августа 2017

Это будет работать:

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()
...