PyQt5在消息窗口中显示文件内容

时间:2016-06-24 03:02:27

标签: python pyqt

我有一个文件info.txt,我想在点击信息时显示内容。

import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication,     QMessageBox
from PyQt5.QtGui import QIcon
file=open("info.txt","r")
data=file.read()


class Example(QMainWindow):
    def showdialog(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)

        msg.setText(data)
        msg.setWindowTitle("Info")
        msg.show()

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):               
        textEdit = QTextEdit()
        self.setCentralWidget(textEdit)

        sourceAction = QAction(QIcon('info.png'), 'More informations', self)
        sourceAction.setShortcut('Ctrl+I')
        sourceAction.setStatusTip('More info')


        self.statusBar()

        sourceAction.triggered.connect(self.showdialog)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&About')
        fileMenu.addAction(sourceAction)

        sourceAction.triggered.connect(self.showdialog)

        toolbar = self.addToolBar('Exit')
        toolbar.addAction(sourceAction)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('Summoner info')    
        self.show()



    if __name__ == '__main__':

        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())

file.close()

消息框不显示文件info.txt的内容,几乎立即消失。

1 个答案:

答案 0 :(得分:0)

您将showdialog定义为班级Example的方法。 此

sourceAction.triggered.connect(showdialog)

但是,在本地和全局命名空间中查找showdialog - 未定义它。 而是将信号连接到方法:

sourceAction.triggered.connect(self.showdialog)

另外,您还必须至少将self作为方法中的参数。我还添加了msg.show()来电 - 否则您的留言框将无法显示。

def showdialog(self):

   msg = QMessageBox(self) # use self as parent here
   # and/or keep a reference to the messagebox
   self.messageBox = msg
   # etc...

   # actually show the message box:
   msg.show()

编辑:已添加self作为邮箱的父级 - 因此不会回收。