如何旋转gtk小部件?

如何旋转gtk小部件?,gtk,pygtk,Gtk,Pygtk,假设所讨论的小部件是一个包含标签和两个按钮的VBox 此外,假设所需的旋转度为90° 如何旋转它?我认为默认情况下这是不可能的,但我确实认为这是可能的 然而,我不知道如何开始。我是否编写自定义小部件?什么是子类?首先,如果您的小部件没有自己的X窗口(VBox没有),请将其放入EventBox中 其次,假设您已经在X服务器中启用了,您将能够通过使用Xlib或等效工具手动调整小部件的X窗口来实现这一点。警告,这是一个黑客解决方案,如果您的用户没有启用合成扩展,它将不起作用 如果不合成扩展,我看不到任

假设所讨论的小部件是一个包含标签和两个按钮的VBox

此外,假设所需的旋转度为90°

如何旋转它?我认为默认情况下这是不可能的,但我确实认为这是可能的


然而,我不知道如何开始。我是否编写自定义小部件?什么是子类?

首先,如果您的小部件没有自己的X窗口(VBox没有),请将其放入EventBox中

其次,假设您已经在X服务器中启用了,您将能够通过使用Xlib或等效工具手动调整小部件的X窗口来实现这一点。警告,这是一个黑客解决方案,如果您的用户没有启用合成扩展,它将不起作用


如果不合成扩展,我看不到任何方法可以做到这一点。。。嗯,除了用手画所有的东西。GTK使用Cairo图形库来绘制小部件,理论上,在Cairo内部设置转换矩阵就足够了。。。但我看不到这样做的实际可能性。

你可以这样假装:

label.set_angle(90)
button1.get_child().set_angle(90) # assuming it's not a stock button
button2.get_child().set_angle(90)
vbox.set_orientation(gtk.ORIENTATION_HORIZONTAL)

我知道这个问题已经有一段时间没有得到回答了,但是如果你想开始子类化,下面是C代码。这是取自GTK演示套件


嗯。。。这很有趣我会试试看它是否适合我的目的。谢谢好的,这个解决方案真的很有趣,对于我给出的例子,它肯定(或多或少)有效。我仍然想知道是否真的(即:通过一个自定义小部件)可以进行轮换(如果是的话,如何在该场地开始),如果没有,我将把这标记为接受的答案(因为它确实回答了我提出的问题)。编辑:实际上,你也可以伪造固定容器的旋转吗?你可以通过调整固定容器的大小、交换所有子部件的x和y坐标,以及单独旋转所有子部件来伪造固定容器的旋转——如果它们可以旋转的话。可以旋转的小部件几乎仅限于标签和图像;也许在客户端窗口和重定向方面有一些技巧。你也可以查看croot(),但我对此一无所知。