使用Moblin開發應用程式 -- Clutter之Actor與Stage
微軟Surface推出後,其中的圖片與視訊瀏覽器讓人留下了比較深刻的印象。藉著學習clutter的機會,我就打算做一個類似的圖片瀏覽器。逛了clutter的網站後發現,clutter居然有python binding,於是決定使用pyclutter進行程式的開發。
第一個demo很簡單:將一堆照片隨意放在桌面上。J
這次會接觸到2個有關clutter的概念:Actor和Stage。Actor和Stage,顧名思義,演員與舞臺。沒錯,從本質上講,clutter就是讓一群2維的Actor在3維的Stage上表演。ClutterActor是所有Actor的父類,它是一個抽象類,提供一些Actor的通用的操作,如位移、旋轉、縮放等。使用者在程式設計中可以繼承ClutterActor以開發自定義的Actor,也可以使用Clutter現有的一些Actor,如ClutterRectangle、ClutterTexture、ClutterCloneTexture、ClutterLabel、ClutterEntry等。同時,Clutter中也有些容器類,如ClutterStage和ClutterGroup,它們也是ClutterActor的子類。
在這個demo中,我們將會用到ClutterStage、ClutterGroup、ClutterRectangle和ClutterTexture。Demo的原始碼如下:
#!/usr/bin/python
import sys
import os
import random
import clutter
STAGE_WIDTH=1024
STAGE_HEIGHT=768
class Photo:
border_width = 10
def __init__(self, path, stage):
self.stage = stage
self.path = path
self.x = 0
self.y = 0
self.degree = 0
self.pic = clutter.Texture()
self.pic.set_from_file(path)
self.width = self.pic.get_width()+2*Photo.border_width
self.height = self.pic.get_height()+2*Photo.border_width
self.frame. = clutter.Rectangle()
self.frame.set_color(clutter.Color(0xff, 0xff, 0xff, 0xff))
self.frame.set_position(self.x, self.y)
self.frame.set_size(self.width, self.height)
self.group = clutter.Group()
self.group.add(self.frame)
self.group.add(self.pic)
self.pic.set_position(PHOTO_BORDER_WIDTH, PHOTO_BORDER_WIDTH)
self.stage.add(self.group)
def set_random_position(self):
stage_width = self.stage.get_width()
stage_height = self.stage.get_height()
left = random.randint(0, stage_width)
top = random.randint(0, stage_height)
degree = random.randint(0, 360)
while left+self.width > stage_width:
left = random.randint(0, stage_width)
while top+self.height > stage_height:
top = random.randint(0, stage_height)
self.set_position(left, top, degree)
def set_position(self, x, y, degree):
self.x = x
self.y = y
self.degree = degree
self.group.set_position(x, y)
self.group.set_rotation(clutter.Z_AXIS, degree, (x+self.width)/2, (y+self.width)/2, 0)
def main(args):
if len(args) < 2:
print "The number of arguments is less than 2!"
return -1
path=args[1]
if not os.path.exists(path):
print path, "doesn't exist!"
return -1
stage = clutter.Stage()
stage.set_size(STAGE_WIDTH, STAGE_HEIGHT)
stage.set_color(clutter.Color(0x00, 0x00, 0x00, 0x00))
if not path.endswith(os.sep):
path+=os.sep
filelist = os.listdir(path)
for item in filelist:
pic=Photo(path+item, stage)
pic.set_random_position()
stage.show_all()
clutter.main()
if __name__ == '__main__':
sys.exit(main(sys.argv))
基本思路:用ClutterTexture裝載圖片,ClutterRectangle做相片的邊框,通過ClutterGroup將兩者組合,然後隨機產生相片的位置與角度,通過ClutterActor類提供的方法進行設定。
Demo的使用方法:安裝pyclutter先 :)。假設原始碼儲存為cimage.py,存放圖片的目錄為/home/images,則在命令列下執行#./cimage.py /home/images即可。
Demo的功能非常簡單,希望通過這個Demo能使大家瞭解Actor與Stage的一些基本用法。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21255398/viewspace-594845/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Moblin開發應用程式 - Clutter之GTK與Clutter
- HarmonyOS:應用程式包結構(1)Stage模型應用程式包結構模型
- moblin開發環境試裝記事開發環境
- 開發 SOA 應用程式
- 使用 Tye 輔助開發 dotnet 應用程式
- 如何使用 VS Code 開發.NET Core應用程式
- 【T04】開發並使用應用程式框架框架
- 用AJAX開發智慧Web應用程式之基礎篇(轉)Web
- 前端開發規範之React應用使用ESLint前端ReactEsLint
- 應用程式通用開發框架框架
- 使用 Flutter 加速應用開發Flutter
- 使用VS Code開發 除錯.NET Core 應用程式除錯
- 怎樣使用AJAX進行應用程式開發(轉)
- 兩種Oracle應用程式開發介面之簡要分析Oracle
- 使用Taro開發鴻蒙原生應用——快速上手,鴻蒙應用開發指南鴻蒙
- 使用 Taro 開發鴻蒙原生應用 —— 快速上手,鴻蒙應用開發指南鴻蒙
- 鴻蒙系統應用開發之開發準備鴻蒙
- java開發系統核心:使用C語言開發系統應用程式JavaC語言
- 使用MyEclipse開發Java EE應用:企業級應用程式專案(下)EclipseJava
- 使用MyEclipse開發Java EE應用:企業級應用程式專案(上)EclipseJava
- 開發Web應用程式中Cookie使用的問題 (轉)WebCookie
- 用低程式碼開發平臺開發應用可靠嗎
- 《iOS應用開發指南——使用HTML5、CSS3和JavaScript》——1.3 移動應用程式≠桌面應用程式iOSHTMLCSSS3JavaScript
- VC開發應用程式答疑 (轉)
- 《反應式應用開發》之“什麼是反應式應用”
- 使用JAVA開發CORBA應用 (轉)JavaORB
- 低程式碼應用程式開發開始興起
- 開始使用 Python 開發 Web 應用PythonWeb
- 《iOS應用開發指南——使用HTML5、CSS3和JavaScript》——1.3節移動應用程式≠桌面應用程式iOSHTMLCSSS3JavaScript
- Yeoman:Web 應用開發流程與工具Web
- iOS 11開發教程(十八)iOS11應用檢視之使用程式碼新增按鈕iOS
- 在零程式碼開發平臺上如何開發應用程式
- 在Delphi中開發使用多顯示器的應用程式
- Linux下應用程式開發:使用QT製作Skin(轉)LinuxQT
- VC++串列埠程式設計之簡訊應用開發(轉)C++串列埠程式設計
- Cordova - 使用Cordova開發iOS應用實戰1(配置、開發第一個應用)iOS
- 移動應用程式開發簡介!
- 淺談桌面應用程式的開發