首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PyQt5、Python3中更改空格键行为

如何在PyQt5、Python3中更改空格键行为
EN

Stack Overflow用户
提问于 2018-06-16 02:03:38
回答 2查看 2K关注 0票数 0

我使用PyQt5和Python3制作了一个工作ui。除了单击按钮之外,我还想通过按键盘上的特定键(如空格键)执行特定操作。我使用以下方法来完成此操作:

def keyPressEvent(self, event):
    key = event.key()

    if key == Qt.Key_Space:
        print('space')
    elif key == Qt.Key_W:
        print('w')

当我按空格键时,它会按ui中的焦点按钮,而不是打印“space”。就像我按回车键一样。虽然按“W”键会打印“w”,但这是预期的。

我已经在stackoverflow和其他网站上搜索过了,但我没有找到真正有帮助的东西。我得到的最好的是这个here。但它使用的是PyQt4.3,并将代码复制粘贴到我的编辑器中,这给我带来了一些错误。我认为这种方法很好,但我无法将其转移到PyQt5。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-20 03:25:23

有了S.Nick非常有用的答案,我能够找到一个真正符合我需求的解决方案。

class MyPushButton(QPushButton):
    def __init__(self, *args):
        QPushButton.__init__(self, *args)

    def event(self, event):
        if (event.type() == QEvent.KeyPress) and (event.key() == Qt.Key_Space):
            print(foo)

            return True

        return QPushButton.event(self, event)

所以,就是这样。现在,每当我按下键盘上的空格键时,它只打印foo,而不打印其他任何内容。显然,print(foo)只是我想做的任何事情的占位符。

票数 0
EN

Stack Overflow用户

发布于 2018-06-16 02:54:40

试试看:

#from PyQt4.QtCore import * 
#from PyQt4.QtGui import * 
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore    import *
from PyQt5.QtGui     import * 


class MyWindow(QWidget): 
    def __init__(self, *args): 
        QWidget.__init__(self, *args)

        # create objects
        self.la  = QLabel("Press Space or `w` in this box:")
        self.le  = MyLineEdit()
        self.la2 = QLabel("\nLook here:")
        self.le2 = QLineEdit()

        self.btnSpace = QPushButton("Button1")
        self.btnSpace.setEnabled(False)
        self.btnSpace.clicked.connect(self.onBtnSpace)
        self.btnW     = QPushButton("Button2")
        self.btnW.setEnabled(False)
        self.btnW.clicked.connect(self.onBtnW)


        # layout
        layout = QVBoxLayout()
        layout.addWidget(self.la)
        layout.addWidget(self.le)
        layout.addWidget(self.la2)
        layout.addWidget(self.le2)

        layout.addWidget(self.btnSpace)
        layout.addWidget(self.btnW)

        self.setLayout(layout)

        # connections
        #self.connect(self.le, SIGNAL("tabPressed"), self.update)
        self.le.signalTabPressed[str].connect(self.update)

    def update(self, keyPressed):
        newtext = str(self.le2.text()) + str(keyPressed)  #"tab pressed "
        self.le2.setText(newtext)

        if keyPressed == "Key Space; ":
            self.btnSpace.setEnabled(True)
            self.btnSpace.setText(str(keyPressed))

        if keyPressed == "Key W; ":
            self.btnW.setEnabled(True)
            self.btnW.setText(str(keyPressed))        


    def onBtnSpace(self):
        print("keyPressed -> btnSpace")

    def onBtnW(self):
        print("keyPressed -> btnW")       

class MyLineEdit(QLineEdit):
    signalTabPressed = pyqtSignal(str)                  # +++

    def __init__(self, *args):
        QLineEdit.__init__(self, *args)

    def event(self, event):
        #if (event.type()==QEvent.KeyPress) and (event.key()==Qt.Key_Tab):
        if (event.type()==QEvent.KeyPress) and (event.key()==Qt.Key_Space):
            self.signalTabPressed.emit("Key Space; ")
            return True
        if (event.type()==QEvent.KeyPress) and (event.key()==Qt.Key_W):
            self.signalTabPressed.emit("Key W; ")    
            return True

        return QLineEdit.event(self, event)



def main(): 
    app = QApplication(sys.argv) 
    w   = MyWindow() 
    w.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50880660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档