使用Python和Pygame建立簡易畫圖軟體



這是一個Python指令碼,允許使用者透過**Pygame**庫在螢幕上繪圖。它記錄滑鼠事件以實現繪圖功能,每次新的繪製都可能使用隨機顏色,並且筆刷大小也是可選擇的。該指令碼清晰地展示了基於塊的程式設計的主要思想,例如事件處理、繪圖以及利用隨機性控制視覺效果的概念,避免了不必要的複雜性。

所需庫

要執行此指令碼,您需要安裝以下庫:

Pygame

此庫用於在Python中開發影片遊戲和圖形介面。它負責管理視窗、捕獲使用者輸入,甚至在螢幕上繪圖。

進入終端並執行以下程式碼:

pip install pygame

建立簡易畫圖軟體的步驟

步驟1:匯入必要的模組

**您需要匯入**pygame – 它提供建立繪圖介面所需的功能

以及**random** – 用於為每次新的筆觸生成隨機顏色。

import pygame, random

步驟2:初始化Pygame

要初始化pygame,請使用init()方法。以下程式碼語句用於初始化pygame:

pygame.init()

步驟3:設定顯示

**使用以下程式碼語句**建立一個大小為1024x768畫素的視窗,繪圖將在其中進行:

screen = pygame.display.set_mode((1024, 768))

步驟4:初始化繪圖設定

要初始化繪圖設定,請使用以下變數:

  • **draw_on** – 一個布林標誌,跟蹤滑鼠按鈕是否按下。
  • **last_pos** – 用於跟蹤上一個滑鼠位置以繪製連續線。
  • **color** – 初始筆刷顏色,設定為藍色陰影。
  • **radius** – 筆刷大小,設定為15畫素。

以下程式碼語句用於初始化繪圖設定:

draw_on = False
last_pos = (0, 0)
color = (0, 128, 255)
radius = 15

步驟5:定義圓形線條函式

以下是定義圓形線條函式的程式碼:

def roundline(srf, color, start, end, radius=1):
   dx = end[0] - start[0]
   dy = end[1] - start[1]
   distance = max(abs(dx), abs(dy))
   for i in range(distance):
      x = int(start[0] + float(i) / distance * dx)
      y = int(start[1] + float(i) / distance * dy)
      pygame.draw.circle(srf, color, (x, y), radius)

步驟6:處理退出事件

要處理退出事件,請使用以下程式碼:

e = pygame.event.wait()
if e.type == pygame.QUIT:
   raise StopIteration

步驟7:處理滑鼠按鈕按下事件

要處理滑鼠按鈕按下事件,請使用以下程式碼:

if e.type == pygame.MOUSEBUTTONDOWN:
   color = (random.randrange(100, 256), random.randrange(100, 256), random.randrange(100, 256))
   pygame.draw.circle(screen, color, e.pos, radius)
   draw_on = True

步驟8:處理指令碼終止

使用以下程式碼處理指令碼終止:

except StopIteration:
   pass
pygame.quit()

使用Python和Pygame建立簡易畫圖軟體的程式碼

import pygame, random

# Initialize Pygame
pygame.init()

# Set up the display
screen = pygame.display.set_mode((1024, 768))  # Changed resolution to 1024x768

# Initialize drawing settings
draw_on = False
last_pos = (0, 0)
color = (0, 128, 255)  # Changed initial color to a blue shade
radius = 15  # Increased the brush size to 15

def roundline(srf, color, start, end, radius=1):
   dx = end[0] - start[0]
   dy = end[1] - start[1]
   distance = max(abs(dx), abs(dy))
   for i in range(distance):
      x = int(start[0] + float(i) / distance * dx)
      y = int(start[1] + float(i) / distance * dy)
      pygame.draw.circle(srf, color, (x, y), radius)

try:
   while True:
      e = pygame.event.wait()
      if e.type == pygame.QUIT:
         raise StopIteration
      if e.type == pygame.MOUSEBUTTONDOWN:
         color = (random.randrange(100, 256), random.randrange(100, 256), random.randrange(100, 256))  # Restricted color range to brighter colors
         pygame.draw.circle(screen, color, e.pos, radius)
         draw_on = True
      if e.type == pygame.MOUSEBUTTONUP:
         draw_on = False
      if e.type == pygame.MOUSEMOTION:
         if draw_on:
            pygame.draw.circle(screen, color, e.pos, radius)
            roundline(screen, color, e.pos, last_pos, radius)
         last_pos = e.pos
      pygame.display.flip()

except StopIteration:
   pass

pygame.quit()

輸出

執行此指令碼後,將建立一個背景顏色為白色的視窗,沒有任何其他內容。當您使用滑鼠單擊並拖動時,顏色路徑會像虛擬地跟隨游標一樣出現。每次您開始新的筆觸時,選擇的顏色都會與之前的顏色不同,因此您正在主動繪圖。

Pygame

使用滑鼠右鍵,您也可以這樣繪圖。

程式碼解釋

  • 指令碼首先匯入一些模組:用於圖形和輸入控制的 Pygame;用於隨機顏色建立的 random。
  • 它只啟動 Pygame 並開啟具有所需解析度的繪圖視窗。
  • 首先,設定繪圖的各個方面,例如顏色選擇和繪圖所用畫筆的大小。
  • 建立了一個輔助函式 `roundline`,以便在需要時使繪製的線條更平滑。
  • 主迴圈的目的是處理不同的事件,例如滑鼠點選和移動,並在畫布上繪圖。

同時,頻繁更新顯示繪圖的顯示屏,以即時反映繪圖。

  • 當用戶關閉視窗時,指令碼也會停止執行,因此在指令碼終止時不會執行任何突然的操作。
  • 每次新的滑鼠點選都會產生新的顏色,這使得它成為一個有趣的繪圖工具。
  • 繪圖基於游標的移動,並藉助持續的事件處理實現互動性。
  • 最後,指令碼退出 Pygame,這也關閉了正在繪製形狀的視窗。
  • 雖然非常基礎——但此指令碼提供了一個很好的示例,說明了如何使用 Python 和 Pygame 接受使用者輸入以及繪製圖形影像。
python_reference.htm
廣告