作者:z85525006:Linux Deepin 论坛

由于作为一名刚入门的python的初学者,由于在C语言的功底下,才勉强的学习到现在。
虽然我对于Linux的开源世界不是很了解,但是我还是比较喜欢Linux的。虽然有一些举动让同伴鄙视了,但是我还是会继续努力学习的,慢慢的成为一名合格的Linux程序员。
有什么地方分析不对的,还请大家多多见谅和给予解释,学习学习。

(1)

打开目录:


点击 src 目录进入,看下面的图片, theme.py!

一开始看我也找不到北,但是因为是界面程序,所以我决定从界面开始分析。

我们首先从最上面开始分析,也就是从从界面下手来分析整个源码... ...

主题是可以更换的。(原作者使用的是旧版本的软件中心)
===========
打开../src/theme.py源码发行这么一行:
self.themeName = evalFile("../theme/list.txt")[0] #加载主题名
打开list.txt一看:

哦!大家顿时差不多就明白了.
==========================

../theme/default/ 目录就是现在的主题.原来是更改(theme.py)后面的的[0]改成[1]或者[2],就可以做到更换主题了.

我们开始继续分析上面的标题栏!!

打开 deepin-software-center.py 发现这么一行:

def __init (self) :的开始就一句可以看到了。

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 * 一开始就调用了这个,这个文件里面全部都是画控件的函数,等一下分析!

发现代码: (几乎所有上面绘制都使用了这种方式调用)

几乎原理是一样的!
我们来分析 closeButton, button-release-event 这个事件表示的是鼠标放开时产生的事件!
closeCallback() 这个函数可以自己看!self.titlebar = titlebar.Titlebar(...最后一个参数传过来的,有点象函数指针!
w 代码的时 widget
e 代表的时 event

drawButton 让这个函数带我们走入 draw.py,发现了函数:

又多了一个函数: 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):有这几行代码:

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)

================

我们分析上部分的 topbox中的: navigatebar.box ,这里就是logo,还有精彩推荐....下载管理。

代码在 navigatebar.py中,这是一个 NavigateBar 类, 主要是box 那个参数。

C语言代码实例:【如果不明白,看看C语言代码,虽然没有封装完GTK+,但是我会继续封装完的

有图有真相:

期待网友z85525006的继续给力!

4 Comments

发表评论