Как настроить только цвет окна BG, а не все дочерние виджеты

Мне нужно изменить только цвет фона окна и оставить виджеты в системных цветах.

Расстояние между полями должно быть разным.

http://ubuntuone.com/756mWfF2hTYwgiGCOccmEz

Что-то вроде этого

http://ubuntuone.com/3jCDQHtSt6KJfbYQ6YMH7F

Я не знаю, является ли беспорядок здесь лучшим способом заставить его выглядеть таким образом

3
задан 2 November 2011 в 04:06

1 ответ

Вы не указали язык программирования, поэтому я предполагаю, что 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()

Результирующая программа выглядит примерно так: enter image description here

0
ответ дан 2 November 2011 в 04:06

Другие вопросы по тегам:

Похожие вопросы: