2017-10-13 3 views
1

私はGtk.Entryを持っており、ユーザーが無効な値を入力するたびにボーダーを赤に変更したいと考えています。私はGtk + 3とPython3を使用しています。これに関するすべての入力?私はgtk +> 3.4のために "Gtk.Entry.set_inner_border()"は非推奨です。Gtk3 + Gtk.Entryボーダーを色に変更するにはどうすればよいですか?

EDIT1:

enter image description here

私のGtk版や、私のOSのいずれかが全く色が好きではないようです! 私はまた、これらの2つのコード行と私のボタンは任意の色を持っていないています

button1.get_style_context().add_class('suggested-action') 
    button2.get_style_context().add_class(Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION) 

私のGtk + 3のバージョンは3.18です。これが理由だと思いますか?ウィジェットset_color関数をアップグレードするか、使用するように私に勧めますか?

私は調査するつもりで、最悪の場合、私がテストしたGtk.Widget.set_background_colorを使用して、境界線の色に影響を与えなくてもうまく動作します。今、私はどのようにテキストのheheを自動的に選択するかを理解する必要があります。

はどうもありがとうございますとにかくホセ・

EDIT2:

んが、色は次の行に表示されていない:

b_add.get_style_context().add_class('suggested-action') 
    b_remove.get_style_context().add_class(Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION) 

enter image description here

+1

実行しているのGtk + 3.18しかし、月曜日、私は持っていますそれを確認することができます。もう1つのオプションは、[GTK Inspector](https://wiki.gnome.org/Projects/GTK+/Inspector)を実行し、どのCSSスタイルクラスが使用されているかを確認することです。試してみる。 –

+0

私はこのデバッガーについて知りませんでした。かっこいいね。その2つのボタンのクラスは、私が指定したものです。私は色を見たいと思う、私はheheをアップグレードしたい – deko

+0

こんにちは私の編集を確認してください。 Gtk + 3.18では、エントリの前にドットを追加するだけです。 '.entry' –

答えて

1

のGtk + 3.xのスタイルにCSSを使用し、テーマのウィジェット。 CSSの構造スタイルクラスは、3.0から3.26に変更されました。つまり、使用しているバージョンを知ることが重要です。

あなたはCSSを使用できるのGtk + 3.22で

:その後からこの適応例を使用し、test.cssと呼ばれるファイルに

.entry { 
    border-color: Red; 
} 

コピーし、このCSSコードを:のGtk + 3.18を使用して

entry { 
    border-color: Red; 
} 

python gt3 tutorial

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk, Gdk, GObject 

class EntryWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="Entry Demo") 
     self.set_size_request(200, 100) 

     self.timeout_id = None 

     vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) 
     self.add(vbox) 

     self.entry = Gtk.Entry() 
     self.entry.set_text("Hello World") 
     vbox.pack_start(self.entry, True, True, 0) 

     hbox = Gtk.Box(spacing=6) 
     vbox.pack_start(hbox, True, True, 0) 

     self.check_editable = Gtk.CheckButton("Editable") 
     self.check_editable.connect("toggled", self.on_editable_toggled) 
     self.check_editable.set_active(True) 
     hbox.pack_start(self.check_editable, True, True, 0) 

     self.check_visible = Gtk.CheckButton("Visible") 
     self.check_visible.connect("toggled", self.on_visible_toggled) 
     self.check_visible.set_active(True) 
     hbox.pack_start(self.check_visible, True, True, 0) 

     self.pulse = Gtk.CheckButton("Pulse") 
     self.pulse.connect("toggled", self.on_pulse_toggled) 
     self.pulse.set_active(False) 
     hbox.pack_start(self.pulse, True, True, 0) 

     self.icon = Gtk.CheckButton("Icon") 
     self.icon.connect("toggled", self.on_icon_toggled) 
     self.icon.set_active(False) 
     hbox.pack_start(self.icon, True, True, 0) 

    def on_editable_toggled(self, button): 
     value = button.get_active() 
     self.entry.set_editable(value) 

    def on_visible_toggled(self, button): 
     value = button.get_active() 
     self.entry.set_visibility(value) 

    def on_pulse_toggled(self, button): 
     if button.get_active(): 
      self.entry.set_progress_pulse_step(0.2) 
      # Call self.do_pulse every 100 ms 
      self.timeout_id = GObject.timeout_add(100, self.do_pulse, None) 
     else: 
      # Don't call self.do_pulse anymore 
      GObject.source_remove(self.timeout_id) 
      self.timeout_id = None 
      self.entry.set_progress_pulse_step(0) 

    def do_pulse(self, user_data): 
     self.entry.progress_pulse() 
     return True 

    def on_icon_toggled(self, button): 
     if button.get_active(): 
      icon_name = "system-search-symbolic" 
     else: 
      icon_name = None 
     self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, 
      icon_name) 

win = EntryWindow() 
style_provider = Gtk.CssProvider() 
style_provider.load_from_path("test.css") 

Gtk.StyleContext.add_provider_for_screen(
    Gdk.Screen.get_default(), 
    style_provider, 
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION 
) 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

結果はこのようになります。

enter image description here

EDIT:Fedoraの23の

結果(のGtk + 3.18.9):私は、マシンを持っていない

enter image description here

+0

私はあなたに答えるために私の質問を編集しました – deko

+0

こんにちはJosé、まず覚えておいていただきありがとうございます。私はドットを追加しましたが、まだ動作していません。あなたのバージョンは3.18ですか?たぶん私は間違って私の目を覚ましていますか?私は私が3.18.9だと信じています。私はコマンド "dpkg -l libgtk2.0-0 libgtk-3-0"を実行しています。 – deko

+1

@dekoはい。私はGtk + 3.18.9でFedora 23を使用しています。 Gtk Inspectorを使用してスクリーンショットを追加しました。私はcssファイル(test.css)をテストするためにそれを編集しました。 –

関連する問題