本系列文章探究了如何使用 Python 來為 GNOME 桌面、screenlet 框架和 Nautilus 創建腳本,進而提供高生產率環境。桌面上的腳本啟用拖放功能,可快速訪問您經常使用的信息和服務。本期我們將了解如何使用 screenlet 小部件工具包構建桌面應用程序。
為 Linux 桌面開發應用程序通常需要一些類型的圖形用戶界面(Graphical User Interface,GUI)框架作為構建基礎。選項包括針對 GNOME 桌面的 GTK+,和針對 K 桌面環境(K Desktop Environment,KDE)的 Qt。這兩個平臺提供了開發人員構建 GUI 應用程序所需的一切,包括庫和布局工具以便創建用戶看到的窗口。本文向您展示如何基于 screenlet 小部件工具包構建桌面生產率應用程序。
一些現有的應用程序將歸為桌面生產率類別,包括 GNOME Do 和 Tomboy。這些應用程序通常允許用戶直接從桌面與它們進行交互,方法為通過特定的鍵組合或從另一個應用程序(如 Mozilla Firefox)進行拖放。Tomboy 用作桌面筆記工具,支持從其他窗口拖放文本。
Screenlet 入門
您需要安裝一些程序以便開始開發 screenlet。首先,使用 Ubuntu 軟件中心或命令行安裝 screenlets 包。在 Ubuntu 軟件中心內,在 Search框中鍵入 screenlets。您應該看到主要程序包和文檔的獨立安裝包兩個選項。
Python 和 Ubuntu您可使用 Python 對 screenlet 編程。Ubuntu 10.04 的基本安裝已包含了 Python 2.6,因為許多實用程序都依賴它。您可能需要其他庫,具體取決于您的應用程序要求。對于本文,我在 Ubuntu 10.04 上安裝并測試了一切。下一步,從 screenlets.org 站點下載測試 screenlet 源代碼。測試 screenlet 位于 src/share/screenlets/Test 文件夾并使用 Cairo 和 GTK,這些也是需要您安裝的。測試程序的整個源代碼位于 TestScreenlet.py 文件中。在您最喜愛的編輯器中打開此文件來查看 screenlet 的基礎結構。
Python 高度面向對象,因此使用 class關鍵字來定義對象。在本示例中,該類被命名為 TestScreenlet并具有一些已定義的方法。在 TestScreenlet.py 中,請注意下面代碼中的第 42 行:
def __init__(self, **keyword_args):
Python 使用前后雙下劃線(__)符號,通過預定義行為識別系統函數。在本例中,__init__函數針對類的構造函數的所有的意圖和目的,且包含將要在創建對象的新實例時執行的任何數量的初始化步驟。按照慣例,每個類方法的第一個參數都是對該類的當前實例的引用,并命名為 self。通過此行為,可以方便地使用 self來引用它所在的實例的方法和屬性:
self.theme_name = "default"
Screenlet 框架定義了一些命名慣例和標準,在 screenlets.org 中的開發人員頁面有概述。還有 screenlet 包的源代碼以及應用程序編程接口(Application Programming Interface,API)文檔的鏈接。查看代碼還使您可以深入了解每一個函數可以通過調用參數做什么以及返回什么。
編寫簡單的 screenlet
Screenlet 的基本組成部分包括圖標文件、源代碼文件和主題文件夾。主題文件夾包含不同主題的附加文件夾。您將在 screenlets.org 上發現樣例模板和幫助您入門所需的文件和文件夾。
對于第一個示例來說,使用已提供的模板來創建基本的 “Hello World” 應用程序,此基本應用程序的代碼如清單 1 所示。
清單 1. Hello World screenlet 的 Python 代碼
- #!/usr/bin/env pythonimport screenletsclass HelloWorldScreenlet(screenlets.Screenlet):__name__ = 'HelloWorld'__version__ = '0.1'__author__ = 'John Doe'__desc__ = 'Simple Hello World Screenlet'def __init__(self, **kwargs):# Customize the width and height.screenlets.Screenlet.__init__(self, width=180, height=50, **kwargs)def on_draw(self, ctx):# Change the color to white and fill the screenlet.ctx.set_source_rgb(255, 255, 255)self.draw_rectangle(ctx, 0, 0, self.width, self.height)# Change the color to black and write the message.ctx.set_source_rgb(0, 0, 0)text = 'Hello World!'self.draw_text(ctx, text, 10, 10, "Sans 9" , 20, self.width)if __name__ == "__main__":import screenlets.sessionscreenlets.session.create_session(HelloWorldScreenlet)
每一個應用程序都必須導入 screenlet 框架并創建新的會話,還有一些其他的最低要求,包括任何初始化步驟以及基本繪圖函數,以便在屏幕上呈現小部件,TestScreenlet.py 示例具有用來初始化對象的 __init__方法。在本例中,您將看到一行,包含對 screenlet 的 __init__方法的調用,它設置要為此應用程序創建的窗口的初始寬度和高度。
此應用程序惟一需要的其他函數是 on_draw方法,此例程將框的背景顏色設置為白色,并使用先前定義的維度繪制矩形,它將文本顏色設置為黑色,將源文本設置為 “Hello World!”,然后再繪制該文本,圖 1 顯示了在運行此 screenlet 時您應該看到什么。在文本的后面部分,您在這些簡單塊上創建更有用的應用程序時,此基本結構一直存在。
新聞熱點
疑難解答