我有一个GTK小部件,用于选择我的打印机并在ComboBox小部件中显示它们。
如何使默认打印机条目粗体或红色背景?
我不知道该怎么做或根本不可能。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
import os
import sys
import subprocess
class SystemPrinter(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Window Name")
box = Gtk.HBox()
self.add(box)
printers, default_printer = self.get_system_printers()
default_printer_entry = 0
printers_store = Gtk.ListStore(str, int)
for n, item in enumerate(printers.items()):
printers_store.append(item)
if item[0] == default_printer:
default_printer_entry = n
printers_combo = Gtk.ComboBox.new_with_model_and_entry(printers_store)
printers_combo.set_entry_text_column(0)
printers_combo.set_active(default_printer_entry)
box.pack_start(Gtk.Label("Printer", True, True, 0), False, False, 0)
box.pack_start(printers_combo, False, False, 0)
self.show_all()
def get_system_printers(self):
printers = {}
default_printer = ""
printers_raw = subprocess.check_output("lpstat -p -d", shell=True)
n = 0
for printer in printers_raw.split("\n"):
if "printer" in printer.split(" ")[0]:
printers[printer.split(" ")[1]] = n
n += 1
elif "system" in printer.split(" ")[0]:
default_printer = printer.split(" ")[3]
return printers, default_printer
def main(self):
Gtk.main()
if __name__ == '__main__':
s = SystemPrinter()
s.main()
编辑:我想在选择之前突出显示组合框的默认条目!
答案 0 :(得分:1)
首先,在现代Gtk版本中不鼓励更改背景颜色(或相关字体),并且大多数方法已弃用或不一致。这个想法是任何“外观”相关的都应该是CSS定义。
您仍然可以通过调用modify_font
条目窗口小部件的ComboBox
方法来更改窗口小部件的字体。这些是涉及的步骤:
意识到ComboBox
是一个容器小部件,其中包含您在屏幕上看到的GtkEntry。因此,通过在get_child()
上调用ComboBox
(这是一种继承的方法)来“找到”该条目。
然后在条目小部件上调用modify_font
。您需要提供由eg创建的新字体。 Pango的font_description()
。
您可能想尝试使用override_background()
方法更改颜色,但这似乎无法可靠地工作(并且已弃用)。
答案 1 :(得分:0)
如果您想让文字显示为粗体,可以尝试使用Gtk.Label.set_markup(<b>"this text will be bold</b>)
。