我正在使用 pygtk 并搜索将字体和颜色对话框组合在一起的最佳方式,这是最 Pythonic 的方式吗?
问问题
2805 次
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 回答