曹晋 发表于 2024-4-3 15:04:51

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.具体效果

三.实例

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文件后读取内容显示在文本框中,文本框中内容可以进行清空和保存。

 

来源:https://www.cnblogs.com/lihongtaoya/p/18112260
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)