Хорошо, почему это простое приложение не работает.
Я провел один день, расследуя это, и ничего не получил.
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()
Не знаю почему, но иногда (особенно когда я поднимаю приложения, нажимая на них на панели), повышение не работает, и вместо всплывающего окна появляется значок вспышки.
UPDATE
Хорошо, я возвращаюсь к теме и замечаю это ..
- приведенный выше пример работает для меня .. странно
я выделил странное поведение, показанное ниже в коде ... это связано с wnck lib. Поэтому, если окно моего приложения деактивируется открытием нового окна (щелчок левой кнопкой мыши по окну - test1), тогда рейз работает отлично, но если другое окно (замените оперу на любое из ваших) активируется с помощью wnck (при щелчке правой кнопкой мыши - test2), тогда Активация не удается
логирование импорта
подпроцесс импорта
время импорта
импорт wnck
импорт 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')
если имя == ' main ':
app = wx.PySimpleApp (redirect = False)
frame = MyFrame (Нет)
frame.Show ()
app.MainLoop ()
Кто-нибудь понимает это поведение вместо очень полезного, как я чувствую? :)