PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)

一.简介

QWidget是所有用户界面对象的基类,而QMainWindow用于创建主应用程序窗口的类。它是QWidget的一个子类,提供了创建具有菜单栏、工具栏、状态栏等的主窗口所需的功能。上篇主要介绍了基本使用,创建窗口时都是继承单个模块,本章主要介绍下两个模块的结合使用。

二.具体用法

1.我们先来创建一个类来继承QMainWindow实现一个简单的窗口

import sys  from PyQt5.QtWidgets import QApplication, QMainWindow   class FileChooserApp(QMainWindow):     def __init__(self):         super().__init__()         self.initUI()      def initUI(self):         # 设置窗口的标题和大小         self.setWindowTitle('文件选择器')         self.setGeometry(300, 300, 500, 500)   if __name__ == '__main__':     app = QApplication(sys.argv)     ex = FileChooserApp()     ex.show()     sys.exit(app.exec_())

2.在主窗口中添加一个文本编辑器,使用垂直布局来分布展示

    def initUI(self):         ql = QTextEdit()         central_widget = QWidget()         self.setCentralWidget(central_widget)  # 创建一个中心部件         vbox = QVBoxLayout(central_widget)  # 创建一个垂直布局         vbox.addWidget(ql)         vbox.addStretch(1)         central_widget.setLayout(vbox)  # 添加到布局器中

上述中我们在主窗口中创建一个中心部件将实例化后的central_widget 添加进去,这样就可以设置我们想要的布局了。

3.具体效果

PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)

三.实例

PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)

import sys  from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFileDialog, QMainWindow, QAction, QTextEdit   class FileChooserApp(QMainWindow):     def __init__(self):         super().__init__()         self.ql = QTextEdit()         self.initUI()      def initUI(self):         action = QAction('打开', self)  # 创建QAction实例         action.setShortcut('Ctrl+a')  # 设置快捷键操         action.triggered.connect(self.openFileNameDialog)         menubar = self.menuBar()  # 创建一个菜单栏         menu_open = menubar.addMenu('文件')  # 设置菜单栏tab         menu_open.addAction(action)  # 关联事件          action_updata = QAction('删除', self)  # 创建QAction实例         action_updata.setShortcut('Ctrl+d')  # 设置快捷键操         action_updata.triggered.connect(self.text_del)          action_a = QAction('保存', self)  # 创建QAction实例         action_a.triggered.connect(self.ctrl_s)          menubar_updata = self.menuBar()  # 创建一个菜单栏         menu_updata = menubar_updata.addMenu('编辑')  # 设置菜单栏tab         menu_updata.addAction(action_updata)  # 关联事件         menu_updata.addAction(action_a)  # 关联事件          central_widget = QWidget()         self.setCentralWidget(central_widget)         vbox = QVBoxLayout(central_widget)  # 创建一个垂直布局         vbox.addWidget(self.ql)         vbox.addStretch(1)         central_widget.setLayout(vbox)          # 设置窗口的标题和大小         self.setWindowTitle('文件选择器')         self.setGeometry(300, 300, 500, 500)      def ctrl_s(self):         print(self.ql.toPlainText())         options = QFileDialog.Options()         options |= QFileDialog.DontUseNativeDialog         fileName, _ = QFileDialog.getSaveFileName(self, "保存文件", "C://", "Text Files (*.txt)", options=options)         if fileName:             with open(fileName, 'w', encoding='utf8') as file:                 file.write(self.ql.toPlainText())      def text_del(self):         self.ql.clear()      def openFileNameDialog(self):         # 打开文件对话框并获取文件路径           options = QFileDialog.Options()  # 初始化         options |= QFileDialog.DontUseNativeDialog  # 使用pyqt对话框         fileName, _ = QFileDialog.getOpenFileName(self, "对话框标题", "C://",                                                   "All Files (*);;Text Files (*.txt);;Text Files (*.py)",                                                   options=options)  # 打开一个对话框         """         C://设置打开的目录,”“模式当前py目录         "All Files (*);;Text Files (*.txt);;Text Files (*.py)"  设置选择文件的类型         """         if fileName:             with open(fileName, mode="r", encoding="utf8") as f:                 self.ql.setText(f.read())   if __name__ == '__main__':     app = QApplication(sys.argv)     ex = FileChooserApp()     ex.show()     sys.exit(app.exec_())

View Code

 上述中创建了两个菜单栏,分别是打开和编辑,内置功能是打开txt文件后读取内容显示在文本框中,文本框中内容可以进行清空和保存。

PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)

 

发表评论

评论已关闭。

相关文章