可愛的Python: [anygui]項目預覽

來源:互聯網
上載者:User

在 Python 世界中有一個非常有趣的 [anygui] 項目,它已經進入了早期的開發階段。[anygui] 項目打算作為許多主要圖形工具箱的下層 API。一旦完全開發成功,Python 程式員就可以調用一個公用 [anygui] 函數 ― 例如,為建立一個視窗 ― 可由“最適當好用”的工具箱來完成這項工作。在 Windows 上,可以使用到 Win32 API(或者 wxWindows);在 MacOS 上,可能本機調用;在 BeOS 上,使用 Bethon;在 Linux 上,使用 TKinter 或者 GTK;在 Telnet 螢幕上使用 ncurses ― 所有這些都取決於給定的機器上安裝的和可用的軟體。本文討論了 [anygui] 當前的開發狀態,以及該項目要達到的目標。

編寫一次,到處顯示!

許多年前當 Java 剛出現時,它的一個重要承諾就是實現代碼“編寫一次,隨處運行”的想法。起先,主要考慮將 Java 使用者介面作為 applet,嵌入到 網頁瀏覽器中。一段時間後,獨立的 AWT 應用程式成為更流行的概念。接下來,AWT 通常被 Swing 所取代。Swing 又變成了 Bean(構建在 Swing 上,但有另外的要求)。這樣依次下來,Swing 類從 Java 版本中添加、刪減,不斷來回變化著。

有關 Java 的一個很流行的笑話是,“編寫一次,到處 調試”。至少可以確定的是,您不可能編寫了一個 Java 應用程式後,非常自信地認為它可以運行在您應用程式的每個使用者機器上 ― 除非您願意要求每個使用者做相當多的工作來擷取 Java 版本和配置,使它們完全符合您特定的應用程式。應用程式是否運行取決於 Java 版本,以及甚至特定的供應商和安裝 JAVA 虛擬機器(JVM)的平台。

就大多數方面而言,如 Python、Perl 和 Tcl 這樣的指令碼語言,要比 Java 具有更好的可移植性。例如,對於大多數 Python 指令碼,程式員感到十分自信的是,發送到多個使用者的指令碼在每台目標機器上都將正確和完全一致地運行(可能有最低版本的要求 ― 這要比 Java 上的要求簡單得多、可靠得多)。當然,Java 除了不完美的移植性外,它也有許多優勢:靜態輸入(許多人想要它)、龐大的類庫、卓越的文檔、細心的設計選擇。但是有關那些語言的注意事項並不是我在這裡感興趣的話題。

Python 指令碼可移植性中有一個地方比 Java 差很多,那就是在使用者介面中。對於一個命令列工具,這一點不成問題。但當您希望複雜的使用者互動時 ― 特別專門針對圖形介面時 ― Python 實際上什麼也不能提供。對於所有的小故障和小錯誤,Java 通常確實為每個帶 JVM 的平台提供了 Swing 和 AWT 這些基本的 GUI。相反,Python 完全沒有任何“標準”的 GUI 庫。

許多人都表示他們期望有標準的 Python GUI。 Tkinter 恰在這時到來 ― 它有 Windows 和 UNIX/X Window 系統穩定的版本,並且有一個過得去的 MacOS 版本。但您還需要在系統上安裝 TCL 和 TK,以及被忽略的“非主流”平台,如 BeOS 和 OS/2。各類倡導者建議,採用一些其它庫/綁定將會是一個更好的選擇(有許多庫可以進行選擇;請參閱 參考資料)。而每個庫/綁定支援一個期望平台的子集;並且最重要的是,沒有一個庫/綁定被一致地接受(因此,沒有一個成為標準而隨 Python 分發版一起發行)。我們無法編寫帶使用者介面的應用程式,並且無法確保實際 使用者可以與它進行相互操作。

重新考慮這個問題

Java 思想建立了每個 JVM 必須實現的能力的一個標準集合。Java GUI 是根據規定而存在。Python 式的方法可能來自一個不同的角度。不再命令每台機器遵從某個確定的 API,取而代之的是,只是確定給定機器 可以做什麼,然後從那裡開始工作。API 僅作為底層平台所完成工作的封裝器。

一旦以 Python 方式考慮問題時, anygui 做了您確實希望做的事情。從 anydbm 模組中取出它的名字和相關說明,在運行時找到“最適當可用”的資料庫後端, anygui 在自身應用程式正在啟動並執行系統上會找到最適當可用的 GUI 後端。 anygui 強調提供一個可以和每個後端一起工作的 實用的介面元素集合;特定的後端可能自己能夠提供更進階的介面,但 anygui 提供的是它們的公用的介面。

寫本文的時候, anygui 還是一個 alpha 級的項目。對一個目標後端子集, anygui 已經做得非常好。但由於目標是建立一個(接近於)通用的封裝器,只有一個子集在工作顯然是不夠的。最終,如果 anygui 達到了它的目標,則在每個 Python 分發版中, anygui 都將作為標準的 Python 包包含在其中,那才是有意義的(就如同不管什麼依賴於系統的後端,Python 分發版中都包括了 anydbm 或者 xml.sax )。畢竟,這一點才能確保每個使用者都擁有了它。順便提一下, anygui 是純 Python;它本身不需要 C/C++ 或者其他較低級語言的任何東西(當然,如果有用, anygui 應該找一些支援的 GUI 庫)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.