一.简介

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_())

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

PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)的更多相关文章

  1. Python gui编程pyQt5安装步骤t

    Python gui编程pyQt5安装步骤         pip install PyQt5 Pip3 install PyQt5               https://riverbankco ...

  2. Python gui编程pyQt5安装步骤

    Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic  $FileName$ -o $FileNameWit ...

  3. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列01)--Hello world!

    [题记] 我是一个菜鸟,这个系列是我的学习笔记. PyQt5 出来有一段时间了, PyQt5 较之 PyQt4 有一些变化,而网上流传的几乎都是 PyQt4 的教程,照搬的话大多会出错. eric6 ...

  4. 用 eric6 与 PyQt5 实现python的极速GUI编程(35篇PyQT和200多篇Python)

    [题记] 我是一个菜鸟,这个系列是我的学习笔记. PyQt5 出来有一段时间了, PyQt5 较之 PyQt4 有一些变化,而网上流传的几乎都是 PyQt4 的教程,照搬的话大多会出错. eric6 ...

  5. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

    初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...

  6. Python进阶--GUI编程

    一.图形用户图面(GUI编程) 1. wxpython下载和安装: 下载url: http://wxpython.org/download.php 2.创建示例GUI应用程序 : ①开始需要导入wx ...

  7. 基于tkinter的GUI编程

    tkinter:tkinter是绑定了Python的TKGUI工具集,就是Python包装的Tcl代码,通过内嵌在Python解释器内部的Tcl解释器实现的,它是Python标准库的一部分,所以使用它 ...

  8. python大法好——ython GUI编程(Tkinter)

    Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...

  9. Python的GUI编程(TK)

    TK在大多数 Unix平台.Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口.可实现Python的GUI编程. Tkinter模 ...

  10. GUI的最终选择Tkinter模块初级篇

    一.Tkinter模块的基本使用 1)实例化窗口程序 import tkinter as tk app = tk.Tk() app.title("FishC Demo") app. ...

随机推荐

  1. 一个有意思的问题:Kafka的消费Offset会溢出吗

    最近在项目上接入公司APP产品的用户点击日志数据时,发现消费者组的Offset值非常大,才一天的时间,已提交的Offset值就有千亿级别了. 于是不禁想了一个问题:假设一个Topic就只有一个Part ...

  2. 硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件

    前言   有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了CH340G和MAX232芯片封装 ...

  3. 树莓派开发笔记(十六):树莓派4B+安装mariadb数据库(mysql开源分支)并测试基本操作

    前言   树莓派使用数据库时,优先选择sqlite数据库,但是sqlite是文件数据库同时仅针对于单用户的情况,考虑到多用户的情况,在树莓派上部署安装mariadb数据库服务(mysql的开源分支), ...

  4. 解析Spring中的循环依赖问题:再探三级缓存(AOP)

    前言 在之前的内容中,我们简要探讨了循环依赖,并指出仅通过引入二级缓存即可解决此问题.然而,你可能会好奇为何在Spring框架中还需要引入三级缓存singletonFactories.在前述总结中,我 ...

  5. 【Azure 应用服务】更便捷的方式抓取Azure App Service for Windows的网络包

    问题描述 在之前的一篇博文中,介绍了在App Service中抓取网络日志: 抓取Windows的网络包:[应用服务 App Service]App Service中抓取网络日志 抓取Linux的网络 ...

  6. HashMap很美好,但线程不安全怎么办?ConcurrentHashMap告诉你答案!

    写在开头 在<耗时2天,写完HashMap>这篇文章中,我们提到关于HashMap线程不安全的问题,主要存在如下3点风险: 风险1: put的时候导致元素丢失:如两个线程同时put,且ke ...

  7. Docker的使用记录

    开始 这是第一个尝试在Leanote上面编写文章,我觉得最重要的事情就是能够保证md文件是能够移植的,否则如果这个软件不靠谱的话,我还能把文章移动到别的地方去.所以先写一篇文章看看效果如何,方便不方便 ...

  8. 这波操作看麻了!十亿行数据,从71s到1.7s的优化之路。

    你好呀,我是歪歪. 春节期间关注到了一个关于 Java 方面的比赛,很有意思.由于是开源的,我把项目拉下来试图学(白)习(嫖)别人的做题思路,在这期间一度让我产生了一个自我怀疑: 他们写的 Java ...

  9. 导入Excel文件的时候公式为【#Ref!】应该怎么解决?

    前言 在我们使用Excel时,经常会遇到一个问题,就是导入Excel时公式显示为[#Ref!]的情况.这通常是因为公式中引用的单元格已被删除或对应的工作表被删除,导致原公式无法识别对应的参数而显示为[ ...

  10. 【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统

    基于SpringBoot+vue+iview个人极简博客 项目介绍 个人极简博客 [个人极简博客]是一个适用于初学者学习的博客系统,其中包含文章分类.写文章.标签管理.用户管理等基础功能,代码简洁注释 ...