0

我正在使用 pygtk 并搜索将字体和颜色对话框组合在一起的最佳方式,这是最 Pythonic 的方式吗?

4

1 回答 1

2

您必须更改小部件样式的“基本”和“文本”部分。您还可以编辑“前景”属性。更改从 gtk.Widget 继承的样式属性的一些有用的速记方法是:

widget.modify_fg(state, color)
widget.modify_bg(state, color)
widget.modify_base(state, color)
widget.modify_text(state, color)

gtk.Label、gtk.Button、gtk.Paned、gtk.Frame 等无窗口小部件(参见 FAQ 3.5)尽管从 gtk.Widget 继承,但不允许更改其背景和基色,因为这些属性不存在为他们。如果你想得到它们,你需要将小部件插入到 gtk.EventBox 中,它会添加这个属性。例子:

import gtk

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", gtk.mainquit)

label = gtk.Label("one, two, testing...")
eb = gtk.EventBox()
eb.add(label)
eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("blue"))
window.add(eb)

window.show_all()
gtk.main()

还建议您阅读此gtk.gdk.Window — 目标窗口系统中的屏幕显示区域。

另一方面,pygtk 有用于更改颜色和更改或选择字体的对话框。

示例 1:更改字体

import gtk
import pango
class PyApp(gtk.Window): 
    def __init__(self):
        gtk.Window.__init__(self)
        self.set_size_request(300, 150)
        self.set_position(gtk.WIN_POS_CENTER)
        self.connect("destroy", gtk.main_quit)
        self.set_title("Font Selection Dialog")


        self.label = gtk.Label("The only victory over love is flight.")
        button = gtk.Button("Select font")
        button.connect("clicked", self.on_clicked)

        fix = gtk.Fixed()
        fix.put(button, 100, 30)
        fix.put(self.label, 30, 90)
        self.add(fix)

        self.show_all()

    def on_clicked(self, widget):
        fdia = gtk.FontSelectionDialog("Select font name")
        response = fdia.run()

        if response == gtk.RESPONSE_OK:
            font_desc = pango.FontDescription(fdia.get_font_name())
            if font_desc:
                self.label.modify_font(font_desc)

        fdia.destroy()
PyApp()
gtk.main()

示例 2:更改标签的颜色

 import gtk
class PyApp(gtk.Window): 
    def __init__(self):
        super(PyApp, self).__init__()

        self.set_size_request(300, 150)
        self.set_position(gtk.WIN_POS_CENTER)
        self.connect("destroy", gtk.main_quit)
        self.set_title("Color Selection Dialog")


        self.label = gtk.Label("The only victory over love is flight.")
        button = gtk.Button("Select color")
        button.connect("clicked", self.on_clicked)

        fix = gtk.Fixed()
        fix.put(button, 100, 30)
        fix.put(self.label, 30, 90)
        self.add(fix)

        self.show_all()

    def on_clicked(self, widget):
        cdia = gtk.ColorSelectionDialog("Select color")
        response = cdia.run()

        if response == gtk.RESPONSE_OK:
            colorsel = cdia.colorsel
            color = colorsel.get_current_color()
            self.label.modify_fg(gtk.STATE_NORMAL, color)

        cdia.destroy()
PyApp()
gtk.main()

希望它能有所帮助。

于 2013-04-25T13:36:54.100 回答