好的,为什么这个简单的应用程序不起作用。 我花了一天时间调查这个并没有得到任何结果。
import wx, os
import gtk
import keybinder
class FrameWithHotKey(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
keybinder.bind("<Ctrl>period", self.toggle_shown)
def toggle_shown(self):
# windowNow id
if self.IsShown():
self.Hide()
else:
self.Show()
self.Raise()
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = FrameWithHotKey(None)
app.MainLoop()
我不知道为什么,但有时候(特别是当我通过在面板上点击它们来提高应用程序时)提高工作量并且我得到了闪光灯图标而不是凸起的窗口。
更新
好的,我回到主题并注意到这些..
我隔离了代码显示的奇怪行为..这是与wnck lib相关的东西。因此,如果通过打开新窗口(左键单击窗口 - test1)停用我的应用程序窗口,则提升工作完美,但如果使用wnck(通过右键单击 - test2)激活其他窗口(用任何Yours替换'opera'),则行动失败
导入日志记录 导入子流程 进口时间 导入wnck import wx
logging.basicConfig(级别= logging.DEBUG)
类MyFrame(wx.Frame):
def __init__(self, parent, title=''):
wx.Frame.__init__(self, parent, title=title)
self.Centre()
self.Bind(wx.EVT_LEFT_DOWN, self.test1)
self.Bind(wx.EVT_RIGHT_DOWN, self.raise_window)
def test1(self, evt):
logging.debug('losing..')
subprocess.Popen(['xterm'])
time.sleep(1)
self.Raise()
logging.debug('lost')
def lose_focus_by_wnck(self):
screen = wnck.screen_get_default()
import gtk
while gtk.events_pending():
gtk.main_iteration(False)
wins = screen.get_windows()
logging.debug('wins: {0}'.format(wins))
for win in wins:
app_name = win.get_application().get_name()
logging.debug('app: {0}'.format(app_name))
if 'opera' in app_name.lower():
win_id = win.get_xid()
break
else:
win_id = None
return win_id
def test2(self, evt):
logging.debug('losing..')
win_id = self.lose_focus_by_wnck()
win = wnck.window_get(win_id)
TIMESTAMP = 0
win.activate(TIMESTAMP)
logging.debug('lost')
time.sleep(1)
self.Raise()
logging.debug('raised')
如果名称 =='主要': app = wx.PySimpleApp(redirect = False) frame = MyFrame(无) frame.Show() app.MainLoop()
有没有人理解这种行为而不是像我觉得的非常有用的wtf? :)
答案 0 :(得分:0)
什么是键盘手?你在使用AcceleratorTable吗?有关详细信息,请参阅http://www.blog.pythonlibrary.org/2010/12/02/wxpython-keyboard-shortcuts-accelerators/。我不认为你可以将pyGtk与wxPython混合使用。