7

我想构建一个 GUI,其中每个像素都在我的控制之下(即不使用 GTK+ 提供的标准小部件)。Renoise是我想要制作的一个很好的例子。

降低到 Xlib 或 XCB 级别是最好的方法,还是可以通过 GTK+(甚至是 PyGTK)等更高级别的框架来实现这一目标?我应该在开罗看画吗?

如果可能的话,我想在 Python 或 Ruby 中工作,但 C 也可以。

4

6 回答 6

7

使用Clutter工具包(或其他画布小部件/工具包),您可以构建这样的界面。我不建议进入 Xlib/XCB 或 DrawingArea 级别,因为它需要实现画布中已经存在的许多通用功能。

于 2010-05-03T14:11:28.583 回答
5

在 X 中,这种方法存在一个您可能没有考虑到的问题。字体大小以磅为单位(一个点为 1/72 英寸),因此(像素)大小随分辨率和显示器大小而变化。文本字符串的长度也会因语言而异,因此实际上无法确定按钮的大小以及需要多大。X 的通用 GUI 工具包在设计时就考虑到了这一点。除此之外,很容易为 GTK 编写自己的主题引擎,它可以完全按照您的需要绘制所有小部件(使用 Cairo[1] 或 GDK[2])并让您的应用程序始终使用该主题。也许您的应用程序也可以根据 DPI 设置默认字体大小(以磅为单位)以始终获得相同的像素大小(当然不会使您的应用程序可翻译)。

至少有几个 GUI 使用这种基于 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

于 2010-05-24T16:11:24.697 回答
3

那时你可能会想要像pygame这样的东西。

于 2010-05-03T08:51:08.700 回答
1

GTK 和 PyGTK 可能是错误的工具。这并非不可能,因为您可以让您的整个应用程序成为一个大应用程序( Gargoylegtk.DrawingArea就是一个真正有意义的示例),但是对于任何类型的复杂 GUI,您都会发疯。

于 2010-05-03T10:10:55.940 回答
1

http://www.oluyede.org/blog/writing-a-widget-using-cairo-and-pygtk-28/展示了如何使用 PyGTK 和 Cairo 创建一个简单的小部件。

于 2010-05-03T22:10:40.163 回答
1

用最简单的话说,你需要一个能给你一个边界矩形和自由支配的东西来画你想要的任何东西。这样的对象通常被称为“画布”。我之前(在 Ruby 中)使用Fox 工具包提供的 FXCanvas 类完成了此操作,但也有其他可用的类(例如 wxWidgets,但我没有使用此工具包的个人经验)。

不过请注意。像这样的低级接口提供了很大的灵活性,但它们也需要您做更多的工作。

于 2010-05-03T22:27:20.240 回答