2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
GUI ist die Abkürzung für Graphical User Interface. Jeder, der einen Computer verwendet hat, sollte mit der grafischen Benutzeroberfläche vertraut sein, daher ist es nicht erforderlich, hier auf Details einzugehen. Das Standard-GUI-Entwicklungsmodul von Python ist tkinter (in Versionen vor Python 3 Tkinter genannt). Anhand dieses Namens können Sie erkennen, dass es auf Tk basiert und später in viele andere Skripte portiert wurde Sprachen bietet es plattformübergreifende GUI-Steuerelemente. Natürlich ist Tk nicht die neueste und beste Wahl und verfügt nicht über besonders leistungsstarke GUI-Steuerelemente. Tatsächlich ist die Entwicklung von GUI-Anwendungen nicht das Beste, was Python zum Entwickeln von GUI-Anwendungen benötigt. PyQt, PyGTK usw. Module sind eine gute Wahl.
Grundsätzlich erfordert die Verwendung von tkinter zur Entwicklung von GUI-Anwendungen die folgenden 5 Schritte:
Der folgende Code zeigt, wie man mit tkinter eine einfache GUI-Anwendung erstellt.
import tkinter
import tkinter.messagebox
def main():
flag = True
# 修改标签上的文字
def change_label_text():
nonlocal flag
flag = not flag
color, msg = ('red', 'Hello, world!')
if flag else ('blue', 'Goodbye, world!')
label.config(text=msg, fg=color)
# 确认退出
def confirm_to_quit():
if tkinter.messagebox.askokcancel('温馨提示', '确定要退出吗?'):
top.quit()
# 创建顶层窗口
top = tkinter.Tk()
# 设置窗口大小
top.geometry('240x160')
# 设置窗口标题
top.title('小游戏')
# 创建标签对象并添加到顶层窗口
label = tkinter.Label(top, text='Hello, world!', font='Arial -32', fg='red')
label.pack(expand=1)
# 创建一个装按钮的容器
panel = tkinter.Frame(top)
# 创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数
button1 = tkinter.Button(panel, text='修改', command=change_label_text)
button1.pack(side='left')
button2 = tkinter.Button(panel, text='退出', command=confirm_to_quit)
button2.pack(side='right')
panel.pack(side='bottom')
# 开启主事件循环
tkinter.mainloop()
if __name__ == '__main__':
main()
Es ist zu beachten, dass GUI-Anwendungen normalerweise ereignisgesteuert sind. Der Grund für den Eintritt in die Hauptereignisschleife besteht darin, das Auftreten verschiedener Ereignisse wie Maus und Tastatur zu überwachen und den entsprechenden Code zur Verarbeitung der Ereignisse auszuführen, da weiterhin Ereignisse auftreten Eine solche Schleife muss also ständig laufen und auf das Eintreten des nächsten Ereignisses warten. Andererseits stellt Tk drei Layout-Manager für die Platzierung von Steuerelementen zur Verfügung. Diese drei Layout-Manager sind:Placer
(Der Entwickler gibt die Größe und Platzierung des Steuerelements an.)Packer
(Steuerelemente automatisch an den entsprechenden Positionen platzieren) undGrid
(Platzierungssteuerung basierend auf Gitterkoordinaten), die hier nicht beschrieben wird.
Pygame ist ein Open-Source-Python-Modul, das speziell für die Entwicklung von Multimedia-Anwendungen (z. B. Videospielen) verwendet wird und Bilder, Töne, Videos, Ereignisse, Kollisionen usw. unterstützt. Pygame basiert auf SDL, einer Reihe plattformübergreifender Multimedia-Entwicklungsbibliotheken, die in der Sprache C implementiert sind und häufig bei der Entwicklung von Spielen, Simulatoren, Spielern usw. verwendet werden. Mit Pygame sind Spieleentwickler nicht mehr an die zugrunde liegende Sprache gebunden und können sich mehr auf die Funktionen und die Logik des Spiels konzentrieren.
Lassen Sie uns nun ein einfaches Spiel abschließen: „Big Ball Eats Small Ball“ steht natürlich auch nicht im Mittelpunkt Verstehen Sie, wie Sie die vorherigen Schritte im Prozess anwenden. Erklären Sie die objektorientierte Programmierung und lernen Sie, diese Programmieridee zur Lösung realer Probleme zu verwenden.
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()
Sie können über die Funktion des Zeichenmoduls in Pygame auf dem Fenster zeichnen. Zu den Grafiken, die gezeichnet werden können, gehören: Linien, Rechtecke, Polygone, Kreise, Ellipsen, Bögen usw. Es ist zu beachten, dass das Bildschirmkoordinatensystem die obere linke Ecke des Bildschirms als Koordinatenursprung festlegt (0, 0). Nach rechts ist die positive Richtung der x-Achse und nach unten ist die positive Richtung der y-Achse. Wenn Sie die Position oder die Größe angeben, sind unsere Standardeinheiten Pixel. Der sogenannte Pixel ist ein Punkt auf dem Bildschirm. Mit einer Bildsuchsoftware können Sie versuchen, ein Bild mehrmals zu vergrößern, um diese Punkte zu sehen. Die Farbdarstellung in Pygame verwendet die Darstellungsmethode mit drei Primärfarben, d. h. der RGB-Wert der Farbe wird durch ein Tupel oder eine Liste angegeben. Jeder Wert liegt zwischen 0 und 255, da jede Primärfarbe ein 8-Bit (Bit) verwendet. Um den Wert darzustellen, entsprechen die drei Farben insgesamt 24 Bit, was oft als „24-Bit-Farbdarstellung“ bezeichnet wird.
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
# 设置窗口的背景色(颜色是由红绿蓝三原色构成的元组)
screen.fill((242, 242, 242))
# 绘制一个圆(参数分别是: 屏幕, 颜色, 圆心位置, 半径, 0表示填充圆)
pygame.draw.circle(screen, (255, 0, 0,), (100, 100), 30, 0)
# 刷新当前窗口(渲染窗口将绘制的图像呈现出来)
pygame.display.flip()
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()
Wenn Sie das Bild direkt in das Fenster laden müssen, können Sie das Bild mit der Funktion des Bildmoduls in Pygame laden und es dann über die Blit-Methode des zuvor erhaltenen Fensterobjekts rendern. Der Code lautet wie folgt.
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
# 设置窗口的背景色(颜色是由红绿蓝三原色构成的元组)
screen.fill((255, 255, 255))
# 通过指定的文件名加载图像
ball_image = pygame.image.load('./res/ball.png')
# 在窗口上渲染图像
screen.blit(ball_image, (50, 50))
# 刷新当前窗口(渲染窗口将绘制的图像呈现出来)
pygame.display.flip()
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()
Wenn es um das Wort Animation geht, ist es tatsächlich jedem bekannt, um Animationseffekte zu erzielen. Das Prinzip besteht darin, diskontinuierliche Bilder kontinuierlich abzuspielen, solange eine bestimmte Anzahl von Bildern pro Sekunde erreicht ist. Dann kann es einen glatteren Animationseffekt erzeugen. Wenn Sie möchten, dass sich der Ball im obigen Code bewegt, können Sie eine Variable verwenden, um die Position des Balls darzustellen, die Position des Balls in der Schleife ändern und dann das gesamte Fenster aktualisieren.
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
# 定义变量来表示小球在屏幕上的位置
x, y = 50, 50
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((255, 255, 255))
pygame.draw.circle(screen, (255, 0, 0,), (x, y), 30, 0)
pygame.display.flip()
# 每隔50毫秒就改变小球的位置再刷新窗口
pygame.time.delay(50)
x, y = x + 5, y + 5
if __name__ == '__main__':
main()
Normalerweise gibt es in einem Spiel viele Objekte, und eine „Kollision“ zwischen diesen Objekten ist unvermeidlich, z. B. wenn eine Kanonenkugel ein Flugzeug trifft, eine Kiste den Boden berührt usw. Die Kollisionserkennung ist ein entscheidendes Problem, das in den meisten Spielen behandelt werden muss. Das Sprite-Modul (animiertes Sprite) bietet Unterstützung für die Kollisionserkennung. Wir werden die vom Sprite-Modul bereitgestellten Funktionen hier nicht vorstellen Ermitteln Sie, ob zwei kleine Kugeln kollidieren. Sie müssen lediglich prüfen, ob der Abstand zwischen den Mittelpunkten der Kugeln kleiner ist als die Summe der Radien der beiden Kugeln. Um mehr kleine Kugeln zu erzeugen, können wir Mausereignisse verarbeiten, um an der Stelle, an der mit der Maus geklickt wird, kleine Kugeln mit zufälligen Farben, Größen und Bewegungsgeschwindigkeiten zu erzeugen. Dazu können wir natürlich das verwenden, was wir zuvor gelernt haben objektorientiertes Wissen.
Mausereignisse können in der Ereignisschleife verarbeitet werden. Der Ereignistyp kann über das Typattribut des Ereignisobjekts bestimmt werden, und die Position des Mausklicks kann über das pos-Attribut ermittelt werden. Wenn Sie Tastaturereignisse verarbeiten möchten, ist dies auch der richtige Ort. Die Methode ähnelt der Verarbeitung von Mausereignissen.
def main():
# 定义用来装所有球的容器
balls = []
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 处理鼠标事件的代码
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
# 获得点击鼠标的位置
x, y = event.pos
radius = randint(10, 100)
sx, sy = randint(-10, 10), randint(-10, 10)
color = Color.random_color()
# 在点击鼠标的位置创建一个球(大小、速度和颜色随机)
ball = Ball(x, y, radius, sx, sy, color)
# 将球添加到列表容器中
balls.append(ball)
screen.fill((255, 255, 255))
# 取出容器中的球 如果没被吃掉就绘制 被吃掉了就移除
for ball in balls:
if ball.alive:
ball.draw(screen)
else:
balls.remove(ball)
pygame.display.flip()
# 每隔50毫秒就改变球的位置再刷新窗口
pygame.time.delay(50)
for ball in balls:
ball.move(screen)
# 检查球有没有吃到其他的球
for other in balls:
ball.eat(other)
if __name__ == '__main__':
main()
Wenn wir die beiden oben genannten Codeteile zusammenfügen, haben wir das Spiel „Großer Ball frisst kleinen Ball“ abgeschlossen (um genau zu sein, es ist kein Spiel, aber wir haben die Grundkenntnisse zum Erstellen von a bestanden). Dieses Beispiel zeigt allen, dass Sie mit diesem Wissen Ihre Reise zur Entwicklung von Minispielen beginnen können. Tatsächlich gibt es im obigen Code viele Bereiche, die es wert sind, verbessert zu werden. Beispielsweise sollte der Code zum Aktualisieren des Fensters und zum Verschieben des Balls nicht in die Ereignisschleife eingefügt werden Ein Hintergrundthread, der diese Dinge behandelt, ist eine bessere Wahl. Wenn wir ein besseres Benutzererlebnis erzielen möchten, können wir dem Spiel auch Hintergrundmusik hinzufügen und Soundeffekte abspielen, wenn der Ball mit dem Ball kollidiert. Mit den Mixer- und Musikmodulen von Pygame können wir dies ganz einfach tun Erfahren Sie mehr Das. Wenn Sie mehr über Pygame erfahren möchten, ist das beste Tutorial die offizielle Website von Pygame. Wenn Sie keine Probleme mit Englisch haben, können Sie einen Blick darauf werfen. Wenn Sie 3D-Spiele entwickeln möchten, scheint Pygame nicht auszureichen. Leser, die sich für die Entwicklung von 3D-Spielen interessieren, sollten sich vielleicht Panda3D ansehen.