2016-12-25 7 views
0

Я пытаюсь сделать комбинацию клавиш для выхода из приложения после появления сообщения Critical. я хотел бы, чтобы пользователь нажал комбинацию клавиш, затем получите подсказку с критическим сообщением и после нажатия кнопки «ДА» он выйдет из программы. ive пытались какое-то время и не могли заставить его работать. вот что у меня естьPython pyqt4 Key Shortcuts

вот мой код

import sys 
import webbrowser 
import random 
import time 
import os 
import subprocess 
from PyQt4.QtCore import QSize, QTimer 
from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, QWidget, QIcon, QLabel, QPainter, QPixmap, QMessageBox, \ 
    QAction, QKeySequence 


def CloseSC(self): 
    msg = QMessageBox() 
    msg.setIcon(QMessageBox.Critical) 
    msg.setText("This is a message box") 
    msg.setInformativeText("This is additional information") 
    msg.setWindowTitle("MessageBox demo") 
    msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) 


class MainWindow(QMainWindow,): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.setGeometry(50, 50, 400, 450) 
     self.setFixedSize(400, 450) 
     self.startUIWindow() 

     self.actionExit = QAction(('E&xit'), self) 
     self.actionExit.setShortcut(QKeySequence("Ctrl+Q")) 
     self.actionExit.triggered.connect(CloseSC) 

ответ

1

Вы должны добавить действия к виджету с {your widget}.addAction({your action})

Это мое решение:

import sys 
from PyQt4.QtGui import QMainWindow, QMessageBox, QAction, QKeySequence, QApplication 


class MainWindow(QMainWindow): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.setGeometry(50, 50, 400, 450) 
     self.setFixedSize(400, 450) 
     self.actionExit = QAction(('E&xit'), self) 
     self.actionExit.setShortcut(QKeySequence("Ctrl+Q")) 
     self.addAction(self.actionExit) 
     self.actionExit.triggered.connect(self.CloseSC) 

    def CloseSC(self): 
     msg = QMessageBox(self) 
     msg.setIcon(QMessageBox.Critical) 
     msg.setText("This is a message box") 
     msg.setInformativeText("This is additional information") 
     msg.setWindowTitle("MessageBox demo") 
     msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) 
     if msg.exec_() == QMessageBox.Ok: 
      self.close() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_()) 

enter image description here

После Ctrl + Q

enter image description here