簡體   English   中英

Glade還是沒有林間空地:使用PyGtk的最佳方式是什么?

[英]Glade or no glade: What is the best way to use PyGtk?

我已經學習了一段時間的python並取得了一些成功。 我甚至設法使用PyGtk + Glade創建了一個或兩個(簡單)程序。

問題是:我不確定使用GTK和python的最佳方法是使用Glade構建接口。

我想知道我們中更有經驗的人(記住,我只是一個初學者)可以指出使用Glade的好處和注意事項,而不是在代碼本身中創建所有內容(假設學習正確的gtk綁定不會完全是個問題)。

我會說這取決於:如果你發現使用Glade你可以構建你想要或需要制作的應用程序,那絕對沒問題。 但是,如果您真的想了解GTK的工作原理或者您有一些非標准的UI要求,那么您將不得不深入研究GTK內部(這並不復雜)。

就個人而言,當我需要一些功能或定制時,我通常需要大約5分鍾才能進入富客戶端,而Glade或Stetic等設計師根本不可能。 也許這只是我。 盡管如此,使用圖形工具引導窗口設計對我來說仍然很有用。

我的建議:如果使用GTK創建富客戶端將成為您工作/業余愛好的重要組成部分,那么也要學習GTK,因為有一天您需要編寫該代碼。

PS我個人覺得Stetic在設計工作方面要優於Glade,如果有點不穩定的話。

使用GtkBuilder而不是Glade,它集成到Gtk本身而不是單獨的庫中。

Glade的主要好處是創建界面要容易得多。 連接信號處理程序需要做多少工作,但我從未覺得這很重要。

我開始使用glade,但很快就開始使用代碼執行所有操作。 Glade非常適合簡單的事情,當你學習GTK如何組織小部件(如何打包等等)時,它是很好的。 但是,在代碼中構建所有內容,您可以獲得更大的靈活性。 另外,你沒有林間空地依賴性。

Glade對於創建界面非常有用,這意味着您可以輕松更改GUI而無需進行太多編碼。 您會發現,如果您想要做任何有用的事情(例如構建樹視圖),您將不得不熟悉GTK文檔的各個部分 - 在實踐中找到一個好的教程/示例。

我通常從Glade開始,直到我沒有我需要的功能,例如創建向導。 只要我使用Glade提供的標准小部件,就沒有理由手動編寫GUI代碼。

我對Glade如何格式化代碼越熟悉,我的手工編碼就越好。 更不用說,使用Glade來構建底層框架真的很容易,所以你不必擔心所有的初始化。

如果你正在編寫一個傳統的GUI應用程序,它重復使用GTK +的許多標准組件(按鈕,標簽,容器等),我個人會選擇Glade + Kiwi(構建GTK + GUI應用程序的便利框架)。

使用Glade的最大好處是它大大減少了布局/打包代碼。 這是一個非常簡單的示例,它已經顯示了手動布局GUI(不使用任何輔助函數)的問題:

container = gtk.HBox()
label = gtk.Label(str="test")
container.add(label)

有關更多示例,請查看此處 即使您正在編寫復雜的自定義窗口小部件,也可以始終在Glade中創建占位符,並在實例化后替換它。

現在,Glade團隊發布一個新版本的設計師(3.6.0)應該不會太久。 這個新版本將添加對GtkBuilder的支持,后者取代了libglade(將Glade XML文件轉換為小部件樹的實際庫)。 新的Glade設計器再次添加了對在Python中定義目錄(小部件集)的支持,因此您可以輕松添加自己的自定義小部件。

我建議使用Glade進行快速開發,但不能用於學習。 為什么? 因為有些時候你需要調整一些小部件才能按照你想要的方式工作,如果你真的不知道/不了解每個小部件的屬性屬性那么你就會遇到麻煩。

對於快速簡單的屏幕,我使用Glade。 但是對於任何需要更高級別控制的東西,我都會根據實際需要創建一個自定義類(這很重要,因為它很容易被一般化帶走)。

通過一個瘦的應用程序特定的類,我可以從一個地方快速改變應用程序的外觀和感覺。 而是使用CSS來保持網站的一致性。

首先,開始對此進行透視。

您將使用GTK。 這是一個巨大的C庫,建於1993年,采用了20世紀70年代編碼風格的最佳傳統。 它是為了幫助實現GIMP而建立的,這是一個Photoshop競爭對手想要的用戶界面錯誤的傳奇。 典型的gui字段可能具有四十個或更多參數,大多數是重復的,具有吸氣劑和設定器。 會有痛苦。

GTK本身使用GObject在C中管理一個完整的動態類型系統。 這使得調試成為一種特殊的樂趣,需要手動遍歷指向充滿具有隱式繼承的通用參數列表的方法的指針數組。 當你最不期望它時,你也會跳過Pango庫,例如,當頁面很小時,使用Pango常量來表示省略號在標簽中的位置。 期待更多的痛苦。

到目前為止,您可能會發誓將所有GTK交互包裝在特定於您的應用程序的模型 - 視圖 - 控制器體系結構中。 這很好。

使用Glade,或gtkBuilder,或Stetic,將有助於將40個參數的巨大耦合問題轉化為函數。 Glade提供了一個基本的GUI構建器,用於將組件拖放到一起。 參數和繼承的參數有些分離。 Glade的輸出是.glade XML文件,然后您將讀入該文件,將您的回調(“信號處理程序”)附加到具有相同名稱的函數,並查詢或更新該XML的內存版本以獲取您隨后使用pyGTK的小部件操縱。 格萊德本身是一個吱吱作響,維護得不好。

使用pyGTK為您構建GUI提供了令人煩惱的細粒度控制。 這將是詳細的復制粘貼代碼。 每個屬性都是一個單獨的函數調用。 屬性setter不返回任何內容,因此鏈接調用是不可能的。 通常,您的IDE只會提供有關函數含義的最小幫助,您將不斷引用DevHelp或其他工具。

人們幾乎可以期待GTK GUI失敗。

我個人建議編碼而不是使用Glade。 我還在學習python和pyGtk,但我會說用手工編寫UI讓我對如何在幕后工作有很多見解。

一旦你學會了我就會說要給林間空地或其他UI設計師一試,但絕對要先學會如何以“硬”的方式去做。

您可以使用glade-2進行設計,並使用glade2py.py生成純pygtk代碼,它使用pygtkcompat來支持gtk3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM