我想使用PyQt4在Python中编写一个显示QTextEdit小部件的程序,让用户输入在将字符插入QTextEdit小部件并显示之前程序检查的字符。
文档让我相信我可以通过继承QTextEdit并在我的新子类中实现方法keyPressEvent()来实现这一点。这似乎适用于除“组合”之外的所有事情。见https://help.ubuntu.com/community/ComposeKey
我的关键按下我的撰写键未传递给keyPressEvent()。随后的“组合”键按下都不会传递给keyPressEvent()。组合字符出现在我的QTextEdit小部件中,并且永远不会调用keyPressEvent()。
我做错了吗?这是否按预期工作?这是一个错误吗?
这是一个演示问题的简单程序。我使用Python 2.7.3和PyQt4版本4.8.1在Xubuntu 12.04下运行它。
import sys
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QTextEdit):
def __init__(self):
super(MainWindow, self).__init__()
self.resize(350, 250)
self.setWindowTitle('keyPressEvent() & Composition')
def keyPressEvent(self, event):
key = event.key()
mods = event.modifiers()
mflags = 0
if mods & QtCore.Qt.AltModifier: mflags = mflags | 1
if mods & QtCore.Qt.ShiftModifier: mflags = mflags | 2
if mods & QtCore.Qt.ControlModifier: mflags = mflags | 4
if mods & QtCore.Qt.KeypadModifier: mflags = mflags | 8
uco = unicode(event.text())
print('Vbdy uco={0}, key={1:x}, mods={2}'.format(
''.join(['{0:x}'.format(ord(x)) for x in uco]), key, mflags))
super(MainWindow, self).keyPressEvent(event)
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())