Gtk3 Python - 永久可见的 SearchBar
Gtk3 Python - permanently visible SearchBar
我正在尝试创建一个带有永久可见搜索栏的小型应用程序。 Gtk.SearchEntry
的当前实现是当您按 Esc
时搜索栏从 window 中消失。通过添加 on_key_release
-事件处理程序,我可以在以下 MWA 中工作,但令我烦恼的是,当您按 Esc
时,搜索栏会闪烁片刻然后重新出现.只要您按住 Esc
,它实际上就会保持不可见状态。
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()
是否可以不让整个搜索栏闪烁,而是只看到当前搜索文本消失而没有任何闪烁?
如果您希望搜索条目始终可见,请停止使用 SearchBar
。只需将 SearchEntry
直接添加到您的容器中即可。
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)}
您可能需要设置一些边距或间距才能获得适合您的外观。
我正在尝试创建一个带有永久可见搜索栏的小型应用程序。 Gtk.SearchEntry
的当前实现是当您按 Esc
时搜索栏从 window 中消失。通过添加 on_key_release
-事件处理程序,我可以在以下 MWA 中工作,但令我烦恼的是,当您按 Esc
时,搜索栏会闪烁片刻然后重新出现.只要您按住 Esc
,它实际上就会保持不可见状态。
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()
是否可以不让整个搜索栏闪烁,而是只看到当前搜索文本消失而没有任何闪烁?
如果您希望搜索条目始终可见,请停止使用 SearchBar
。只需将 SearchEntry
直接添加到您的容器中即可。
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)}
您可能需要设置一些边距或间距才能获得适合您的外观。