代码之家  ›  专栏  ›  技术社区  ›  Kajsa

Qt标准键在Python中停止工作

  •  0
  • Kajsa  · 技术社区  · 6 年前

    我正在用

    • Linux薄荷19
    • Qt版本:5.9.5
    • PyQt版本:5.10.1

    我刚刚注意到标准的快捷键( CTRL+W )已停止工作。

    在我的文件中,我写了下面一行将其连接到关闭按钮

    self.closeBtn.setShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Close))
    

    但如果我按下按钮什么也不会发生。如果我把它改成

    self.closeBtn.setShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_W))
    

    我也试过

    self.closeBtn.setShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Quit)) 
    

    CTRL+Q 也什么都不做。标准钥匙适用于其他应用。 你知道为什么会这样吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Community CDub    4 年前

    枚举QKeySequence::StandardKey

    此枚举表示标准密钥绑定。

    http://doc.qt.io/qt-5/qkeysequence.html#StandardKey-enum

    试试看:

    import sys
    from PyQt5.QtGui     import *
    from PyQt5.QtCore    import *
    from PyQt5.QtWidgets import *
    
    class MyButton(QMainWindow):              
        def __init__(self,parent=None):
            super().__init__(parent)
    
            btn1 = QPushButton("Click or `Ctrl+Q`", clicked=self.close)
            btn1.setShortcut(QKeySequence("Ctrl+Q"))
            
            btn2    = QPushButton("QKeySequence.Close", 
                                  clicked=lambda: print("\n Please Press -> Ctrl+W"))
            quitAct = QAction("Close", btn2, triggered=self.close)
            quitAct.setShortcuts(QKeySequence.Close)                     # <<<=======
            btn2.addAction(quitAct)
            
            btn3 = QPushButton("Click or `Ctrl+P`", clicked=lambda: print("Hello Kajsa"))
            btn3.setShortcut(QKeySequence("Ctrl+P"))
            
            centralWidget = QWidget()
            self.setCentralWidget(centralWidget)        
            v_layout = QVBoxLayout(centralWidget)
            v_layout.addWidget(btn1)
            v_layout.addWidget(btn2)
            v_layout.addWidget(btn3)
    
    if __name__ == '__main__':
        app=QApplication([])
        mb = MyButton()
        mb.show()
        app.exec_()
    

    enter image description here

        2
  •  0
  •   Degang Guo    6 年前
    import sys
    from PyQt5.QtGui     import *
    from PyQt5.QtCore    import *
    from PyQt5.QtWidgets import *
    
    class demo_widget(QWidget):
        def __init__(self,parent=None):
            super().__init__(parent)
            lay_content = QVBoxLayout()
            self.closeBtn = QPushButton("Close")
            self.lineEdit = QLineEdit()
    
            self.closeBtn.clicked.connect(self.slt_close)
            self.closeAction = QAction(self, triggered=self.slt_close)
            self.closeAction.setShortcuts([QKeySequence("Ctrl+Q"), QKeySequence("Ctrl+W")])
            self.closeBtn.addAction(self.closeAction)
    
            lay_content.addWidget(self.closeBtn)
            lay_content.addWidget(self.lineEdit)
            self.setLayout(lay_content)
    
        def slt_close(self):
            self.lineEdit.setText("close")
    
    if __name__ == '__main__':
        app=QApplication([])
        demo = demo_widget()
        demo.show()
        app.exec_()