Стандартный ключ Qt перестал работать в Python - PullRequest
0 голосов
/ 17 октября 2018

Я пишу программу, используя

  • Linux Mint 19
  • Версия Python: 3.6.6
  • Версия Qt: 5.9.5
  • PyQt версия: 5.10.1
  • SIP версия: 4.19.7

и я только что заметил, что стандартная короткая клавиша для закрытия (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 ]

0 голосов
/ 17 октября 2018

enum QKeySequence :: StandardKey

Это перечисление представляет стандартные привязки клавиш.Их можно использовать для назначения зависимых от платформы сочетаний клавиш QAction.

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

0 голосов
/ 17 октября 2018
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_()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...