python gtk gobject切换窗口的可见性
作者:互联网
我为hide创建了全局快捷方式示例,并使用’F12’等键来显示我的窗口,我使用python-xlib和一些名为’pyxhook’的脚本一切正常,除非我想隐藏()和show()窗口几次我的进程转动一个僵尸,但相同的代码使用隐藏和显示按钮.
#!/usr/bin/python
# -*- coding: utf-8; -*-
from gi.repository import Gtk, GObject
from pyxhook import HookManager
GObject.threads_init()
class Win(Gtk.Window):
def __init__(self):
super(Win, self).__init__()
self.connect('destroy', Gtk.main_quit)
self.button = Gtk.Button()
self.add(self.button)
self.resize(200,150)
self.show_all()
def handle_global_keypress(self, event):
if event.Key == 'F12':
if self.get_visible():
self.hide()
else:
self.show()
### this part works fine with button
#if self.button.get_visible():
# self.button.hide()
#else:
# self.button.show()
def main():
app = Win()
hm = HookManager()
hm.HookKeyboard()
hm.KeyDown = app.handle_global_keypress
hm.start()
Gtk.main()
hm.cancel()
if __name__ == "__main__":
main()
编辑:我使用Keybinder库解决了我的问题,而不是编写纯python键绑定器.
http://kaizer.se/wiki/keybinder/
解决方法:
我无法回答您的具体问题,但我可能会提出另一种选择. Guake控制台实现了这种相同的行为但使用dbus:
在dbusiface.py文件中,您可以找到:
import dbus
import dbus.service
import dbus.glib
import gtk
import guake.common
dbus.glib.threads_init()
DBUS_PATH = '/org/guake/RemoteControl'
DBUS_NAME = 'org.guake.RemoteControl'
class DbusManager(dbus.service.Object):
def __init__(self, guakeinstance):
self.guake = guakeinstance
self.bus = dbus.SessionBus()
bus_name = dbus.service.BusName(DBUS_NAME, bus=self.bus)
super(DbusManager, self).__init__(bus_name, DBUS_PATH)
@dbus.service.method(DBUS_NAME)
def show_hide(self):
self.guake.show_hide()
等方法.这值得探讨.请注意,Guake是使用PyGtk而不是PyGObject开发的,但无论如何你可以得到一些想法.
标签:python,pygtk,pygobject,python-multithreading,gobject 来源: https://codeday.me/bug/20190704/1372930.html