내 프린터를 선택하고 ComboBox 위젯에 표시하기위한 GTK 위젯이 있습니다.Python GTK3 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()
편집 : 선택하기 전에 콤보 상자의 기본 항목을 강조 표시하고 싶습니다!
안녕하세요. 그건 내가 원하는 것만은 아니다. 선택하기 전에 어느 항목/텍스트가 기본값인지 알 수 없기 때문입니다. 선택 후에 만 볼 수 있습니다. 하지만 고마워. 귀하의 정보로 나는 선택한 항목을 굵은 글씨로 만들어 배경색을 줄 수 있습니다 : if child.get_text() == self.default_printer : child.modify_font (Pango.FontDescription ("bold")) entry_style_context.add_class "green") else : child.modify_font (없음) entry_style_context.remove_class ("green") – oxidworks
이전에 대답 했었지만 작업에서 되돌아 왔을 것입니다. 콤보 상자에 연결된 상점에서 항목을 선택하여 미리 선택할 수 있습니다 (올바르게 호출 한 경우 'active_item'을 설정하여). – jcoppens