Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
深度Linux软件中心源码分析
Apps Section
4753
views ·
7
replies ·
To
floor
Go
z85525006
deepin
2011-11-29 17:31
Author
由于作为一名刚入门的python的初学者,由于在C语言的功底下,才勉强的学习到现在.
虽然我对于Linux的开源世界不是很了解,但是我还是比较喜欢Linux的.
虽然有一些举动让同伴鄙视了,但是我还是会继续努力学习的,慢慢的成为一名合格的Linux程序员.
有什么地方分析不对的,还请大家多多见谅和给予解释,学习学习.
======================================================
打开目录:
点击 src 目录进入,看下面的图片, theme.py!
选区_004.png
一开始看我也找不到北.但是因为是界面程序,所以我决定从界面开始分析.
选区_005.png
我们首先从最上面开始分析,也就是从从界面下手来分析整个源码... ...
主题是可以更换的,可能由于我的是老版本吧..
=============================================================
打开../src/theme.py源码发行这么一行:
self.themeName = evalFile("../theme/list.txt")[0] #加载主题名
打开list.txt一看:
[
"default",
"stardust",
"blackgold",
"wood",
"deepinblue",
"green",
]
哦!大家顿时差不多就明白了.
===================================================================
../theme/default/ 目录就是现在的主题.原来是更改(theme.py)后面的的[0]改成[1]或者[2],就可以做到更换主题了.
我们开始继续分析上面的标题栏!!
打开 deepin-software-center.py 发现这么一行:
def __init (self) :的开始就一句可以看到了.
self.titlebar = titlebar.Titlebar(
self.showThemeSelectWindow,
self.showMoreWindow,
self.minWindow,
self.toggleWindow,
self.closeWindow)
showTemeSelectWindow.... closeWindow都是一些函数,在deepin-software-center.py中自己查看代码.
其实这些函数是要关联起来的,就和它们命名的函数名一样.
============================================================
然后继续往下看: def main(self):
self.topbox.pack_start(self.titlebar.box, False)
这里面的 box是调用 titlebar.py 中 def__init__里面的box.
对!就是这一行代码! self.titlebar.box ,看最上面的一行 import titlebar !!
我们打开 ../src/titlebar.h文件来看看!
from draw import * 一开始就调用了这个,这个文件里面全部都是画控件的函数,等一下分析!
发现代码: (几乎所有上面绘制都使用了这种方式调用)
self.closeButton = gtk.Button()
self.closeButton.connect("button-release-event", lambda w, e: closeCallback())
drawButton(self.closeButton, "close", "navigate")
self.controlBox.pack_start(self.closeButton, False, False)
几乎原理是一样的!
我们来分析 closeButton, button-release-event 这个事件表示的是鼠标放开时产生的事件!
closeCallback() 这个函数可以自己看!self.titlebar = titlebar.Titlebar(...最后一个参数传过来的,有点象函数指针!呵呵呵
w 代码的时 widget
e 代表的时 event
drawButton 让这个函数 带我们走入 draw.py,发现了函数:
def drawButton(widget, iconPrefix, subDir="cell", scaleX=False,
buttonLabel=None, fontSize=None, labelDColor=None):
又多了一个函数: buttonSetBackground,等下分析:
看看这个: %s/%s_normal.png ../cell/close_normal.png 下面的是 ../cell/close_hover.png
后面继续分析,上课去拉!
=============================================================
我今天也装了深度软件中心 2.0,给我的感觉就是一个字'爽'... ...
经过整理,我来先大家讲解深度Linux软件中心的界面布局情况.
在 deepin-software-center.py class DeepinSoftwareCenter(object): 函数中:
#有这几行代码
#这个就装全部界面布局的 主容器,是一个垂直容器
self.mainBox = gtk.VBox()
#topbox代表上部份
self.topbox = gtk.VBox()
#topbar事件盒子
self.topbar = gtk.EventBox()
Copy the Code
#这一句就是 精彩推荐,软件仓库,软件更新,软件卸载...的布局
#navigatebar.py中的class NavigateBar(object):的def __init__(self):中有这么一句
#self.box = gtk.HBox(),这个就是将所有(logo,navbox)放入box横向容器盒子
#先放logo,后放navbox. ps: logo就是左侧的: 软件中心图标, navbox就是: 精彩推荐,软件仓库...下载管理.
#所以 navigatebar.box 就是可以调用的.
self.navigatebar = navigatebar.NavigateBar() #
#继续看 deepin-software-center.py的代码,def main(self):有这几行代码.
1.self.window.add(self.mainBox)
2.self.mainBox.pack_start(self.topbar, False) #事件盒子,不解释,比如象:鼠标按下,放开.
3.self.topbar.add(self.topbox)#将事件盒子的事件邦定给上部分的布局.
4.self.topbox.pack_start(self.titlebar.box, False)#主题选择...缩小,放开,关闭按钮.
5.self.topbox.pack_start(self.navigatebar.box, False)#精彩推荐,软件仓库...下载管理.
6.self.mainBox.pack_start(self.bodyBox) #不解释,大家都明白这句话的意思.我慢慢说来.
Copy the Code
window.add就是将 mainbox添加进窗体.
我们大体就明白了,
mainbox上面包含 topbox,中间就是bodyBox(self.bodyBox = gtk.HBox()),最下面就是 statusbar.
这就是上,中,下部分的整体布局.
bodyBox里面海包括了一些,但是我们先分析上部份,后面再分析下部分.
#上部份大体就是这样:
topbox先放入titlebar.box
后放入navigatebar.box
这就是上半部分的整体布局.
我们来分析一下 titlebar.box,后面再下来分析 navigatebar.box!我们要一步步的分析.
从外到内,从上到下的分析。然后再分析内部实现的重要代码,比如下载,更新... ...
对了,提醒大家一句,那个主题选择不是菜单,也是一个窗体.(代码再:themeSelect.py 我们以后再分析)
#将窗体放在最底部的左侧以及没有标题边框,假象,根据坐标弹出菜单(窗体),太漂亮了!
#gtk_window_set_decorated (GTK_WINDOW(win1.window),FALSE);
#gtk_window_set_resizable (GTK_WINDOW(win1.window),FALSE);
self.window.set_decorated(False)
self.window.set_resizable(False)
手法牛X,向王勇学习了!
待续... ...我要学习了![整理需要时间]
==================================================
我们分析上部分的 topbox中的: navigatebar.box ,这里就是logo,还有精彩推荐....下载管理.
代码在 navigatebar.py 中.
这是一个 NavigateBar类, 主要是 box 那个参数.
class NavigateBar(object):
'''Interface for navigate bar.'''
def __init__(self):
'''Init for navigate bar.'''
# Init.
self.getUpgradableNumCallback = None
self.selectPageCallback = None
self.getRunningNumCallback = None
self.iconPadding = 8
self.pageId = PAGE_RECOMMEND
#保存 logo,精彩推荐....下载管理的总横向容器.
self.box = gtk.HBox()
self.logoIcon = self.createLogoIcon()#创建logoIcon 注: 最上面最左边的那个 深度Linux软件中心的logo图标.
self.logoAlign = gtk.Alignment()#实例一个 对齐控件
self.logoAlign.set_padding(0, 0, 60, 10) #设置对齐的填充.
#可以用下面的函数将logoIcon子构件添加到 对齐构件(logoAlign) 中
self.logoAlign.add(self.logoIcon)
self.box.pack_start(self.logoAlign, False, False)#将logo图标加入 box
self.navBox = gtk.HBox() #保存 精彩推介,软件仓库...下载管理.
self.navAlign = gtk.Alignment() # 对齐控件
self.navAlign.set(0.3, 0.5, 0.0, 0.0)
self.navAlign.set_padding(0, 0, 0, 60)
#可以用下面的函数将 navBox子构件 添加到 对齐构件(navAlign) 中
self.navAlign.add(self.navBox)
#将 精彩推介,软件仓库... 添加 进去 box
self.box.pack_start(self.navAlign, True, True)
#下面的代码顾名思义拉... ... 直接去翻 /image/navigate/.....png就可以发现了.
#这个函数我们慢慢来解释.
#下面的函数差不多一样的拉.
self.recommendIcon = self.createNavIcon(
"精选推荐",
# "Recommend",
"navigate/nav_recommend.png",
PAGE_RECOMMEND) #PAG....ND在 constant.py中查找. = 0
#将精选推荐加入 navbox
self.navBox.pack_start(self.recommendIcon, False, False, self.iconPadding)
self.repositoryIcon = self.createNavIcon(
"软件仓库",
# "Repository",
"navigate/nav_repo.png",
PAGE_REPO)
#将软件仓库加入 navBox
self.navBox.pack_start(self.repositoryIcon, False, False, self.iconPadding)
self.updateIcon = self.createUpdateIcon(
"软件更新",
# "Update",
"navigate/nav_update.png",
PAGE_UPGRADE,
self.getUpgradableNum)
#将软件更新加入 navBox
self.navBox.pack_start(self.updateIcon, False, False, self.iconPadding)
self.uninstallIcon = self.createNavIcon(
"软件卸载",
# "Uninstall",
"navigate/nav_uninstall.png",
PAGE_UNINSTALL)
self.navBox.pack_start(self.uninstallIcon, False, False, self.iconPadding)
self.downloadIcon = self.createUpdateIcon(
"下载管理",
# "Download",
"navigate/nav_download.png",
PAGE_DOWNLOAD_MANAGE,
self.getRunningNum)
self.navBox.pack_start(self.downloadIcon, False, False, self.iconPadding)
#最后是显示box中所有的内容... ...
self.box.show_all()
Copy the Code
C语言代码实例:【如果不明白,看看C语言代码,这是一个很乱的代码,因为cgtk没有完全的封装的好,怕影响到各位学习源码和绘制控件的方法.图片是软件中心的
有图有真相:
上次发了错误的代码,这次是王勇帮我改正,一个C语言画控件的小例子,我把封装了一点点的cgtk也发上去了,大家大家看看C语言多参数(...)的使用和指针的部分使用.由于本人能力有限,有不足的地方还往改正.
重绘.tar.gz
===============================================================
本来是想 图文并茂的,可惜只能链接其它站点的图片,所以整理起来比较麻烦.下次继续分析!~!
Reply
Like 0
Favorite
View the author
All Replies
一天
deepin
2011-11-29 17:50
#1
表示支持
Reply
Like 0
View the author
tuhaihe
deepin
2011-11-29 20:24
#2
赞!
Reply
Like 0
View the author
57548522
deepin
2011-11-30 20:54
#3
不懂编程 看不懂
Reply
Like 0
View the author
s.******
[email protected]
deepin
2011-12-01 08:19
#4
呵呵,学好了可以帮王勇开发了。
Reply
Like 0
View the author
z85525006
deepin
2011-12-01 18:43
#5
呵呵,学好了可以帮王勇开发了。
你怎么知道是我,晕。我要潜水... ...隐身.
Reply
Like 0
View the author
harford
deepin
2011-12-02 00:56
#6
我打算跟着学习。赞楼主
Reply
Like 0
View the author
z85525006
deepin
2011-12-02 02:38
#7
我打算跟着学习。赞楼主
是啊!赶快学习python,我学的是 python核心编程和pygtk只要你感兴趣,每日每夜的学习,吸收新的东西!
加油啊!我夜支持你啊`下了,吃饭!
Reply
Like 0
View the author
Please
sign
in first
New Thread
Popular Ranking
Change
A Big Step for the Deepin Community in Ecuador
translation
deepin install 23
configurar teclado macbook pro 2011
Google Chrome webapps grouped incorrectly in the dock
Popular Events
More
虽然我对于Linux的开源世界不是很了解,但是我还是比较喜欢Linux的.
虽然有一些举动让同伴鄙视了,但是我还是会继续努力学习的,慢慢的成为一名合格的Linux程序员.
有什么地方分析不对的,还请大家多多见谅和给予解释,学习学习.
======================================================
打开目录:
点击 src 目录进入,看下面的图片, theme.py!
选区_004.png
一开始看我也找不到北.但是因为是界面程序,所以我决定从界面开始分析.
选区_005.png
我们首先从最上面开始分析,也就是从从界面下手来分析整个源码... ...
主题是可以更换的,可能由于我的是老版本吧..
=============================================================
打开../src/theme.py源码发行这么一行:
self.themeName = evalFile("../theme/list.txt")[0] #加载主题名
打开list.txt一看:
[
"default",
"stardust",
"blackgold",
"wood",
"deepinblue",
"green",
]
哦!大家顿时差不多就明白了.
===================================================================
../theme/default/ 目录就是现在的主题.原来是更改(theme.py)后面的的[0]改成[1]或者[2],就可以做到更换主题了.
我们开始继续分析上面的标题栏!!
打开 deepin-software-center.py 发现这么一行:
def __init (self) :的开始就一句可以看到了.
self.titlebar = titlebar.Titlebar(
self.showThemeSelectWindow,
self.showMoreWindow,
self.minWindow,
self.toggleWindow,
self.closeWindow)
showTemeSelectWindow.... closeWindow都是一些函数,在deepin-software-center.py中自己查看代码.
其实这些函数是要关联起来的,就和它们命名的函数名一样.
============================================================
然后继续往下看: def main(self):
self.topbox.pack_start(self.titlebar.box, False)
这里面的 box是调用 titlebar.py 中 def__init__里面的box.
对!就是这一行代码! self.titlebar.box ,看最上面的一行 import titlebar !!
我们打开 ../src/titlebar.h文件来看看!
from draw import * 一开始就调用了这个,这个文件里面全部都是画控件的函数,等一下分析!
发现代码: (几乎所有上面绘制都使用了这种方式调用)
self.closeButton = gtk.Button()
self.closeButton.connect("button-release-event", lambda w, e: closeCallback())
drawButton(self.closeButton, "close", "navigate")
self.controlBox.pack_start(self.closeButton, False, False)
几乎原理是一样的!
我们来分析 closeButton, button-release-event 这个事件表示的是鼠标放开时产生的事件!
closeCallback() 这个函数可以自己看!self.titlebar = titlebar.Titlebar(...最后一个参数传过来的,有点象函数指针!呵呵呵
w 代码的时 widget
e 代表的时 event
drawButton 让这个函数 带我们走入 draw.py,发现了函数:
def drawButton(widget, iconPrefix, subDir="cell", scaleX=False,
buttonLabel=None, fontSize=None, labelDColor=None):
又多了一个函数: buttonSetBackground,等下分析:
看看这个: %s/%s_normal.png ../cell/close_normal.png 下面的是 ../cell/close_hover.png
后面继续分析,上课去拉!
=============================================================
我今天也装了深度软件中心 2.0,给我的感觉就是一个字'爽'... ...
经过整理,我来先大家讲解深度Linux软件中心的界面布局情况.
在 deepin-software-center.py class DeepinSoftwareCenter(object): 函数中:
#有这几行代码
#navigatebar.py中的class NavigateBar(object):的def __init__(self):中有这么一句
#self.box = gtk.HBox(),这个就是将所有(logo,navbox)放入box横向容器盒子
#先放logo,后放navbox. ps: logo就是左侧的: 软件中心图标, navbox就是: 精彩推荐,软件仓库...下载管理.
#所以 navigatebar.box 就是可以调用的.
self.navigatebar = navigatebar.NavigateBar() #
#继续看 deepin-software-center.py的代码,def main(self):有这几行代码.
我们大体就明白了,
mainbox上面包含 topbox,中间就是bodyBox(self.bodyBox = gtk.HBox()),最下面就是 statusbar.
这就是上,中,下部分的整体布局.
bodyBox里面海包括了一些,但是我们先分析上部份,后面再分析下部分.
#上部份大体就是这样:
topbox先放入titlebar.box
后放入navigatebar.box
这就是上半部分的整体布局.
我们来分析一下 titlebar.box,后面再下来分析 navigatebar.box!我们要一步步的分析.
从外到内,从上到下的分析。然后再分析内部实现的重要代码,比如下载,更新... ...
对了,提醒大家一句,那个主题选择不是菜单,也是一个窗体.(代码再:themeSelect.py 我们以后再分析)
#将窗体放在最底部的左侧以及没有标题边框,假象,根据坐标弹出菜单(窗体),太漂亮了!
#gtk_window_set_decorated (GTK_WINDOW(win1.window),FALSE);
#gtk_window_set_resizable (GTK_WINDOW(win1.window),FALSE);
self.window.set_decorated(False)
self.window.set_resizable(False)
手法牛X,向王勇学习了!
待续... ...我要学习了![整理需要时间]
==================================================
我们分析上部分的 topbox中的: navigatebar.box ,这里就是logo,还有精彩推荐....下载管理.
代码在 navigatebar.py 中.
这是一个 NavigateBar类, 主要是 box 那个参数.
C语言代码实例:【如果不明白,看看C语言代码,这是一个很乱的代码,因为cgtk没有完全的封装的好,怕影响到各位学习源码和绘制控件的方法.图片是软件中心的
有图有真相:
上次发了错误的代码,这次是王勇帮我改正,一个C语言画控件的小例子,我把封装了一点点的cgtk也发上去了,大家大家看看C语言多参数(...)的使用和指针的部分使用.由于本人能力有限,有不足的地方还往改正.
重绘.tar.gz
===============================================================
本来是想 图文并茂的,可惜只能链接其它站点的图片,所以整理起来比较麻烦.下次继续分析!~!