Python GTK3 Combobox使文本输入变为粗体或带有彩色背景

时间:2016-11-30 12:53:21

标签: python combobox gtk3

我有一个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()

编辑:我想在选择之前突出显示组合框的默认条目!

2 个答案:

答案 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>)