![如何仅设置窗口的背景颜色,而不是所有子窗口小部件](https://linux22.com/image/812642/%E5%A6%82%E4%BD%95%E4%BB%85%E8%AE%BE%E7%BD%AE%E7%AA%97%E5%8F%A3%E7%9A%84%E8%83%8C%E6%99%AF%E9%A2%9C%E8%89%B2%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E6%89%80%E6%9C%89%E5%AD%90%E7%AA%97%E5%8F%A3%E5%B0%8F%E9%83%A8%E4%BB%B6.png)
我只需要更改窗口的背景颜色,并保留系统颜色的小部件。
盒子之间的空间应该保持不同的颜色
http://ubuntuone.com/756mWfF2hTYwgiGCOccmEz
像这样
http://ubuntuone.com/3jCDQHtSt6KJfbYQ6YMH7F
我不知道这里是否有更好的方法让它看起来这样
答案1
您没有指定编程语言,因此为了简单起见我假设使用 Python。
在 gtk 中,大多数组件可以连接到一个暴露事件,然后可以用来手动绘制到小部件中(开罗用于此,所有这些小部件都附加有 cairo 上下文)
这是一个带有自定义颜色 Vbox 和两个按钮的窗口的简单示例,按钮之间的空间(此处设置为 20 像素)和按钮周围的小边框显示 VBox 的背景颜色。
import gtk
class MyColoredBox(gtk.VBox):
def __init__(self, homogeneous=False, spacing=0):
super(MyColoredBox, self).__init__(homogeneous, spacing)
self.connect("expose-event", self.expose)
def expose(self, widget, event):
cr = widget.window.cairo_create()
cr.set_source_rgb(1.0, 1.0, 0.5)
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.fill()
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.connect("destroy", gtk.main_quit)
vbox = MyColoredBox(False, 20)
b1 = gtk.Button("Hello")
b2 = gtk.Button("World")
vbox.add(b1)
vbox.add(b2)
self.add(vbox)
self.show_all()
if __name__ == "__main__":
PyApp()
gtk.main()
最终的程序看起来是这样的: