#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication
import functools
modies = { 'shift': Qt.ShiftModifier,
'control': Qt.ControlModifier,
'alt': Qt.AltModifier,
'meta': Qt.MetaModifier }
def check_modifiers(org_meth):
"""Add modifiers kwarg to a method that contains a tuple of currently pressed modifiers."""
@functools.wraps(org_meth)
def wrapper(*args, **kwargs):
curr = QApplication.keyboardModifiers()
kwargs['modifiers'] = tuple( name for name, which in modies.items() if curr & which == which )
org_meth(*args, **kwargs)
return wrapper
if __name__ == '__main__':
import sip
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
centralWidget = QtGui.QWidget(self)
layout = QtGui.QHBoxLayout(centralWidget)
self.setCentralWidget(centralWidget)
self.clickButton = QtGui.QPushButton("click", centralWidget)
self.clickButton.clicked.connect(self.klick)
layout.addWidget(self.clickButton)
self.statusBar()
self.setFixedWidth(600)
@check_modifiers
def klick(self, event, modifiers):
ms = QtGui.QApplication.keyboardModifiers()
m = "keyboardModifiers: {1:0=32b} {0} has been pressed"
self.statusBar().showMessage(m.format(repr(modifiers), int(ms)))
import sys
app = QtGui.QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
Diff to Previous Revision
--- revision 1 2013-09-25 15:56:18
+++ revision 2 2013-09-29 14:13:04
@@ -1,8 +1,9 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication
+import functools
modies = { 'shift': Qt.ShiftModifier,
'control': Qt.ControlModifier,
@@ -10,21 +11,21 @@
'meta': Qt.MetaModifier }
def check_modifiers(org_meth):
- """Add modifiers kwarg to a method that contains a tuple of names of currently pressed modifiers."""
+ """Add modifiers kwarg to a method that contains a tuple of currently pressed modifiers."""
- def check_modifiers(*args, **kwargs):
+ @functools.wraps(org_meth)
+ def wrapper(*args, **kwargs):
curr = QApplication.keyboardModifiers()
kwargs['modifiers'] = tuple( name for name, which in modies.items() if curr & which == which )
- org_meth.__call__(*args, **kwargs)
+ org_meth(*args, **kwargs)
- return check_modifiers
+ return wrapper
if __name__ == '__main__':
import sip
- sip.setapi('QVariant', 2)
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
@@ -40,10 +41,13 @@
self.clickButton.clicked.connect(self.klick)
layout.addWidget(self.clickButton)
self.statusBar()
+ self.setFixedWidth(600)
@check_modifiers
def klick(self, event, modifiers):
- self.statusBar().showMessage( repr(modifiers) + " have been pressed")
+ ms = QtGui.QApplication.keyboardModifiers()
+ m = "keyboardModifiers: {1:0=32b} {0} has been pressed"
+ self.statusBar().showMessage(m.format(repr(modifiers), int(ms)))
import sys
app = QtGui.QApplication(sys.argv)