我想构建一个GUI,每个像素都在我的控制之下(即不使用GTK +提供的标准小部件)。 Renoise是我想要制作的一个很好的例子。
最好的方法是采用Xlib或XCB级别,还是可以通过GTK +等更高级别的框架实现这一目标(甚至可能是PyGTK)?我应该在开罗看画吗?
如果可能的话,我想在Python或Ruby中工作,但C也很好。
答案 0 :(得分:7)
使用Clutter工具包(或其他一些画布小部件/工具包),您可以构建这样的界面。我不建议进入Xlib / XCB或DrawingArea的级别,因为它需要实现画布中已经存在的许多通用功能。
答案 1 :(得分: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
答案 2 :(得分:3)
你可能想要pygame之类的东西。
答案 3 :(得分:1)
GTK和PyGTK可能是错误的工具。这并非不可能,因为你可以让你的整个应用程序成为一个大的gtk.DrawingArea
(这个实际上有意义的例子是Gargoyle)但是对于任何类型的复杂GUI你都会疯狂。 / p>
答案 4 :(得分:1)
http://www.oluyede.org/blog/writing-a-widget-using-cairo-and-pygtk-28/展示了如何使用PyGTK和Cairo创建一个简单的小部件。
答案 5 :(得分:1)
简单来说,你需要一些东西给你一个边界矩形和自由的统治,以便随心所欲地绘制它。这些对象通常称为“画布”。我之前(在Ruby中)使用通过Fox toolkit提供的FXCanvas类来完成此操作,但也有其他可用(例如,wxWidgets,但我没有使用此工具包的个人经验)。
但是,请注意。像这样的低级接口提供了很大的灵活性,但是它们还需要你做更多的工作。