Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
clutter学习笔记三(不是教程,请不要骂人)
社区开发
1951
views ·
0
replies ·
To
floor
Go
z85525006
deepin
2012-02-05 06:59
Author
笔记作的不是很完整,都是从网上整理出来的!请大家不要喷我.,
==============================
容器: groutp很重要的东西,可以看clutter官方的python的例子,慢慢看哈!哈哈哈... ...
一些 clutter actor 实现了 Clutter.Container 接口,这些 actor 可以包含自己的子 actor。另外,变换 (transformation)和属性改变也作用于子 actor 。用 clutter.container.add() 函数将 actor 加到 container 中
Clutter.Stage 就是一个 container,可以包含自己的 actor。Clutter 核心库里另一个 container 是 Clutter.Group,对于 group 的缩放、旋转和剪切也会作用于子 actor,这会简化代码。
其它 Clutter container 可以在 Tidy toolkit library 中找到。
========================================================
例子:
#!/usr/bin/env python
#!^-^ coding:utf-8 ^-^
import clutter
class Clutter:
def __init__ (self):
self.stage_color = clutter.Color(0x00, 0x00, 0x00, 0xff)
self.actor_color = clutter.Color(0xff, 0xff, 0xff, 0xB0)
self.stage = clutter.Stage()
self.stage.set_size(350, 350)
self.stage.set_color(self.stage_color)
self.stage.connect("destroy", clutter.main_quit)
self.group = clutter.Group()
self.group.set_position(40, 40)
self.stage.add(self.group)
self.texture = clutter.Texture("linux.png")
self.texture.set_position(150, 100)
self.group.add(self.texture)
self.label = clutter.Text("Mono 14", "欢迎加入深度", self.actor_color)
self.label.set_position(150, 240)
self.group.add(self.label)
self.stage.connect("button-press-event", self.on_stage_button_press)
self.stage.connect("button-release-event", self.on_stage_button_release_event)
def run(self):
clutter.Actor.show_all(self.stage)
def on_stage_button_press(self, stage, event):
self.texture.set_scale(3.0, 1.0)
return True
def on_stage_button_release_event(self, stage, event):
self.texture.set_scale(1.0, 1.0)
return True
if __name__ == '__main__':
app = Clutter()
app.run()
clutter.main()
Copy the Code
========================================================
事件:
基类 ClutterActor 有几个信号,当用户与 actor 交互时信号会被发出:
button-press-event: 当在 actor 上按下鼠标时发出;
button-release-event: 当在 actor 上释放鼠标时发出;
motion-event: 当在 actor 上移动鼠标时发出;
enter-event: 当鼠标移入 actor 区域时发出;
leave-event: 当鼠标移出 actor 区域时发出。
例如,可以这样检测在一个 actor 上点击了鼠标:
****.connect ( "button-press-event", 回调函数)
另外,也可以仅仅处理来自 parent ClutterStage 的信号,然后用clutter.Stage.get_actor_at_pos() 找出信号来源于哪个 actor。
然而,从性能优化上考虑, Clutter 默认状态下不会发送所有的事件信号。例如,要收到 actor 的事件信号,而不仅仅是 stage,必须调用 clutter.Actor.set_reactive()。
通过捕获事件信号 (captured-event signal),Clutter 首先让 stage 处理每个事件。 若 stage 不处理这些事件,那么事件会被传递给 child actor;事件首先被传递给 actor 的 container,若 container 仍然不对出事件进行处理,那么事件将会以特殊信号 (比如 button-press-event 或者 key-press-event) 的方式发送。这些特殊信号首先由 child actor 发出,然后是它的 parent,其次是stage,除非有信号处理函数对信号进行处理并返回 true。
当 actor 有按键焦点时,它通常只收到键盘事件。
===================================================================
例子:
#!/usr/bin/env python
#! coding:utf-8
import clutter
import gtk
class Clutter():
def __init__(self):
stage_color = clutter.Color(0x00, 0x00, 0x00, 0xff)
self.actor_color = clutter.Color(0xff, 0xff, 0xff, 0xB0)
self.stage = clutter.Stage()
self.stage.set_size(200, 200)
self.stage.set_color(stage_color)
#换张图片试试 Texture('linux.png')
self.rect = clutter.Rectangle()
self.rect.set_size(100, 100)
self.rect.set_position(50, 50)
self.rect.set_color(self.actor_color)
self.stage.add(self.rect)
self.stage.connect('destroy', clutter.main_quit)
self.stage.connect('button-press-event', self.on_stage_button_press)
#actor的事件缺省是不开启的.为了提高性能可关闭移动鼠标的触发
self.rect.set_reactive(True)
#当在actor上按下 鼠标时发出
self.rect.connect('button-press-event', self.on_actor_button_press)
#当在actor上释放 鼠标.....
self.rect.connect('button-release-event', self.on_actor_button_release)
#当在actor上移动鼠标时发出
self.rect.connect('motion-event', self.on_actor_motion_event)
#当鼠标移入actor区域时发出
self.rect.connect('enter-event', self.on_actor_enter_event)
#当鼠标移出actor区域时发出
self.rect.connect('leave-event', self.on_actor_leave_event)
def run(self):
clutter.Actor.show_all(self.stage)
#当按下actor的时候,stage也被触发.所以可以想像...
def on_stage_button_press(self, stage, event):
print 'stage按下鼠标'
def on_actor_button_press(self, rect, event):
print 'actor你按下了--鼠标'
self.actor_color = (0xff, 0xff, 0xff, 0xE0)
self.rect.set_color(self.actor_color)
return True
def on_actor_button_release(self, rect, event):
print '你放开了|鼠标(actor)'
self.actor_color = (0xff, 0xff, 0xff, 0xA0)
self.rect.set_color(self.actor_color)
return True
def on_actor_motion_event(self, rect, event):
print '鼠标移动(actor)中' + str(event.x) + ':' + str(event.y)
return True
def on_actor_enter_event(self, rect, event):
print '你(actor)移进来了!!'
self.rect.set_scale(1.2, 1.2)
return True
def on_actor_leave_event(self, rect, event):
print '(actor)移出去了'
self.rect.set_scale(1.0, 1.0)
return True
if __name__ == '__main__':
app = Clutter()
app.run()
clutter.main()
Copy the Code
======================================================================
Reply
Like 0
Favorite
View the author
All Replies
No replies yet
Please
sign
in first
New Thread
Popular Ranking
Change
如何安装软件安装包?
Instructions on How to change the language in Thunderbird
EZVIZ on Linux
Popular Events
More
==============================
容器: groutp很重要的东西,可以看clutter官方的python的例子,慢慢看哈!哈哈哈... ...
一些 clutter actor 实现了 Clutter.Container 接口,这些 actor 可以包含自己的子 actor。另外,变换 (transformation)和属性改变也作用于子 actor 。用 clutter.container.add() 函数将 actor 加到 container 中
Clutter.Stage 就是一个 container,可以包含自己的 actor。Clutter 核心库里另一个 container 是 Clutter.Group,对于 group 的缩放、旋转和剪切也会作用于子 actor,这会简化代码。
其它 Clutter container 可以在 Tidy toolkit library 中找到。
========================================================
例子:
事件:
基类 ClutterActor 有几个信号,当用户与 actor 交互时信号会被发出:
button-press-event: 当在 actor 上按下鼠标时发出;
button-release-event: 当在 actor 上释放鼠标时发出;
motion-event: 当在 actor 上移动鼠标时发出;
enter-event: 当鼠标移入 actor 区域时发出;
leave-event: 当鼠标移出 actor 区域时发出。
例如,可以这样检测在一个 actor 上点击了鼠标:
****.connect ( "button-press-event", 回调函数)
另外,也可以仅仅处理来自 parent ClutterStage 的信号,然后用clutter.Stage.get_actor_at_pos() 找出信号来源于哪个 actor。
然而,从性能优化上考虑, Clutter 默认状态下不会发送所有的事件信号。例如,要收到 actor 的事件信号,而不仅仅是 stage,必须调用 clutter.Actor.set_reactive()。
通过捕获事件信号 (captured-event signal),Clutter 首先让 stage 处理每个事件。 若 stage 不处理这些事件,那么事件会被传递给 child actor;事件首先被传递给 actor 的 container,若 container 仍然不对出事件进行处理,那么事件将会以特殊信号 (比如 button-press-event 或者 key-press-event) 的方式发送。这些特殊信号首先由 child actor 发出,然后是它的 parent,其次是stage,除非有信号处理函数对信号进行处理并返回 true。
当 actor 有按键焦点时,它通常只收到键盘事件。
===================================================================
例子:
======================================================================