2010-05-03 53 views
7

我想建立一個GUI,其中每個像素都在我的控制之下(即不使用像GTK +提供的標準小部件)。 Renoise是我期望生產的一個很好的例子。是否要走向Xlib或XCB級別的最佳途徑,還是有可能通過像GTK +(甚至可能是PyGTK)這樣的更高級別的框架來實現這一目標?我應該看看開羅的繪畫嗎?如何在Linux上構建「像素完美」GUI?

我想盡可能在​​Python或Ruby中工作,但C也很好。

回答

7

隨着Clutter工具包(或其他一些畫布部件/工具包),你可以建立這樣一個接口。我不建議進入Xlib/XCB或DrawingArea的級別,因爲它需要實現畫布中已經存在的許多通用功能。

+0

哇!雜波看起來很棒!謝謝德米特里!我*不應該使用它嗎? – splicer 2010-05-03 22:52:32

3

然後你可能會想要類似pygame的東西。

1

GTK和PyGTK可能是錯誤的使用工具。這不是不可能的,因爲你可以讓你的整個應用程序成爲一個大的gtk.DrawingArea(這個例子實際上有意義的是Gargoyle),但對於任何形式的複雜GUI,你都會發瘋。

1

用最簡單的術語來說,你需要一些東西給你一個邊界矩形和自由的統治來繪製它,無論你想要什麼。這樣的對象通常被稱爲「畫布」。我之前(在Ruby中)使用可通過Fox toolkit獲得的FXCanvas類來完成此操作,但也有其他類型可用(例如wxWidgets,但我對此工具箱沒有個人經驗)。

雖然。像這樣的低級接口提供了很大的靈活性,但是他們也需要更多的工作。

5

在X中,您可能沒有考慮到這種方法存在的一個問題。字體大小以點爲單位(一點爲1/72英寸),因此(像素)大小隨分辨率和顯示器大小而變化。文本字符串的長度也會根據語言的不同而不同,因此確定按鈕和按鈕的大小是不太可能的。爲X設計的通用GUI工具包就是爲此而設計的。除此之外,爲GTK編寫自己的主題引擎很容易,它可以完全按照您的需要繪製所有小部件(使用Cairo [1]或GDK [2]),並使您的應用程序始終使用該主題。也許您的應用程序也可以根據DPI設置默認字體大小(以點爲單位),以始終以像素爲單位獲得相同的大小(當然不會使應用程序可翻譯)。

至少有幾個圖形用戶界面使用基於SDL [3]的像素完美方法,例如AGAR [4],PicoGUI [5]和Guichan [6]。他們大多數是用C++編寫的,有些用C編寫的,據我所知,他們都沒有綁定Python和Ruby。然後使用SDL,您只能有一個頂層窗口,這意味着您的應用程序(或您使用的GUI工具包)必須執行其自己的窗口來管理各種對話等。但我想這就是你想要的。

[1] cairographics.org/
[2] library.gnome.org/devel/gdk/unstable/index.html
[3] www.libsdl.org/
[4] libagar.org/
[5] picogui.org/
[6] guichan.sourceforge。net/wiki/index.php/Main_Page

+1

正確答案! – Joshua 2010-05-24 16:13:31