2016-11-30 1 views
0

내 프린터를 선택하고 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() 

편집 : 선택하기 전에 콤보 상자의 기본 항목을 강조 표시하고 싶습니다!

답변

0

먼저 현대 Gtk 버전에서는 백그라운드 색상 (또는 그 문제의 글꼴)을 변경하는 것이 권장되지 않으며 대부분의 방법은 사용되지 않거나 일관되게 작동하지 않습니다. 아이디어는 CSS 정의에 '외관'과 관련된 것이 있어야한다는 것입니다.

의 입력 위젯의 modify_font 메소드를 호출하여 위젯의 글꼴을 변경할 수 있습니다. 다음은 관련된 단계는 다음과 같습니다

  • ComboBox가 화면에 표시되는 GtkEntry를 포함하는 컨테이너 위젯입니다 것으로 알고 있습니다. 따라서 get_child() (상속 된 메서드)을 ComboBox에 호출하여 항목을 찾으십시오.

  • 그런 다음 입력 위젯에서 modify_font으로 전화하십시오. 예를 들어 새 글꼴을 제공해야합니다. Pango의 font_description()

당신은 색상을 변경하려면 override_background() 방법을 사용하도록 유혹 할 수 있지만,이 안정적으로 작동하지 않는 것 (그리고되지 않습니다).

+0

안녕하세요. 그건 내가 원하는 것만은 아니다. 선택하기 전에 어느 항목/텍스트가 기본값인지 알 수 없기 때문입니다. 선택 후에 만 ​​볼 수 있습니다. 하지만 고마워. 귀하의 정보로 나는 선택한 항목을 굵은 글씨로 만들어 배경색을 줄 수 있습니다 : 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

+0

이전에 대답 했었지만 작업에서 되돌아 왔을 것입니다. 콤보 상자에 연결된 상점에서 항목을 선택하여 미리 선택할 수 있습니다 (올바르게 호출 한 경우 'active_item'을 설정하여). – jcoppens

0

텍스트를 굵게 표시하려면 예를 들어 Gtk.Label.set_markup(<b>"this text will be bold</b>)을 입력하십시오.

관련 문제