2017-10-13 68 views
1

我有一個Gtk.Entry,並希望在用戶輸入無效值時將其邊框更改爲紅色。我正在使用Gtk + 3和Python3。對此有何意見?我已經看到「Gtk.Entry.set_inner_border()」已棄用gtk +> 3.4。Gtk3 +如何將Gtk.Entry邊框更改爲顏色?

EDIT1:

enter image description here

看來,無論是我的基於GTK版或我的操作系統不喜歡的顏色了! 我也有這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,但星期一我將有並可以檢查它。另一種選擇是運行[GTK Inspector](https://wiki.gnome.org/Projects/GTK+/Inspector)並檢查哪些css樣式類正在被使用。試一試。 –

+0

我不知道這個調試器。看起來不錯。它說這2個按鈕的類是我指定的。我很想看到顏色,我想升級嘿嘿 – deko

+0

嗨,檢查我的編輯。使用Gtk + 3.18只需在輸入前添加一個點:'.entry' –

回答

1

GTK + 3.x中使用CSS樣式和主題小部件。 CSS結構風格類的確從3.0變爲3.26。這意味着知道您使用的版本很重要。

使用GTK + 3.22,你可以使用CSS:

entry { 
    border-color: Red; 
} 

使用GTK + 3.18用途:

.entry { 
    border-color: Red; 
} 

複製這個CSS代碼到一個名爲test.css,然後用這個改編自例子在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

編輯:在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),它可以工作。 –