Мне нужно изменить только цвет фона окна и оставить виджеты в системных цветах.
Расстояние между полями должно быть разным.
http://ubuntuone.com/756mWfF2hTYwgiGCOccmEz
Что-то вроде этого
http://ubuntuone.com/3jCDQHtSt6KJfbYQ6YMH7F
Я не знаю, является ли беспорядок здесь лучшим способом заставить его выглядеть таким образом
Вы не указали язык программирования, поэтому я предполагаю, что Python для простоты.
В gtk большинство компонентов могут подключаться к событию expose, которое затем можно использовать для рисования вручную в виджет (для этого используется Каир , все эти виджеты имеют контекст Каира, связанный с их)
Здесь приведен простой пример окна с пользовательским цветным 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()
Результирующая программа выглядит примерно так: