τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το GUI είναι η συντομογραφία του γραφικού περιβάλλοντος χρήστη. Η προεπιλεγμένη μονάδα ανάπτυξης GUI της Python είναι tkinter (με το όνομα Tkinter σε εκδόσεις πριν από την Python 3, μπορείτε να πείτε ότι το Tk είναι ένα κιτ εργαλείων που σχεδιάστηκε αρχικά για το Tcl και μεταφέρθηκε αργότερα σε πολλά άλλα σενάρια). γλώσσες, παρέχει στοιχεία ελέγχου γραφικού περιβάλλοντος μεταξύ πλατφορμών. Φυσικά, το Tk δεν είναι η πιο πρόσφατη και καλύτερη επιλογή και δεν διαθέτει ιδιαίτερα ισχυρά στοιχεία ελέγχου GUI, στην πραγματικότητα, η ανάπτυξη εφαρμογών GUI δεν είναι η καλύτερη επιλογή για την Python. PyQt, PyGTK, κλπ. Οι ενότητες είναι μια καλή επιλογή.
Βασικά η χρήση του tkinter για την ανάπτυξη εφαρμογών GUI απαιτεί τα ακόλουθα 5 βήματα:
Ο παρακάτω κώδικας δείχνει πώς να χρησιμοποιήσετε το tkinter για να δημιουργήσετε μια απλή εφαρμογή GUI.
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()
Θα πρέπει να σημειωθεί ότι οι εφαρμογές GUI συνήθως βασίζονται σε συμβάντα Ο λόγος για την είσοδο στον κύριο βρόχο συμβάντων είναι η παρακολούθηση της εμφάνισης διαφόρων γεγονότων όπως το ποντίκι και το πληκτρολόγιο και η εκτέλεση του αντίστοιχου κώδικα για την επεξεργασία των συμβάντων, επειδή τα συμβάντα θα συνεχίσουν να συμβαίνουν. Έτσι, ένας τέτοιος βρόχος πρέπει να εκτελείται συνεχώς περιμένοντας να συμβεί το επόμενο συμβάν. Από την άλλη πλευρά, το Tk παρέχει τρεις διαχειριστές διάταξης για την τοποθέτηση των στοιχείων ελέγχου που μπορούν να τοποθετηθούν μέσω των διαχειριστών διάταξης.Placer
(Ο προγραμματιστής παρέχει το μέγεθος και την τοποθέτηση του στοιχείου ελέγχου),Packer
(αυτόματη συμπλήρωση των στοιχείων ελέγχου σε κατάλληλες θέσεις) καιGrid
(Τοποθέτηση στοιχείων ελέγχου βάσει συντεταγμένων πλέγματος), τα οποία δεν θα περιγραφούν εδώ.
Το Pygame είναι μια λειτουργική μονάδα Python ανοιχτού κώδικα που χρησιμοποιείται ειδικά για την ανάπτυξη εφαρμογών πολυμέσων (όπως βιντεοπαιχνίδια), η οποία περιλαμβάνει υποστήριξη για εικόνες, ήχους, βίντεο, συμβάντα, συγκρούσεις κ.λπ. Το Pygame βασίζεται σε SDL, το οποίο είναι ένα σύνολο βιβλιοθηκών ανάπτυξης πολυμέσων πολλαπλών πλατφορμών που υλοποιούνται σε γλώσσα C και χρησιμοποιείται ευρέως στην ανάπτυξη παιχνιδιών, προσομοιωτών, παικτών κ.λπ. Το Pygame επιτρέπει στους προγραμματιστές παιχνιδιών να μην δεσμεύονται πλέον από την υποκείμενη γλώσσα και μπορούν να επικεντρωθούν περισσότερο στις λειτουργίες και τη λογική του παιχνιδιού.
Τώρα ας ολοκληρώσουμε ένα απλό παιχνίδι Το όνομα του παιχνιδιού είναι "Big Ball Eats Small". Κατανοήστε πώς να χρησιμοποιήσετε τα προηγούμενα βήματα στη διαδικασία Εξηγήστε τον αντικειμενοστραφή προγραμματισμό και μάθετε να χρησιμοποιείτε αυτήν την ιδέα προγραμματισμού για την επίλυση προβλημάτων της πραγματικής ζωής.
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()
Μπορείτε να σχεδιάσετε στο παράθυρο μέσω της λειτουργίας της ενότητας σχεδίασης στο pygame Τα γραφικά που μπορούν να σχεδιαστούν περιλαμβάνουν: γραμμές, ορθογώνια, πολύγωνα, κύκλους, ελλείψεις, τόξα κ.λπ. Θα πρέπει να σημειωθεί ότι το σύστημα συντεταγμένων οθόνης ορίζει την επάνω αριστερή γωνία της οθόνης ως αρχή συντεταγμένων (0, 0 προς τα δεξιά είναι η θετική κατεύθυνση του άξονα x και κάτω είναι η θετική κατεύθυνση του άξονα y). άξονας Κατά την έκφραση θέσης ή ρύθμισης μεγέθους, οι προεπιλεγμένες μονάδες μας είναι τα pixel. Το λεγόμενο pixel είναι ένα σημείο στην οθόνη Μπορείτε να χρησιμοποιήσετε το λογισμικό περιήγησης εικόνων για να προσπαθήσετε να μεγεθύνετε μια εικόνα πολλές φορές για να δείτε αυτά τα σημεία. Η χρωματική αναπαράσταση στο pygame χρησιμοποιεί τη μέθοδο αναπαράστασης τριών βασικών χρωμάτων, δηλαδή, η τιμή RGB του χρώματος καθορίζεται μέσω μιας πλειάδας ή λίστας Κάθε τιμή είναι μεταξύ 0 και 255, επειδή κάθε κύριο χρώμα χρησιμοποιεί ένα 8-bit (bit). Για να αναπαραστήσουν την τιμή, τα τρία χρώματα είναι ισοδύναμα με συνολικά 24 bit, που συχνά ονομάζεται "χρωματική αναπαράσταση 24 bit".
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()
Εάν πρέπει να φορτώσετε την εικόνα απευθείας στο παράθυρο, μπορείτε να χρησιμοποιήσετε τη λειτουργία της μονάδας εικόνας στο pygame για να φορτώσετε την εικόνα και στη συνέχεια να αποδώσετε την εικόνα μέσω της μεθόδου blit του αντικειμένου παραθύρου που λάβατε προηγουμένως.
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()
Όταν πρόκειται για τη λέξη κινούμενα σχέδια, όλοι είναι εξοικειωμένοι με αυτήν, στην πραγματικότητα, η ίδια η αρχή είναι πολύ απλή, η οποία είναι η συνεχής αναπαραγωγή ασυνεχών εικόνων, εφόσον επιτυγχάνεται ένας συγκεκριμένος αριθμός καρέ ανά δευτερόλεπτο. τότε μπορεί να γίνει Δημιουργήστε ένα πιο ομαλό εφέ κινουμένων σχεδίων. Εάν θέλετε η μπάλα στον παραπάνω κώδικα να μετακινηθεί, μπορείτε να χρησιμοποιήσετε μια μεταβλητή για να αναπαραστήσετε τη θέση της μπάλας, να τροποποιήσετε τη θέση της μπάλας στον βρόχο και, στη συνέχεια, να ανανεώσετε ολόκληρο το παράθυρο.
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()
Συνήθως θα υπάρχουν πολλά αντικείμενα σε ένα παιχνίδι και η «σύγκρουση» μεταξύ αυτών των αντικειμένων είναι αναπόφευκτη, όπως μια βολίδα που χτυπά ένα αεροπλάνο, ένα κουτί που χτυπά το έδαφος κ.λπ. Η ανίχνευση σύγκρουσης είναι ένα κρίσιμο ζήτημα που πρέπει να αντιμετωπιστεί στα περισσότερα παιχνίδια ανιχνεύστε εάν δύο μικρές μπάλες συγκρούονται. Χρειάζεται μόνο να ελέγξετε αν η απόσταση μεταξύ των κέντρων των σφαιρών είναι μικρότερη από το άθροισμα των ακτίνων των δύο σφαιρών. Για να δημιουργήσουμε περισσότερες μικρές μπάλες, μπορούμε να επεξεργαστούμε τα συμβάντα του ποντικιού για να δημιουργήσουμε μικρές μπάλες με τυχαία χρώματα, μεγέθη και ταχύτητες κίνησης στη θέση όπου γίνεται κλικ στο ποντίκι αντικειμενοστρεφής γνώση.
Τα συμβάντα του ποντικιού μπορούν να υποβληθούν σε επεξεργασία στον βρόχο συμβάντος Ο τύπος συμβάντος μπορεί να προσδιοριστεί μέσω του χαρακτηριστικού τύπου του αντικειμένου συμβάντος και η θέση του κλικ του ποντικιού μπορεί να ληφθεί μέσω του χαρακτηριστικού pos. Εάν θέλετε να χειριστείτε συμβάντα πληκτρολογίου, αυτό είναι επίσης το κατάλληλο μέρος.
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()
Συνδυάζοντας τα δύο παραπάνω κομμάτια κώδικα, ολοκληρώσαμε το παιχνίδι «η μεγάλη μπάλα τρώει τη μικρή μπάλα» (όπως φαίνεται στην παρακάτω εικόνα, δεν είναι παιχνίδι, αλλά έχουμε περάσει τις βασικές γνώσεις κατασκευής α). μικρό παιχνίδι Αυτό το παράδειγμα λέει σε όλους ότι με αυτή τη γνώση μπορείτε να ξεκινήσετε το ταξίδι ανάπτυξης μίνι παιχνιδιών. Στην πραγματικότητα, υπάρχουν πολλές περιοχές που αξίζει να βελτιωθούν στον παραπάνω κώδικα. Για παράδειγμα, ο κώδικας για την ανανέωση του παραθύρου και τη μετακίνηση της μπάλας δεν πρέπει να τοποθετηθεί στον βρόχο εκδήλωσης Ένα νήμα φόντου για να χειριστείτε αυτά τα πράγματα είναι μια καλύτερη επιλογή. Εάν θέλουμε να αποκτήσουμε καλύτερη εμπειρία χρήστη, μπορούμε επίσης να προσθέσουμε μουσική υπόκρουση στο παιχνίδι και να παίξουμε ηχητικά εφέ όταν η μπάλα συγκρούεται με την μπάλα Χρησιμοποιώντας το μίξερ και τις μονάδες μουσικής του pygame, μπορούμε να μάθουμε για αυτό Αυτό. Στην πραγματικότητα, αν θέλετε να μάθετε περισσότερα για το pygame, το καλύτερο σεμινάριο είναι ο επίσημος ιστότοπος του pygame Αν δεν έχετε πρόβλημα με τα αγγλικά, μπορείτε να πάτε και να ρίξετε μια ματιά. Εάν θέλετε να αναπτύξετε τρισδιάστατα παιχνίδια, το pygame φαίνεται να είναι ανεπαρκές Οι αναγνώστες που ενδιαφέρονται για την ανάπτυξη τρισδιάστατων παιχνιδιών μπορεί να θέλουν να ρίξουν μια ματιά στο Panda3D.