Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
1

Как отловить сочетания клавиш в полноэкранном режиме?

09.08.2013, 17:53. Просмотров 2811. Ответов 16
Метки нет (Все метки)

Задача: отлавливать некоторые комбинации клавиш, при этом не мешая работе приложений, выполняющихся в полноэкранном режиме.
Насколько я себе это представляю, нужно жестко закрепить фокус на окне (в моем случае создано с помощью Tkinter), а затем скрыть это самое окно. Возможно, ошибаюсь.
Подскажите, пожалуйста, направление поиска.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 17:53
Ответы с готовыми решениями:

Как отловить нажатие клавиш-стрелок без сторонних библиотек?
Всем привет! Подскажите, пожалуйста, как ловить нажатие клавиш-стрелок? Без использования...

Как заблокировать сочетания клавиш "Скопировать"/"Вставить"
Всем привет, есть задачка. есть окно ввода логина и пароля, как заблокировать Ctrl+V/С на QLineEdit...

Отловить нажатие сочетания клавиш
Доброго времени суток. К примеру, нужно реализовать событие после нажатия двух клавиш одновременно:...

Отловить нажатие сочетания клавиш глобально
Например, Alt + PrintScreen. При этом программа сидит в трее (активно другое окно).

Как запустить приложение в полноэкранном режиме?
И как запустить одну форму в другой? Добавлено через 20 минут Со вторым разобрался остался...

16
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
14.08.2013, 05:23  [ТС] 2
Вообще никак? :-( Может с помощью другого модуля?
0
man0ngi
26 / 26 / 6
Регистрация: 19.10.2012
Сообщений: 131
14.08.2013, 16:57 3
Для этого лучше пользовать AutoIt или нечто вроде. Вы не в том направлении пошли.
0
dhxdzjbr
97 / 82 / 5
Регистрация: 06.05.2013
Сообщений: 242
15.08.2013, 01:50 4
Тебе нужно найти как называется метод обрабатывающий нужное событие, на пример в pyqt нужно переопределить спец метод и назначить нужное для себя действие.
0
15.08.2013, 01:50
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
18.08.2013, 07:57  [ТС] 5
dhxdzjbr, дело обстоит так: имеется python-приложение, в котором задействован Tkinter. Написана работающая программка, которая реагирует на определенные комбинации клавиш и выполняет в связи с этим определенные действия. НО: работает данная программка только когда фокус ввода направлен на окно Tkintera.
Мне бы не хотелось отходить от Tkinter (т.к. программка почти готова), но если с Tkinter' ом не сделать, буду рад услышать другие методы решения задачи.
0
dhxdzjbr
97 / 82 / 5
Регистрация: 06.05.2013
Сообщений: 242
18.08.2013, 16:02 6
Я думаю это скорее всего не возможно. Зачем тебе это?

Добавлено через 3 часа 25 минут
Думал вот над твоей задачей, нормального решения её думаю нет, нужно придумывать извращенные способы, типо того какой ты предложил.
Цитата Сообщение от dmitr_111 Посмотреть сообщение
нужно жестко закрепить фокус на окне (в моем случае создано с помощью Tkinter), а затем скрыть это самое окно
Это реально сделать, но окно же будет мешать другим приложениям.
1
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
18.08.2013, 16:12  [ТС] 7
dhxdzjbr, предложите вашу реализацию, основываясь на моем "извращенном" способе.
focus_force у меня почему-то работает не так, как я предполагал.
0
helter
3844 / 2870 / 309
Регистрация: 12.03.2013
Сообщений: 5,203
18.08.2013, 16:13 8
Можете ещё код AutoKey посмотреть (если охота разбираться). Судя по всему, модуль interface.py. В AutoKey как раз хуки делаются, правда, без Tkinter.
1
dhxdzjbr
97 / 82 / 5
Регистрация: 06.05.2013
Сообщений: 242
18.08.2013, 16:33 9
Цитата Сообщение от dmitr_111 Посмотреть сообщение
focus_force у меня почему-то работает не так, как я предполагал
Извини не упомянул, реально реализовать на pyqt. С tkinter сейчас вообще не занимаюсь, не в курсе как на нём это реализовывать.
В PyQt есть метод hide, которым можно скрыть окно и если задать специальный тип окна, оно будет перекрывать другие окна.

Добавлено через 3 минуты
Кстати dmitr_111, ты так и не ответил зачем это тебе? Может вообще можно придумать другой подход.
0
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
18.08.2013, 16:44  [ТС] 10
Делаю некое подобие интернет-рации. Нажимаешь комбинацию клавиш, приложение их обрабатывает, отсылает куда надо и все. Дело сделано.
На Tkinter делаю из-за того, что быстро нашел там подходящие методы и ничего дополнительно скачивать не нужно, ибо стандартный модуль.
0
dhxdzjbr
97 / 82 / 5
Регистрация: 06.05.2013
Сообщений: 242
18.08.2013, 17:00 11
Это конечно все прекрасно, но вы не описали самое главное, какие действия вы хотите, чтобы обрабатывались при свёрнутом окне. Почему просто не сделать нужную кнопку в окне и все?
0
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
18.08.2013, 17:06  [ТС] 12
Цитата Сообщение от dhxdzjbr Посмотреть сообщение
Это конечно все прекрасно, но вы не описали самое главное, какие действия вы хотите, чтобы обрабатывались при свёрнутом окне. Почему просто не сделать нужную кнопку в окне и все?
В каком окне?
Игра работает на весь экран, и нечего там кнопочки выводить

А хочу я, чтобы на определенный адрес отправлялся некий код. Код получается исходя из нажатой комбинации. На сервере данный код обрабатывается, и дальше уже не важно

Стоп стоп стоп

Цитата Сообщение от dhxdzjbr Посмотреть сообщение
какие действия вы хотите, чтобы обрабатывались при свёрнутом окне
0_о
Нажатые комбинации клавиш. В самом начале сказано.
0
dhxdzjbr
97 / 82 / 5
Регистрация: 06.05.2013
Сообщений: 242
18.08.2013, 17:31 13
Кажется только сейчас более менее понимаю, что вы хотите.
Цитата Сообщение от dmitr_111 Посмотреть сообщение
Делаю некое подобие интернет-рации. Нажимаешь комбинацию клавиш, приложение их обрабатывает,
Ты делаешь, что то в духе teamspeak. На пример играть и параллельно общаться. Теперь понял.

В принципе идея с тем, чтобы скрыть окно не такая и безумная. Можно, когда скрываешь окно сделать очень маленьким, чтобы не не мешало другим приложениям или вообще разместить его по отрицательным координатам.

В общем прорабатывай идею с тем, чтобы скрыть окно и сделать его по верх других.
Кстати для твоих целей тебе не focus_force() нужен. focus_force() просто переводит фокус на нужный виджет, чтобы ты в него мог на пример ввести данные.
Для твоих целей вроде нужен grab_set_global(). Я в этом не уверен, сверься с докой на всякий случай.
1
helter
3844 / 2870 / 309
Регистрация: 12.03.2013
Сообщений: 5,203
18.08.2013, 17:49 14
Если игра - на винде, что ли? Может, на AutoHotkey проще написать?
0
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
18.08.2013, 18:07  [ТС] 15
Раньше раз на 10 перечитал страницу на Викиверситете, а на grab_set_global() даже внимания не обращал...

Добавлено через 46 секунд
helter, мне на питоне хочется
0
dhxdzjbr
97 / 82 / 5
Регистрация: 06.05.2013
Сообщений: 242
18.08.2013, 18:13 16
Сейчас опять читал доку, про grab_set_global() скорее всего ошибся.

Похоже тебе нужно:
withdraw - этот метод сделает окно невидимым.
Ещё поиграйся со следующими методами:
tkraise - размещает поверх всех других окон.
grab_set - устанавливает фокус на окно, даже при наличии открытых других окон.
0
dmitr_111
35 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 210
19.08.2013, 13:52  [ТС] 17
Кое-как откопал решение. С tkinter не связано, но все равно. Всего то и нужно было в поиск забить "глобальный перехват нажатия клавиш Python". Сразу оговорюсь, додумался не сам

Вот код(оригинал немного подправил):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 import pyHook, pythoncom
import codecs, sys, time
outf = codecs.getwriter('cp866')(sys.stdout, errors='replace')
sys.stdout = outf
 
def OnKeyboardEvent(event):
    if event.WindowName == None:
        wnd = 'None'
    else:
        wnd = unicode(event.WindowName, 'cp1251')
    print 'window: ', wnd
    print 'virtual code: ', event.KeyID
    print 'Scan code: ', event.ScanCode
    print '=========='
    return True # возврат True для посылки события другим обработчикам
 
hm = pyHook.HookManager() # создание hook manager
hm.KeyDown = OnKeyboardEvent # наблюдение за всеми событиями клавиатуры
hm.HookKeyboard() # установка hook'а
pythoncom.PumpMessages() # бесконечное ожидание
0
19.08.2013, 13:52
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2013, 13:52

Как сделать внешнее приложение в полноэкранном режиме?
Запускаю внешнее приложение. Например Process.Start("Chrome.exe"). По дефолту оно открывается не во...

Как сделать, чтобы приложение открывалось в полноэкранном режиме?
Как зделать чтобы программа открывалось в полно экранном режиме? Autosize не пойдет пробывал. Нужно...

Как получить скриншот игры, запущенной в полноэкранном режиме?
Нужно получить скриншот запущенной игры и сохранить в директорию (допустим рабочий стол). Два дня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.