【问题标题】:Python PyQt5 QMessageBox not openingPython PyQt5 QMessageBox 未打开
【发布时间】:2016-10-31 03:43:18
【问题描述】:

当我按下 infoButton 时,我试图打开一个消息框。它运行 infoDialogue 方法,因为它打印“我在这里”,但它没有打开 infoBox。我错过了什么?

我正在使用 python 3.5 和 PyQt5

谢谢!

代码如下:

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QToolTip, QPushButton, QMessageBox)
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import QIcon, QFont

class mainWindow(QWidget):

    def __init__(self, screenWidth, screenHeight, windowWidth=400, windowHeight=400):      
        super().__init__()
        self.screenWidth = screenWidth
        self.screenHeight = screenHeight              
        self.windowWidth = windowWidth
        self.windowHeight = windowHeight
        self.initUI()


    def initUI(self):
        QToolTip.setFont(QFont('SansSerif', 10))
        self.setToolTip('ToolTip Widget')

        exitButton = QPushButton('Exit', self)        
        exitButton.setToolTip("<b>Wish to Exit?</b>")        
        exitButton.resize(exitButton.sizeHint())       
        exitButton.move(100, 100)      
        exitButton.clicked.connect(QCoreApplication.instance().quit)           

        infoButton = QPushButton('Info', self) # Button that calls infoDialogue()
        infoButton.setToolTip('<b>ToolTip</b>')
        infoButton.resize(infoButton.sizeHint())
        infoButton.move(100, 200)
        infoButton.clicked.connect(self.infoDialogue)      

        positionX = (self.screenWidth - self.windowWidth) / 2
        positionY = (self.screenHeight - self.windowHeight) / 2
        self.setGeometry(positionX, positionY, self.windowWidth, self.windowHeight)

        self.setWindowTitle('Window Title')
        #self.setWindowIcon(QIcon('./icon.png'))

        self.show()


    def infoDialogue(self): ## Method to open a message box
        infoBox = QMessageBox() ##Message Box that doesn't run
        print("Im here")
        infoBox.setIcon(QMessageBox.Information)
        infoBox.setText("Informações Adicionais")
        infoBox.setInformativeText("Informative Text")
        infoBox.setWindowTitle("Window Title")
        infoBox.setDetailedText("Detailed Text")
        infoBox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
        infoBox.setEscapeButton(QMessageBox.Close)       


    def closeEvent(self, event):        
        reply = QMessageBox.question(self, 'Exit', "Are you sure you want to exit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)                                      
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    screenResolution = app.desktop().screenGeometry()
    screenWidth = screenResolution.width()
    screenHeight = screenResolution.height()
    example = mainWindow(screenWidth, screenHeight)
    sys.exit(app.exec_())

【问题讨论】:

  • 您是否忘记实际显示/执行消息框?

标签: python python-3.x pyqt5 qmessagebox


【解决方案1】:

你可能需要一个

infoBox.exec_() 

在最后实际执行它

【讨论】:

    【解决方案2】:

    或者不用_(下划线),直接exec

    infoBox.exec()
    

    您需要执行消息框才能显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多