翼度科技»论坛 编程开发 python 查看内容

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

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
一.简介

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

1.我们先来创建一个类来继承QMainWindow实现一个简单的窗口
  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMainWindow
  3. class FileChooserApp(QMainWindow):
  4.     def __init__(self):
  5.         super().__init__()
  6.         self.initUI()
  7.     def initUI(self):
  8.         # 设置窗口的标题和大小
  9.         self.setWindowTitle('文件选择器')
  10.         self.setGeometry(300, 300, 500, 500)
  11. if __name__ == '__main__':
  12.     app = QApplication(sys.argv)
  13.     ex = FileChooserApp()
  14.     ex.show()
  15.     sys.exit(app.exec_())
复制代码
2.在主窗口中添加一个文本编辑器,使用垂直布局来分布展示
  1.     def initUI(self):
  2.         ql = QTextEdit()
  3.         central_widget = QWidget()
  4.         self.setCentralWidget(central_widget)  # 创建一个中心部件
  5.         vbox = QVBoxLayout(central_widget)  # 创建一个垂直布局
  6.         vbox.addWidget(ql)
  7.         vbox.addStretch(1)
  8.         central_widget.setLayout(vbox)  # 添加到布局器中
复制代码
上述中我们在主窗口中创建一个中心部件将实例化后的central_widget 添加进去,这样就可以设置我们想要的布局了。
3.具体效果

三.实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFileDialog, QMainWindow, QAction, QTextEdit
  3. class FileChooserApp(QMainWindow):
  4.     def __init__(self):
  5.         super().__init__()
  6.         self.ql = QTextEdit()
  7.         self.initUI()
  8.     def initUI(self):
  9.         action = QAction('打开', self)  # 创建QAction实例
  10.         action.setShortcut('Ctrl+a')  # 设置快捷键操
  11.         action.triggered.connect(self.openFileNameDialog)
  12.         menubar = self.menuBar()  # 创建一个菜单栏
  13.         menu_open = menubar.addMenu('文件')  # 设置菜单栏tab
  14.         menu_open.addAction(action)  # 关联事件
  15.         action_updata = QAction('删除', self)  # 创建QAction实例
  16.         action_updata.setShortcut('Ctrl+d')  # 设置快捷键操
  17.         action_updata.triggered.connect(self.text_del)
  18.         action_a = QAction('保存', self)  # 创建QAction实例
  19.         action_a.triggered.connect(self.ctrl_s)
  20.         menubar_updata = self.menuBar()  # 创建一个菜单栏
  21.         menu_updata = menubar_updata.addMenu('编辑')  # 设置菜单栏tab
  22.         menu_updata.addAction(action_updata)  # 关联事件
  23.         menu_updata.addAction(action_a)  # 关联事件
  24.         central_widget = QWidget()
  25.         self.setCentralWidget(central_widget)
  26.         vbox = QVBoxLayout(central_widget)  # 创建一个垂直布局
  27.         vbox.addWidget(self.ql)
  28.         vbox.addStretch(1)
  29.         central_widget.setLayout(vbox)
  30.         # 设置窗口的标题和大小
  31.         self.setWindowTitle('文件选择器')
  32.         self.setGeometry(300, 300, 500, 500)
  33.     def ctrl_s(self):
  34.         print(self.ql.toPlainText())
  35.         options = QFileDialog.Options()
  36.         options |= QFileDialog.DontUseNativeDialog
  37.         fileName, _ = QFileDialog.getSaveFileName(self, "保存文件", "C://", "Text Files (*.txt)", options=options)
  38.         if fileName:
  39.             with open(fileName, 'w', encoding='utf8') as file:
  40.                 file.write(self.ql.toPlainText())
  41.     def text_del(self):
  42.         self.ql.clear()
  43.     def openFileNameDialog(self):
  44.         # 打开文件对话框并获取文件路径  
  45.         options = QFileDialog.Options()  # 初始化
  46.         options |= QFileDialog.DontUseNativeDialog  # 使用pyqt对话框
  47.         fileName, _ = QFileDialog.getOpenFileName(self, "对话框标题", "C://",
  48.                                                   "All Files (*);;Text Files (*.txt);;Text Files (*.py)",
  49.                                                   options=options)  # 打开一个对话框
  50.         """
  51.         C://设置打开的目录,”“模式当前py目录
  52.         "All Files (*);;Text Files (*.txt);;Text Files (*.py)"  设置选择文件的类型
  53.         """
  54.         if fileName:
  55.             with open(fileName, mode="r", encoding="utf8") as f:
  56.                 self.ql.setText(f.read())
  57. if __name__ == '__main__':
  58.     app = QApplication(sys.argv)
  59.     ex = FileChooserApp()
  60.     ex.show()
  61.     sys.exit(app.exec_())
复制代码
View Code 上述中创建了两个菜单栏,分别是打开和编辑,内置功能是打开txt文件后读取内容显示在文本框中,文本框中内容可以进行清空和保存。

 

来源:https://www.cnblogs.com/lihongtaoya/p/18112260
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

上一篇: django原生FBV

下一篇: import 模块导入

举报 回复 使用道具