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

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

Пространство между ящиками должно содержать другой цвет

http: // ubuntuone. com / 756mWfF2hTYwgiGCOccmEz

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

http://ubuntuone.com/3jCDQHtSt6KJfbYQ6YMH7F

t знает, есть ли беспорядок здесь лучший способ заставить это выглядеть так

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

2 ответа

Вы не указали язык программирования, поэтому я предполагаю Python для простоты.

В gtk большинство компонентов могут подключаться к событию экспонирования, которое затем можно использовать для рисования вручную в виджет (для этого используется каир, все эти виджеты имеют связанный с ними каирский контекст) [!d1 ]

Вот простой пример окна с пользовательским цветным 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()

Полученная программа выглядит примерно так:

2
ответ дан 25 May 2018 в 17:19

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

Полученная программа выглядит примерно так: enter image description here [/g1]

2
ответ дан 2 August 2018 в 02:37

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

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