Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
clutter学习笔记三(不是教程,请不要骂人)
社区开发
1835
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
Recommended
Change
Deepin System Updates (2022.6.15)
New Thread
Rankings
7 days
30 days
90 days
1
阿尼樱奈奈
128 posts
2
buyike
105 posts
3
jjcui8595
90 posts
4
晚秋(lateautumn)
55 posts
5
Merlin
49 posts
6
神末shenmo
45 posts
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 有按键焦点时,它通常只收到键盘事件。
===================================================================
例子:
======================================================================