2016-11-30 3 views
0

プリンタを選択してコンボボックスウィジェットで表示する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>)と入力します。

関連する問題