2016-11-18 4 views
2

Ich versuche eine kleine Anwendung mit einer dauerhaft sichtbaren Suchleiste zu haben. Die aktuelle Implementierung von Gtk.SearchEntry ist, dass die Suchleiste aus dem Fenster verschwindet, wenn Sie Esc drücken. Ich habe es funktioniert in der folgenden MWA durch Hinzufügen eines on_key_release -Event Handler, aber es ist nagging mich, dass, wenn Sie Esc drücken, wird die Suchleiste für einen Moment weg blinzeln und dann wieder erscheinen. Es wird tatsächlich unsichtbar bleiben, solange Sie Esc halten gedrückt.Gtk3 Python - permanent sichtbar SearchBar

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


class AppWindow(Gtk.ApplicationWindow): 
    def __init__(self): 
     super(AppWindow, self).__init__() 
     self.grid = Gtk.Grid() 
     self.add(self.grid) 
     self.searchbar = Gtk.SearchBar() 
     self.grid.attach(self.searchbar, 1, 1, 1, 1) 
     if not self.searchbar.get_search_mode(): 
      self.searchbar.set_search_mode(True) 

     self.searchentry = Gtk.SearchEntry() 
     self.searchbar.connect_entry(self.searchentry) 
     self.searchbar.add(self.searchentry) 
     self.searchbar.set_show_close_button(False) 
     self.connect("key-release-event", self._on_key_release) 

    def _on_key_release(self, widget, event): 
     keyname = Gdk.keyval_name(event.keyval) 
     if keyname == 'Escape': 
      self.searchbar.set_visible(True) 
      self.searchbar.set_search_mode(True) 
     if event.state and Gdk.ModifierType.CONTROL_MASK: 
      if keyname == 'f': 
       self.searchbar.set_search_mode(True) 


class Application(Gtk.Application): 
    def __init__(self): 
     super(Application, self).__init__() 

    def do_activate(self): 
     self.win = AppWindow() 
     self.win.show() 
     self.win.connect("delete-event", Gtk.main_quit) 
     self.win.show_all() 

     Gtk.main() 

if __name__ == '__main__': 
    app = Application() 
    app.run() 

Ist es möglich, dass stattdessen die ganze searchbar Zwinkern machen, ich habe nur die aktuellen Such-Text sehen gehen weg ohne blinken?

Antwort

4

Wenn Sie möchten, dass der Sucheintrag ständig sichtbar ist, verwenden Sie keine SearchBar. Fügen Sie einfach die SearchEntry direkt zu Ihrem Container hinzu.

class AppWindow(Gtk.ApplicationWindow): 
    def __init__(self): 
     super(AppWindow, self).__init__() 
     self.grid = Gtk.Grid() 
     self.add(self.grid) 

     self.searchentry = Gtk.SearchEntry() 
     self.grid.attach(self.searchentry, 1, 1, 1, 1) 
     self.connect("key-release-event", self._on_key_release)} 

Sie müssen wahrscheinlich einige Ränder oder Abstände einstellen, um ein Aussehen zu erzielen, das zu Ihnen passt.

+2

Funktioniert perfekt! – oschoudhury