{"id":19468,"date":"2011-12-15T13:45:32","date_gmt":"2011-12-15T05:45:32","guid":{"rendered":"https:\/\/www.deepin.org\/?p=241"},"modified":"2011-12-15T13:45:32","modified_gmt":"2011-12-15T05:45:32","slug":"deepin-linuxsoftware-center-source-code-analyse","status":"publish","type":"post","link":"https:\/\/www.deepin.org\/zh\/deepin-linuxsoftware-center-source-code-analyse\/","title":{"rendered":"\u6df1\u5ea6Linux\u8f6f\u4ef6\u4e2d\u5fc3\u6e90\u7801\u5206\u6790"},"content":{"rendered":"<p>\u4f5c\u8005\uff1a<a href=\"http:\/\/www.linuxdeepin.com\/forum\/members\/3737\">z85525006<\/a>:<a href=\"http:\/\/www.linuxdeepin.com\/forum\/6\/3896\" target=\"_blank\">Linux Deepin \u8bba\u575b<\/a><\/p>\n<p>\u7531\u4e8e\u4f5c\u4e3a\u4e00\u540d\u521a\u5165\u95e8\u7684python\u7684\u521d\u5b66\u8005\uff0c\u7531\u4e8e\u5728C\u8bed\u8a00\u7684\u529f\u5e95\u4e0b\uff0c\u624d\u52c9\u5f3a\u7684\u5b66\u4e60\u5230\u73b0\u5728\u3002<br \/> \u867d\u7136\u6211\u5bf9\u4e8eLinux\u7684\u5f00\u6e90\u4e16\u754c\u4e0d\u662f\u5f88\u4e86\u89e3,\u4f46\u662f\u6211\u8fd8\u662f\u6bd4\u8f83\u559c\u6b22Linux\u7684\u3002\u867d\u7136\u6709\u4e00\u4e9b\u4e3e\u52a8\u8ba9\u540c\u4f34\u9119\u89c6\u4e86\uff0c\u4f46\u662f\u6211\u8fd8\u662f\u4f1a\u7ee7\u7eed\u52aa\u529b\u5b66\u4e60\u7684\uff0c\u6162\u6162\u7684\u6210\u4e3a\u4e00\u540d\u5408\u683c\u7684Linux\u7a0b\u5e8f\u5458\u3002<br \/> \u6709\u4ec0\u4e48\u5730\u65b9\u5206\u6790\u4e0d\u5bf9\u7684\uff0c\u8fd8\u8bf7\u5927\u5bb6\u591a\u591a\u89c1\u8c05\u548c\u7ed9\u4e88\u89e3\u91ca\uff0c\u5b66\u4e60\u5b66\u4e60\u3002<\/p>\n<h3>\uff081\uff09<\/h3>\n<p>\u6253\u5f00\u76ee\u5f55:<br \/> <a href=\"https:\/\/www.deepin.org\/wp-content\/uploads\/2011\/12\/\u9009\u533a_003.png\"><img class=\" size-full wp-image-243 aligncenter\" title=\"\u9009\u533a_003\" src=\"https:\/\/www.deepin.org\/wp-content\/uploads\/2011\/12\/\u9009\u533a_003.png\" alt=\"\" width=\"607\" \/><\/a><br \/> <!--more--><br \/> \u70b9\u51fb src \u76ee\u5f55\u8fdb\u5165,\u770b\u4e0b\u9762\u7684\u56fe\u7247, theme.py!<br \/> <a href=\"https:\/\/www.deepin.org\/wp-content\/uploads\/2011\/12\/\u9009\u533a_004.png\"><img class=\" size-full wp-image-244 aligncenter\" title=\"\u9009\u533a_004\" src=\"https:\/\/www.deepin.org\/wp-content\/uploads\/2011\/12\/\u9009\u533a_004.png\" alt=\"\" width=\"691\" \/><\/a><\/p>\n<p>\u4e00\u5f00\u59cb\u770b\u6211\u4e5f\u627e\u4e0d\u5230\u5317,\u4f46\u662f\u56e0\u4e3a\u662f\u754c\u9762\u7a0b\u5e8f\uff0c\u6240\u4ee5\u6211\u51b3\u5b9a\u4ece\u754c\u9762\u5f00\u59cb\u5206\u6790\u3002<\/p>\n<p>\u6211\u4eec\u9996\u5148\u4ece\u6700\u4e0a\u9762\u5f00\u59cb\u5206\u6790\uff0c\u4e5f\u5c31\u662f\u4ece\u4ece\u754c\u9762\u4e0b\u624b\u6765\u5206\u6790\u6574\u4e2a\u6e90\u7801... ...<\/p>\n<p>\u4e3b\u9898\u662f\u53ef\u4ee5\u66f4\u6362\u7684\u3002\uff08\u539f\u4f5c\u8005\u4f7f\u7528\u7684\u662f\u65e7\u7248\u672c\u7684\u8f6f\u4ef6\u4e2d\u5fc3\uff09<br \/> ===========<br \/> \u6253\u5f00..\/src\/theme.py\u6e90\u7801\u53d1\u884c\u8fd9\u4e48\u4e00\u884c:<br \/> <code>self.themeName = evalFile(\"..\/theme\/list.txt\")[0] #\u52a0\u8f7d\u4e3b\u9898\u540d<\/code><br \/> \u6253\u5f00list.txt\u4e00\u770b:<\/p>\n<pre>[\n\"default\",\n\"stardust\",\n\"blackgold\",\n\"wood\",\n\"deepinblue\",\n\"green\",\n]\n<\/pre>\n<p>\u54e6\uff01\u5927\u5bb6\u987f\u65f6\u5dee\u4e0d\u591a\u5c31\u660e\u767d\u4e86.<br \/> ==========================<\/p>\n<p><em>..\/theme\/default\/ <\/em>\u76ee\u5f55\u5c31\u662f\u73b0\u5728\u7684\u4e3b\u9898.\u539f\u6765\u662f\u66f4\u6539(theme.py)\u540e\u9762\u7684\u7684[0]\u6539\u6210[1]\u6216\u8005[2],\u5c31\u53ef\u4ee5\u505a\u5230\u66f4\u6362\u4e3b\u9898\u4e86.<\/p>\n<p>\u6211\u4eec\u5f00\u59cb\u7ee7\u7eed\u5206\u6790\u4e0a\u9762\u7684\u6807\u9898\u680f!!<\/p>\n<p>\u6253\u5f00 deepin-software-center.py \u53d1\u73b0\u8fd9\u4e48\u4e00\u884c:<\/p>\n<p><em>def __init (self) :<\/em>\u7684\u5f00\u59cb\u5c31\u4e00\u53e5\u53ef\u4ee5\u770b\u5230\u4e86\u3002<\/p>\n<pre>self.titlebar = titlebar.Titlebar(\nself.showThemeSelectWindow,\nself.showMoreWindow,\nself.minWindow,\nself.toggleWindow,\nself.closeWindow)<\/pre>\n<p>showTemeSelectWindow.... closeWindow\u90fd\u662f\u4e00\u4e9b\u51fd\u6570\uff0c\u5728deepin-software-center.py \u4e2d\u81ea\u5df1\u67e5\u770b\u4ee3\u7801\u3002<br \/> \u5176\u5b9e\u8fd9\u4e9b\u51fd\u6570\u662f\u8981\u5173\u8054\u8d77\u6765\u7684\uff0c\u5c31\u548c\u5b83\u4eec\u547d\u540d\u7684\u51fd\u6570\u540d\u4e00\u6837\u3002<br \/> ==================<\/p>\n<p>\u7136\u540e\u7ee7\u7eed\u5f80\u4e0b\u770b: <code>def main(self):<br \/> self.topbox.pack_start(self.titlebar.box, False)<\/code><br \/> \u8fd9\u91cc\u9762\u7684 box\u662f\u8c03\u7528 titlebar.py \u4e2d def__init__\u91cc\u9762\u7684box\u3002\u5bf9\uff01\u5c31\u662f\u8fd9\u4e00\u884c\u4ee3\u7801! self.titlebar.box\uff0c\u770b\u6700\u4e0a\u9762\u7684\u4e00\u884c import titlebar !!<\/p>\n<p>\u6211\u4eec\u6253\u5f00 ..\/src\/titlebar.h\u6587\u4ef6\u6765\u770b\u770b!<br \/> from draw import * \u4e00\u5f00\u59cb\u5c31\u8c03\u7528\u4e86\u8fd9\u4e2a\uff0c\u8fd9\u4e2a\u6587\u4ef6\u91cc\u9762\u5168\u90e8\u90fd\u662f\u753b\u63a7\u4ef6\u7684\u51fd\u6570\uff0c\u7b49\u4e00\u4e0b\u5206\u6790!<\/p>\n<p>\u53d1\u73b0\u4ee3\u7801: (\u51e0\u4e4e\u6240\u6709\u4e0a\u9762\u7ed8\u5236\u90fd\u4f7f\u7528\u4e86\u8fd9\u79cd\u65b9\u5f0f\u8c03\u7528)<\/p>\n<pre>self.closeButton = gtk.Button()\nself.closeButton.connect(\"button-release-event\", lambda w, e: closeCallback())\ndrawButton(self.closeButton, \"close\", \"navigate\")\nself.controlBox.pack_start(self.closeButton, False, False)<\/pre>\n<p>\u51e0\u4e4e\u539f\u7406\u662f\u4e00\u6837\u7684\uff01<br \/> \u6211\u4eec\u6765\u5206\u6790 closeButton, button-release-event \u8fd9\u4e2a\u4e8b\u4ef6\u8868\u793a\u7684\u662f\u9f20\u6807\u653e\u5f00\u65f6\u4ea7\u751f\u7684\u4e8b\u4ef6!<br \/> closeCallback() \u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u81ea\u5df1\u770b!self.titlebar = titlebar.Titlebar(...\u6700\u540e\u4e00\u4e2a\u53c2\u6570\u4f20\u8fc7\u6765\u7684,\u6709\u70b9\u8c61\u51fd\u6570\u6307\u9488!<br \/> <em>w \u4ee3\u7801\u7684\u65f6 widget<br \/> e \u4ee3\u8868\u7684\u65f6 event<\/em><br \/> <em>drawButton <\/em>\u8ba9\u8fd9\u4e2a\u51fd\u6570\u5e26\u6211\u4eec\u8d70\u5165 draw.py,\u53d1\u73b0\u4e86\u51fd\u6570:<\/p>\n<pre>def drawButton(widget, iconPrefix, subDir=\"cell\", scaleX=False,\nbuttonLabel=None, fontSize=None, labelDColor=None):<\/pre>\n<p>\u53c8\u591a\u4e86\u4e00\u4e2a\u51fd\u6570: buttonSetBackground,\u7b49\u4e0b\u5206\u6790:<br \/> \u770b\u770b\u8fd9\u4e2a: <em>%s\/%s_normal.png ..\/cell\/close_normal.png <\/em>\u4e0b\u9762\u7684\u662f<em> ..\/cell\/close_hover.png<br \/> <\/em><\/p>\n<p>==============<\/p>\n<p>\u6211\u4eca\u5929\u4e5f\u88c5\u4e86\u6df1\u5ea6\u8f6f\u4ef6\u4e2d\u5fc3 2.0,\u7ed9\u6211\u7684\u611f\u89c9\u5c31\u662f\u4e00\u4e2a\u5b57'\u723d'... ...<\/p>\n<p>\u7ecf\u8fc7\u6574\u7406\uff0c\u6211\u6765\u5148\u5927\u5bb6\u8bb2\u89e3\u6df1\u5ea6Linux\u8f6f\u4ef6\u4e2d\u5fc3\u7684\u754c\u9762\u5e03\u5c40\u60c5\u51b5\u3002<br \/> \u5728 <em>deepin-software-center.py class DeepinSoftwareCenter(object): <\/em>\u51fd\u6570\u4e2d:<\/p>\n<pre>        #\u8fd9\u4e2a\u5c31\u88c5\u5168\u90e8\u754c\u9762\u5e03\u5c40\u7684 \u4e3b\u5bb9\u5668,\u662f\u4e00\u4e2a\u5782\u76f4\u5bb9\u5668\n         self.mainBox = gtk.VBox()\n        #topbox\u4ee3\u8868\u4e0a\u90e8\u4efd\n          self.topbox = gtk.VBox()\n        #topbar\u4e8b\u4ef6\u76d2\u5b50\n          self.topbar = gtk.EventBox()\n<\/pre>\n<p>#\u8fd9\u4e00\u53e5\u5c31\u662f \u7cbe\u5f69\u63a8\u8350,\u8f6f\u4ef6\u4ed3\u5e93,\u8f6f\u4ef6\u66f4\u65b0\uff0c\u8f6f\u4ef6\u5378\u8f7d...\u7684\u5e03\u5c40<br \/> #navigatebar.py\u4e2d\u7684class NavigateBar(object):\u7684def __init__(self):\u4e2d\u6709\u8fd9\u4e48\u4e00\u53e5<br \/> #self.box = gtk.HBox(),\u8fd9\u4e2a\u5c31\u662f\u5c06\u6240\u6709(logo,navbox)\u653e\u5165box\u6a2a\u5411\u5bb9\u5668\u76d2\u5b50<br \/> #\u5148\u653elogo,\u540e\u653enavbox. ps: logo\u5c31\u662f\u5de6\u4fa7\u7684: \u8f6f\u4ef6\u4e2d\u5fc3\u56fe\u6807, navbox\u5c31\u662f: \u7cbe\u5f69\u63a8\u8350,\u8f6f\u4ef6\u4ed3\u5e93...\u4e0b\u8f7d\u7ba1\u7406\u3002<br \/> #\u6240\u4ee5 navigatebar.box \u5c31\u662f\u53ef\u4ee5\u8c03\u7528\u7684\u3002<br \/> self.navigatebar = navigatebar.NavigateBar() #<\/p>\n<p>\u7ee7\u7eed\u770b <em>deepin-software-center.py<\/em>\u7684\u4ee3\u7801,<em>def main(self):<\/em>\u6709\u8fd9\u51e0\u884c\u4ee3\u7801\uff1a<\/p>\n<pre>     \n        1.self.window.add(self.mainBox)\n        2.self.mainBox.pack_start(self.topbar, False) #\u4e8b\u4ef6\u76d2\u5b50,\u4e0d\u89e3\u91ca\uff0c\u6bd4\u5982\u8c61:\u9f20\u6807\u6309\u4e0b\uff0c\u653e\u5f00.\n        3.self.topbar.add(self.topbox)#\u5c06\u4e8b\u4ef6\u76d2\u5b50\u7684\u4e8b\u4ef6\u90a6\u5b9a\u7ed9\u4e0a\u90e8\u5206\u7684\u5e03\u5c40.\n        4.self.topbox.pack_start(self.titlebar.box, False)#\u4e3b\u9898\u9009\u62e9...\u7f29\u5c0f\uff0c\u653e\u5f00\uff0c\u5173\u95ed\u6309\u94ae.\n        5.self.topbox.pack_start(self.navigatebar.box, False)#\u7cbe\u5f69\u63a8\u8350,\u8f6f\u4ef6\u4ed3\u5e93...\u4e0b\u8f7d\u7ba1\u7406.\n        6.self.mainBox.pack_start(self.bodyBox) #\u4e0d\u89e3\u91ca,\u5927\u5bb6\u90fd\u660e\u767d\u8fd9\u53e5\u8bdd\u7684\u610f\u601d.\u6211\u6162\u6162\u8bf4\u6765.\n<\/pre>\n<p>window.add\u5c31\u662f\u5c06 mainbox\u6dfb\u52a0\u8fdb\u7a97\u4f53\u3002<br \/> \u6211\u4eec\u5927\u4f53\u5c31\u660e\u767d\u4e86\uff0cmainbox\u4e0a\u9762\u5305\u542b topbox,\u4e2d\u95f4\u5c31\u662fbodyBox(self.bodyBox = gtk.HBox()),\u6700\u4e0b\u9762\u5c31\u662f statusbar\u3002\u8fd9\u5c31\u662f\u4e0a\u3001\u4e2d\u3001\u4e0b\u90e8\u5206\u7684\u6574\u4f53\u5e03\u5c40\u3002<\/p>\n<p>bodyBox \u91cc\u9762\u6d77\u5305\u62ec\u4e86\u4e00\u4e9b\uff0c\u4f46\u662f\u6211\u4eec\u5148\u5206\u6790\u4e0a\u90e8\u4efd\uff0c\u540e\u9762\u518d\u5206\u6790\u4e0b\u90e8\u5206\uff1a<br \/> <em>#\u4e0a\u90e8\u4efd\u5927\u4f53\u5c31\u662f\u8fd9\u6837:<\/em><\/p>\n<blockquote>\n<p>topbox\u5148\u653e\u5165titlebar.box<br \/> \u540e\u653e\u5165navigatebar.box<br \/> \u8fd9\u5c31\u662f\u4e0a\u534a\u90e8\u5206\u7684\u6574\u4f53\u5e03\u5c40.<\/p>\n<\/blockquote>\n<p>\u6211\u4eec\u6765\u5206\u6790\u4e00\u4e0b titlebar.box,\u540e\u9762\u518d\u4e0b\u6765\u5206\u6790 navigatebar.box!\u6211\u4eec\u8981\u4e00\u6b65\u6b65\u7684\u5206\u6790\u3002\u4ece\u5916\u5230\u5185\uff0c\u4ece\u4e0a\u5230\u4e0b\u7684\u5206\u6790\u3002\u7136\u540e\u518d\u5206\u6790\u5185\u90e8\u5b9e\u73b0\u7684\u91cd\u8981\u4ee3\u7801\uff0c\u6bd4\u5982\u4e0b\u8f7d\uff0c\u66f4\u65b0\u2026\u2026\u5bf9\u4e86\uff0c\u63d0\u9192\u5927\u5bb6\u4e00\u53e5\uff0c\u90a3\u4e2a\u4e3b\u9898\u9009\u62e9\u4e0d\u662f\u83dc\u5355\uff0c\u4e5f\u662f\u4e00\u4e2a\u7a97\u4f53\u3002\uff08\u4ee3\u7801\u5728\uff1athemeSelect.py\uff0c\u6211\u4eec\u4ee5\u540e\u518d\u5206\u6790)<\/p>\n<p>#\u5c06\u7a97\u4f53\u653e\u5728\u6700\u5e95\u90e8\u7684\u5de6\u4fa7\u4ee5\u53ca\u6ca1\u6709\u6807\u9898\u8fb9\u6846\uff0c\u5047\u8c61\uff0c\u6839\u636e\u5750\u6807\u5f39\u51fa\u83dc\u5355(\u7a97\u4f53)\uff0c\u592a\u6f02\u4eae\u4e86!<br \/> #gtk_window_set_decorated (GTK_WINDOW(win1.window),FALSE);<br \/> #gtk_window_set_resizable (GTK_WINDOW(win1.window),FALSE);<br \/> self.window.set_decorated(False)<br \/> self.window.set_resizable(False)<\/p>\n<p>================<\/p>\n<p>\u6211\u4eec\u5206\u6790\u4e0a\u90e8\u5206\u7684 topbox\u4e2d\u7684: navigatebar.box ,\u8fd9\u91cc\u5c31\u662flogo,\u8fd8\u6709\u7cbe\u5f69\u63a8\u8350....\u4e0b\u8f7d\u7ba1\u7406\u3002<\/p>\n<p>\u4ee3\u7801\u5728 navigatebar.py\u4e2d\uff0c\u8fd9\u662f\u4e00\u4e2a NavigateBar \u7c7b, \u4e3b\u8981\u662fbox \u90a3\u4e2a\u53c2\u6570\u3002<\/p>\n<pre>    class NavigateBar(object):\n        '''Interface for navigate bar.'''\n       \n        def __init__(self):\n            '''Init for navigate bar.'''\n            # Init.\n            self.getUpgradableNumCallback = None\n            self.selectPageCallback = None\n            self.getRunningNumCallback = None\n            self.iconPadding = 8\n           \n            self.pageId = PAGE_RECOMMEND\n            #\u4fdd\u5b58 logo,\u7cbe\u5f69\u63a8\u8350....\u4e0b\u8f7d\u7ba1\u7406\u7684\u603b\u6a2a\u5411\u5bb9\u5668.\n            self.box = gtk.HBox()\n           \n            self.logoIcon = self.createLogoIcon()#\u521b\u5efalogoIcon \u6ce8: \u6700\u4e0a\u9762\u6700\u5de6\u8fb9\u7684\u90a3\u4e2a \u6df1\u5ea6Linux\u8f6f\u4ef6\u4e2d\u5fc3\u7684logo\u56fe\u6807.\n           \n            self.logoAlign = gtk.Alignment()#\u5b9e\u4f8b\u4e00\u4e2a \u5bf9\u9f50\u63a7\u4ef6\n            self.logoAlign.set_padding(0, 0, 60, 10) #\u8bbe\u7f6e\u5bf9\u9f50\u7684\u586b\u5145.\n            #\u53ef\u4ee5\u7528\u4e0b\u9762\u7684\u51fd\u6570\u5c06logoIcon\u5b50\u6784\u4ef6\u6dfb\u52a0\u5230 \u5bf9\u9f50\u6784\u4ef6(logoAlign) \u4e2d\n            self.logoAlign.add(self.logoIcon)\n           \n            self.box.pack_start(self.logoAlign, False, False)#\u5c06logo\u56fe\u6807\u52a0\u5165 box\n\n            self.navBox = gtk.HBox() #\u4fdd\u5b58 \u7cbe\u5f69\u63a8\u4ecb\uff0c\u8f6f\u4ef6\u4ed3\u5e93...\u4e0b\u8f7d\u7ba1\u7406.\n            self.navAlign = gtk.Alignment() # \u5bf9\u9f50\u63a7\u4ef6\n            self.navAlign.set(0.3, 0.5, 0.0, 0.0)\n            self.navAlign.set_padding(0, 0, 0, 60)\n            #\u53ef\u4ee5\u7528\u4e0b\u9762\u7684\u51fd\u6570\u5c06 navBox\u5b50\u6784\u4ef6 \u6dfb\u52a0\u5230 \u5bf9\u9f50\u6784\u4ef6(navAlign) \u4e2d\n            self.navAlign.add(self.navBox)\n            #\u5c06 \u7cbe\u5f69\u63a8\u4ecb\uff0c\u8f6f\u4ef6\u4ed3\u5e93... \u6dfb\u52a0 \u8fdb\u53bb box\n            self.box.pack_start(self.navAlign, True, True)\n           \n           #\u4e0b\u9762\u7684\u4ee3\u7801\u987e\u540d\u601d\u4e49\u62c9... ... \u76f4\u63a5\u53bb\u7ffb \/image\/navigate\/.....png\u5c31\u53ef\u4ee5\u53d1\u73b0\u4e86.\n           #\u8fd9\u4e2a\u51fd\u6570\u6211\u4eec\u6162\u6162\u6765\u89e3\u91ca.\n           #\u4e0b\u9762\u7684\u51fd\u6570\u5dee\u4e0d\u591a\u4e00\u6837\u7684\u62c9.\n            self.recommendIcon = self.createNavIcon(\n                \"\u7cbe\u9009\u63a8\u8350\",\n                # \"Recommend\",\n                \"navigate\/nav_recommend.png\",\n                PAGE_RECOMMEND) #PAG....ND\u5728 constant.py\u4e2d\u67e5\u627e.  = 0\n            #\u5c06\u7cbe\u9009\u63a8\u8350\u52a0\u5165 navbox   \n            self.navBox.pack_start(self.recommendIcon, False, False, self.iconPadding)\n           \n            self.repositoryIcon = self.createNavIcon(\n                \"\u8f6f\u4ef6\u4ed3\u5e93\",\n                # \"Repository\",\n                \"navigate\/nav_repo.png\",\n                PAGE_REPO)\n           #\u5c06\u8f6f\u4ef6\u4ed3\u5e93\u52a0\u5165 navBox\n            self.navBox.pack_start(self.repositoryIcon, False, False, self.iconPadding)\n           \n            self.updateIcon = self.createUpdateIcon(\n                \"\u8f6f\u4ef6\u66f4\u65b0\",\n                # \"Update\",\n                \"navigate\/nav_update.png\",\n                PAGE_UPGRADE,\n                self.getUpgradableNum)\n           #\u5c06\u8f6f\u4ef6\u66f4\u65b0\u52a0\u5165 navBox\n            self.navBox.pack_start(self.updateIcon, False, False, self.iconPadding)\n           \n            self.uninstallIcon = self.createNavIcon(\n                \"\u8f6f\u4ef6\u5378\u8f7d\",\n                # \"Uninstall\",\n                \"navigate\/nav_uninstall.png\",\n                PAGE_UNINSTALL)\n            self.navBox.pack_start(self.uninstallIcon, False, False, self.iconPadding)\n\n            self.downloadIcon = self.createUpdateIcon(\n                \"\u4e0b\u8f7d\u7ba1\u7406\",\n                # \"Download\",\n                \"navigate\/nav_download.png\",\n                PAGE_DOWNLOAD_MANAGE,\n                self.getRunningNum)\n            self.navBox.pack_start(self.downloadIcon, False, False, self.iconPadding)\n            #\u6700\u540e\u662f\u663e\u793abox\u4e2d\u6240\u6709\u7684\u5185\u5bb9... ...\n            self.box.show_all()\n<\/pre>\n<p>C\u8bed\u8a00\u4ee3\u7801\u5b9e\u4f8b:\u3010\u5982\u679c\u4e0d\u660e\u767d\uff0c\u770b\u770bC\u8bed\u8a00\u4ee3\u7801\uff0c\u867d\u7136\u6ca1\u6709\u5c01\u88c5\u5b8cGTK+\uff0c\u4f46\u662f\u6211\u4f1a\u7ee7\u7eed\u5c01\u88c5\u5b8c\u7684<\/p>\n<pre>    #include &lt;cgtk\/cgtk.h&gt;\n\n    int main(int argc, char *argv[])\n    {\n      c_init(&amp;argc,&amp;argv);\n      Window win1 = new_window(TOP, \"\u6df1\u5ea6\u8f6f\u4ef6\u4e2d\u5fc3\", 500, 100 );\n      GtkWidget *vbox  = gtk_vbox_new(FALSE, 0);\n      \/\/\u7f29\u5c0f\uff0c\u653e\u5927\n      GtkWidget *titHbox = gtk_hbox_new(FALSE, 0);\n      GtkWidget *minIcon = gtk_image_new_from_file(\"img\/min_normal.png\");\n      GtkWidget *maxIcon = gtk_image_new_from_file(\"img\/max_normal.png\");\n      GtkWidget *closeIcon = gtk_image_new_from_file(\"img\/close_normal.png\");\n      Align *titAlign  = new_align(0,0,0,0);\n\n      titAlign.set_padding(0, 0, 785, 0);\n      gtk_box_pack_start(GTK_BOX(titHbox), minIcon,FALSE,FALSE,0);\n      gtk_box_pack_start(GTK_BOX(titHbox), maxIcon,FALSE,FALSE,0);\n      gtk_box_pack_start(GTK_BOX(titHbox), closeIcon,FALSE,FALSE,0);\n      titAlign.add(titHbox);\n      gtk_box_pack_start(GTK_BOX(vbox), titAlign.align,FALSE,FALSE,0);\n     \n     \n      GtkWidget *hbox  = gtk_hbox_new(FALSE, 0);\n     \n      \/\/logo\n      GtkWidget *logoIcon = gtk_image_new_from_file(\"img\/logo.png\");\n      Align *logoAlign = new_align(0,0,0,0);\n      logoAlign.set_padding(0, 0, 60, 40);\n      logoAlign.add(logoIcon);\n     \n      gtk_box_pack_start(GTK_BOX(hbox), logoAlign.align, FALSE, FALSE, 0);\n      \/\/\u7cbe\u5f69\u63a8\u8350,......\u4e0b\u8f7d\u7ba1\u7406\n      GtkWidget *navHbox  = gtk_hbox_new(FALSE, 30);\n      Align *navAlign = new_align(0,0,0,0);\n      gtk_alignment_set(GTK_ALIGNMENT(navAlign),0.1, 0.1, 0.0, 0.0);\n      gtk_alignment_set_padding(GTK_ALIGNMENT(navAlign),0, 0, 20, 0);\n      \/\/\u7cbe\u5f69\u63a8\u8350\n      GtkWidget *recommendIcon = gtk_image_new_from_file(\"img\/nav_recommend.png\");\n      gtk_box_pack_start(GTK_BOX(navHbox), recommendIcon,FALSE,FALSE,0);\n      \/\/..\n      GtkWidget *repoIcon = gtk_image_new_from_file(\"img\/nav_repo.png\");\n      gtk_box_pack_start(GTK_BOX(navHbox), repoIcon,FALSE,FALSE,0);\n      \/\/.....\n      \/\/\u6700\u540e\u5c06 \u7cbe\u5f69\u63a8\u8350,...\u4e0b\u8f7d\u7ba1\u7406\u653e\u5165 navAlign\n      gtk_container_add(GTK_CONTAINER(navAlign), navHbox);\n     \n     \n     \n      \/\/navAlign\u653e\u5165 hbox..  \u6700\u540e\u5c31\u5f62\u6210\u4e86  logo, \u7cbe\u5f69\u63a8\u8350,....\u4e0b\u8f7d\u7ba1\u7406\u7684\u754c\u9762.\n      gtk_box_pack_start(GTK_BOX(hbox), navAlign, FALSE, FALSE, 0);\n     \n      gtk_box_pack_start(GTK_BOX(vbox), hbox,FALSE,FALSE,0);\n      \/\/#\u8bbe\u7f6e\u900f\u660e\u5ea6\n      win1.set_opacity(0.9);\n     \n      win1.add(vbox);\n      win1.show_all();\n      c_main();\n      return FALSE;\n    }\n<\/pre>\n<p>\u6709\u56fe\u6709\u771f\u76f8:<br \/> <a href=\"https:\/\/www.deepin.org\/wp-content\/uploads\/2011\/12\/220537jh1p59fp0pf8j6gg.png\"><img class=\"alignnone size-full wp-image-242\" title=\"220537jh1p59fp0pf8j6gg\" src=\"https:\/\/www.deepin.org\/wp-content\/uploads\/2011\/12\/220537jh1p59fp0pf8j6gg.png\" alt=\"\" width=\"540\" \/><\/a><\/p>\n<p>\u671f\u5f85\u7f51\u53cbz85525006\u7684\u7ee7\u7eed\u7ed9\u529b\uff01<\/p>","protected":false},"excerpt":{"rendered":"<p>\u4f5c\u8005\uff1az85525006:Linux Deepin \u8bba\u575b \u7531\u4e8e\u4f5c\u4e3a\u4e00\u540d\u521a\u5165\u95e8\u7684python\u7684\u521d\u5b66\u8005\uff0c\u7531\u4e8e\u5728C\u8bed\u8a00\u7684\u529f\u5e95\u4e0b\uff0c\u624d\u52c9\u5f3a\u7684\u5b66\u4e60\u5230\u73b0\u5728\u3002 \u867d\u7136\u6211\u5bf9\u4e8eLinux\u7684\u5f00\u6e90\u4e16\u754c\u4e0d\u662f\u5f88\u4e86\u89e3,\u4f46\u662f\u6211\u8fd8\u662f\u6bd4\u8f83\u559c\u6b22Linux\u7684\u3002\u867d\u7136\u6709\u4e00\u4e9b\u4e3e\u52a8\u8ba9\u540c\u4f34\u9119\u89c6\u4e86\uff0c\u4f46\u662f\u6211\u8fd8\u662f\u4f1a\u7ee7\u7eed\u52aa\u529b\u5b66\u4e60\u7684\uff0c\u6162\u6162\u7684\u6210\u4e3a\u4e00\u540d\u5408\u683c\u7684Linux\u7a0b\u5e8f\u5458\u3002 \u6709\u4ec0\u4e48\u5730\u65b9\u5206\u6790\u4e0d\u5bf9\u7684\uff0c\u8fd8\u8bf7\u5927\u5bb6\u591a\u591a\u89c1\u8c05\u548c\u7ed9\u4e88\u89e3\u91ca\uff0c\u5b66\u4e60\u5b66\u4e60\u3002 \uff081\uff09 \u6253\u5f00\u76ee\u5f55:<\/p>\n","protected":false},"author":27,"featured_media":9982,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[93],"tags":[],"_links":{"self":[{"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/posts\/19468"}],"collection":[{"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/comments?post=19468"}],"version-history":[{"count":0,"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/posts\/19468\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.deepin.org\/zh\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/media?parent=19468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/categories?post=19468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deepin.org\/zh\/wp-json\/wp\/v2\/tags?post=19468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}