python识别不了self_python – PyQt无法识别箭头键

如果你想不关注子小部件什么的.如果您只想要主要的QWidget,请设置Children No Focus Policy;

例如,希望是有帮助的;

import sys

from PyQt4 import QtGui, QtCore

class QCustomWidget (QtGui.QWidget):

def __init__ (self, parent = None):

super(QCustomWidget, self).__init__(parent)

myQLayout = QtGui.QVBoxLayout()

self.my1QPushButton = QtGui.QPushButton('Test 1', self)

self.my2QPushButton = QtGui.QPushButton('Test 2', self)

self.setChildrenFocusPolicy(QtCore.Qt.NoFocus)

myQLayout.addWidget(self.my1QPushButton)

myQLayout.addWidget(self.my2QPushButton)

self.setLayout(myQLayout)

def setChildrenFocusPolicy (self, policy):

def recursiveSetChildFocusPolicy (parentQWidget):

for childQWidget in parentQWidget.findChildren(QtGui.QWidget):

childQWidget.setFocusPolicy(policy)

recursiveSetChildFocusPolicy(childQWidget)

recursiveSetChildFocusPolicy(self)

def keyPressEvent (self, eventQKeyEvent):

messageQMessageBox = QtGui.QMessageBox(QtGui.QMessageBox.Question, 'Question', 'Hello Main', QtGui.QMessageBox.Yes)

messageQMessageBox.exec_()

QtGui.QWidget.keyPressEvent(self, eventQKeyEvent)

appQApplication = QtGui.QApplication(sys.argv)

windowQCustomWidget = QCustomWidget()

windowQCustomWidget.setFixedSize(640, 480)

windowQCustomWidget.show()

sys.exit(appQApplication.exec_())

小部件中的当前光标,按下按键有效.

案例1:纯QWidget:这种情况下它可以跟踪所有关键因为焦点自我QWidget.

import sys

from PyQt4 import QtGui, QtCore

class QCustomWidget (QtGui.QWidget):

def __init__ (self, parent = None):

super(QCustomWidget, self).__init__(parent)

myQLayout = QtGui.QVBoxLayout()

self.setLayout(myQLayout)

def keyPressEvent (self, eventQKeyEvent):

messageQMessageBox = QtGui.QMessageBox(QtGui.QMessageBox.Question, 'Question', 'Hello', QtGui.QMessageBox.Yes)

messageQMessageBox.exec_()

QtGui.QWidget.keyPressEvent(self, eventQKeyEvent)

appQApplication = QtGui.QApplication(sys.argv)

windowQCustomWidget = QCustomWidget()

windowQCustomWidget.setFixedSize(640, 480)

windowQCustomWidget.show()

sys.exit(appQApplication.exec_())

案例2:QWidget中的添加按钮:此案例无法跟踪箭头键,因为焦点按钮和箭头键已设置焦点的新位置. (如果你在linux中使用Windows样式你可以看到网格线的焦点)

import sys

from PyQt4 import QtGui, QtCore

class QCustomWidget (QtGui.QWidget):

def __init__ (self, parent = None):

super(QCustomWidget, self).__init__(parent)

myQLayout = QtGui.QVBoxLayout()

self.my1QPushButton = QtGui.QPushButton('Test 1', self)

self.my2QPushButton = QtGui.QPushButton('Test 2', self)

myQLayout.addWidget(self.my1QPushButton)

myQLayout.addWidget(self.my2QPushButton)

self.my1QPushButton.keyPressEvent = self.button1KeyPressEvent

self.my2QPushButton.keyPressEvent = self.button2KeyPressEvent

self.setLayout(myQLayout)

def keyPressEvent (self, eventQKeyEvent):

messageQMessageBox = QtGui.QMessageBox(QtGui.QMessageBox.Question, 'Question', 'Hello Main', QtGui.QMessageBox.Yes)

messageQMessageBox.exec_()

QtGui.QWidget.keyPressEvent(self, eventQKeyEvent)

def button1KeyPressEvent (self, eventQKeyEvent):

messageQMessageBox = QtGui.QMessageBox(QtGui.QMessageBox.Question, 'Question', 'Hello Button 1', QtGui.QMessageBox.Yes)

messageQMessageBox.exec_()

QtGui.QPushButton.keyPressEvent(self.my1QPushButton, eventQKeyEvent)

def button2KeyPressEvent (self, eventQKeyEvent):

messageQMessageBox = QtGui.QMessageBox(QtGui.QMessageBox.Question, 'Question', 'Hello Button 2', QtGui.QMessageBox.Yes)

messageQMessageBox.exec_()

QtGui.QPushButton.keyPressEvent(self.my2QPushButton, eventQKeyEvent)

appQApplication = QtGui.QApplication(sys.argv)

windowQCustomWidget = QCustomWidget()

windowQCustomWidget.setFixedSize(640, 480)

windowQCustomWidget.show()

sys.exit(appQApplication.exec_())

我不知道PyQt返回箭头键的ASCII是什么,但你可以避免这种情况.在pyQt中有QtCore.Qt.Key的ENUM,你可以读取类引用;

例:

def keyPressEvent (self, eventQKeyEvent):

key = eventQKeyEvent.key()

if key == QtCore.Qt.Key_F1:

print 'Help'

elif key == QtCore.Qt.Key_F5:

print 'Reload'

elif key == QtCore.Qt.Key_Left:

print 'Left'

elif key == QtCore.Qt.Key_Up:

print 'Up'

elif key == QtCore.Qt.Key_Right:

print 'Right'

elif key == QtCore.Qt.Key_Down:

print 'Down'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值