我有一个文件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的内容,几乎立即消失。
答案 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
作为邮箱的父级 - 因此不会回收。