Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
深度Linux软件中心源码分析
Apps Section
4835
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.******fe@gmail.com
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
Issues wifi, openvpn, printer.
Failed to load rtl8761bu_fw.bin (SOLVED)
IPU Camera support
NVIDIA GPU Switching Support
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
===============================================================
本来是想 图文并茂的,可惜只能链接其它站点的图片,所以整理起来比较麻烦.下次继续分析!~!