博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyQt5学习教程16:文件打开对话框的使用
阅读量:2042 次
发布时间:2019-04-28

本文共 6920 字,大约阅读时间需要 23 分钟。

在本文中,我们将在上一个例程的基础上,增加文件打开功能,我们可以实现准备欲处理的数学表达式,将其存储在1个文本文件里,例如我们可以取名math.txt,然后,我们在菜单栏和工具栏中都增加文件打开Action,先看源程序。

源程序:

import sysfrom PyQt5.QtWidgets import QWidget, \                              QPushButton, \                              QToolTip, \                              QMessageBox, \                              QApplication, \                              QDesktopWidget, \                              QMainWindow, \                              QAction, \                              qApp, \                              QVBoxLayout, \                              QHBoxLayout, \                              QTextBrowser, \                              QLineEdit, \                              QLabel, \                              QInputDialog, \                              QColorDialog, \                              QFontDialog, \                              QFileDialogfrom PyQt5.QtCore import Qtfrom PyQt5.QtGui import QFont, \                          QIcon# QMainWindow是QWidget的派生类class CMainWindow(QMainWindow):    def __init__(self):        super().__init__()        # ToolTip设置        QToolTip.setFont(QFont('华文楷体', 10))        # statusBar设置        self.statusBar().showMessage('准备就绪')        # 退出Action设置        exitAction = QAction(QIcon('1.png'), '&退出', self)        exitAction.setShortcut('ctrl+Q')        exitAction.setStatusTip('退出应用程序')        exitAction.triggered.connect(qApp.quit)     # qApp就相当于QCoreApplication.instance()        # 打开文件Action设置        OpenFileAction = QAction(QIcon('2.png'), '&打开文件', self)        OpenFileAction.setShortcut('ctrl+O')        OpenFileAction.setStatusTip('打开文件')        OpenFileAction.triggered.connect(self.funOpenFile)        # menuBar设置        menubar = self.menuBar()        fileMenu = menubar.addMenu('&文件')        fileMenu.addAction(OpenFileAction)        fileMenu.addAction(exitAction)        # toolBar设置        self.toolbar = self.addToolBar('文件')        self.toolbar.addAction(OpenFileAction)        self.toolbar.addAction(exitAction)        # 确认PushButton设置        btnOK = QPushButton("确认")        btnOK.setToolTip("点击此按钮将确认改变!")        btnOK.setStatusTip("点击此按钮将确认改变!")        btnOK.clicked.connect(self.funOK)        btnOK.resize(btnOK.sizeHint())        # 取消PushButton设置        btnCancel = QPushButton("取消")        btnCancel.setToolTip("点击此按钮将放弃改变!")        btnCancel.setStatusTip("点击此按钮将放弃改变!")        btnCancel.clicked.connect(self.funCancel)        btnCancel.resize(btnCancel.sizeHint())        # 退出PushButton设置        btnQuit = QPushButton('退出')        btnQuit.setToolTip("点击此按钮将退出应用程序!")        btnQuit.setStatusTip("点击此按钮将退出应用程序!")        btnQuit.clicked.connect(qApp.quit)        btnQuit.resize(btnQuit.sizeHint())        # 更改提示PushButton设置        btnTip = QPushButton('更改提示')        btnTip.setToolTip("点击此按钮将更改提示符!")        btnTip.setStatusTip("点击此按钮将更改提示符!")        btnTip.clicked.connect(self.funTip)        btnTip.resize(btnTip.sizeHint())        # 更改背景色PushButton设置        btnBackgroundColor = QPushButton('更改背景色')        btnBackgroundColor.setToolTip("点击此按钮将更改背景色!")        btnBackgroundColor.setStatusTip("点击此按钮将更改背景色!")        btnBackgroundColor.clicked.connect(self.funBackgroundColor)        btnBackgroundColor.resize(btnBackgroundColor.sizeHint())        # 更改字体PushButton设置        btnFont = QPushButton('更改字体')        btnFont.setToolTip("点击此按钮将更改字体!")        btnFont.setStatusTip("点击此按钮将更改字体!")        btnFont.clicked.connect(self.funFont)        btnFont.resize(btnFont.sizeHint())        # PushButton布局        hBox1 = QHBoxLayout()        hBox1.addStretch(1)        hBox1.addWidget(btnFont)        hBox1.addWidget(btnBackgroundColor)        hBox1.addWidget(btnTip)        hBox1.addWidget(btnOK)        hBox1.addWidget(btnCancel)        hBox1.addWidget(btnQuit)        # QTextBrwoser是只读的多行文本框,既可以显示普通文本,又可以显示HTML        self.textBrowser = QTextBrowser()        # 提示标签        self.labTip = QLabel(">>>")        # 单行文本框        self.lineEdit = QLineEdit("请输入表达式,然后按确认键")        self.lineEdit.selectAll()        self.lineEdit.returnPressed.connect(self.funOK)        # 布局        hBox2 = QHBoxLayout()        hBox2.addWidget(self.labTip)        hBox2.addWidget(self.lineEdit)        # 布局        vBox = QVBoxLayout()        vBox.addWidget(self.textBrowser)        vBox.addLayout(hBox2)        vBox.addLayout(hBox1)        widget = QWidget()        self.setCentralWidget(widget)  # 建立的widget在窗体的中间位置        widget.setLayout(vBox)        # 布局完毕后,才可得到焦点        self.lineEdit.setFocus()        # Window设置        self.resize(500, 300)        self.center()        self.setFont(QFont('华文楷体', 10))        self.setWindowTitle('PyQt5应用教程(snmplink编著)')        self.setWindowIcon(QIcon('10.png'))        self.show()    def center(self):        # 得到主窗体的框架信息        qr = self.frameGeometry()        # 得到桌面的中心        cp = QDesktopWidget().availableGeometry().center()        # 框架的中心与桌面中心对齐        qr.moveCenter(cp)        # 自身窗体的左上角与框架的左上角对齐        self.move(qr.topLeft())    def funOK(self):        try:            text = self.lineEdit.text()            self.textBrowser.append("{} = {}".format(text, eval(text)))        except:            self.textBrowser.append("输入的表达式“{}”无效!".format(text))    def funCancel(self):        self.lineEdit.clear()    def funTip(self):        # 返回两个值:输入的文本和点击的按钮        text, ok = QInputDialog.getText(self, '请输入新的提示符', '提示符:')        if ok:            self.labTip.setText(text)    def funBackgroundColor(self):        col = QColorDialog.getColor()        if col.isValid():            self.textBrowser.setStyleSheet("QTextBrowser{background-color:%s}" % col.name())    def funFont(self):        font, ok = QFontDialog.getFont()        if ok:            self.textBrowser.setFont(font)    def funOpenFile(self):        fname = QFileDialog.getOpenFileName(self, '打开文件', 'math.txt', '*.txt')        if fname[0]:            f = open(fname[0], 'r')            with f:                data = f.read()                self.lineEdit.setText(data)    def keyPressEvent(self, e):        if e.key() == Qt.Key_Escape:            self.close()    def closeEvent(self, QCloseEvent):        reply = QMessageBox.question(self,                                     'PyQt5应用教程(snmplink编著)',                                     "是否要退出应用程序?",                                     QMessageBox.Yes | QMessageBox.No,                                     QMessageBox.No)        if reply == QMessageBox.Yes:            QCloseEvent.accept()        else:            QCloseEvent.ignore()if __name__ == '__main__':    app = QApplication(sys.argv)    MainWindow = CMainWindow()    sys.exit(app.exec_())
程序解释:

1、第19行:输入QFileDialog模块,用以调用文件打开对话框。

2、第44-37行:设置文件打开Action。

3、第52-53行:对菜单栏进行设置。

4、第56-58行:对工具栏进行设置。

5、第181-187行:定义funOpenFile方法。调用QFileDialog的getOpenFileName方法,取得打开的文件,对于打开的文件支持多选,传递给参数fname。程序对fname中第1个文件进行判断,如果存在则将其打开。然后将文件的内容读出,传递给LineEdit。

程序运行效果:

我们可以通过菜单栏或者工具栏打开文件对话框,选择准备好的数据文件,点击打开后,其内容就会显示到LineEdit中。

原创性文章,转载请注明出处      
CSDN:

你可能感兴趣的文章
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
ORACLEL临时表空间扩张
查看>>
java 构造方法
查看>>
java 单例模式
查看>>
java 类被加载
查看>>
判断两个object是否相等
查看>>
hashCode()方法和equal()方法
查看>>
java 并行和并发
查看>>
Java多线程实现的四种方式
查看>>
Java多线程问题总结
查看>>
js 失去焦点自动计算BMI 保留一位小数
查看>>
js Math.round()
查看>>
java内存中的堆栈、堆、静态区、常量池
查看>>
对接输入输出流;封装拷贝; 封装释放资源
查看>>
装饰器设计模式 :实现放大器对声音的放大动能
查看>>
p15 装饰器设计模式:模拟咖啡
查看>>
sax的解析流程
查看>>
SAX解析xml2
查看>>
简易版server服务器搭建
查看>>
进程和线程的关系与区别
查看>>