编程语言
首页 > 编程语言> > python gtk gobject切换窗口的可见性

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:

http://guake.org/

在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