PyQt4学习笔记2】QMainWindow

目录

一、创建 QMainWindow 组件

1. 创建工具栏

2. 创建停靠窗口

3. 设置状态栏

4. 设置中央窗口部件

二、QMainWindow 的主要方法

1. addToolBar()

2. addDockWidget()

3. setStatusBar()

4. setCentralWidget()

5. menuBar()

6. saveState() 和 restoreState()

三、QMainWindow 的高级功能

1. 动画效果

2. 停靠窗口嵌套

3. 自定义上下文菜单

完整示例

参考资料


QMainWindow 是 PyQt4 中用于创建主应用程序窗口的类。它提供了一个经典的窗口布局,包括菜单栏、工具栏、状态栏和中央窗口部件。此外,它还支持停靠窗口(dock widgets)和拆分窗口(MDI - Multiple Document Interface)等功能。

一、创建 QMainWindow 组件

1. 创建工具栏

工具栏由 QToolBar 类实现。可以通过 addToolBar() 方法将工具栏添加到主窗口中。工具栏可以被放置在窗口的顶部、底部、左侧或右侧。

from PyQt4 import QtGuiclass Example(QtGui.QMainWindow):def __init__(self):super(Example, self).__init__()self.initUI()def initUI(self):# 创建工具栏toolbar = self.addToolBar("File")toolbar.addAction("Open", self.openFile)toolbar.addAction("Save", self.saveFile)self.setWindowTitle("QMainWindow Example")self.resize(400, 300)def openFile(self):print("Open file")def saveFile(self):print("Save file")

2. 创建停靠窗口

停靠窗口由 QDockWidget 类实现。可以通过 addDockWidget() 方法将停靠窗口添加到主窗口中。

from PyQt4 import QtGuiclass Example(QtGui.QMainWindow):def __init__(self):super(Example, self).__init__()self.initUI()def initUI(self):# 创建停靠窗口dockWidget = QtGui.QDockWidget("Dock Widget", self)dockWidget.setWidget(QtGui.QLabel("This is a dock widget"))# 在停靠和浮动时设置QDockWidget的边框dockWidget.setStyleSheet("""/*  设置QDockWidget导航栏的边框 */QDockWidget#dockWidget {background-color: lightblue;     /* 设置背景颜色 */border: 2px solid black;        /* 设置边框 */border-radius: 5px;             /* 设置边框圆角 */}/*  在停靠和浮动时设置QDockWidget边框 */QDockWidget > QWidget {border: 5px solid purple;}""")self.addDockWidget(QtGui.Qt.LeftDockWidgetArea, dockWidget)self.setWindowTitle("QMainWindow Example")self.resize(400, 300)

3. 设置状态栏

可以通过 setStatusBar() 方法设置状态栏。状态栏是一个 QStatusBar 对象,用于显示状态信息。

from PyQt4 import QtGuiclass Example(QtGui.QMainWindow):def __init__(self):super(Example, self).__init__()self.initUI()def initUI(self):# 创建一个状态栏self.status_bar = QtGui.QStatusBar()self.setStatusBar(self.status_bar)# 显示一条状态消息self.status_bar.showMessage(u"欢迎使用 PyQt4!", 3000)  # 消息停留 3000 毫秒(3秒)# 设置状态栏的样式表self.statusBar().setStyleSheet("""QStatusBar {background-color: lightgreen;}""")

4. 设置中央窗口部件

中央窗口部件是主窗口的核心部分,可以通过 setCentralWidget() 方法设置。

from PyQt4 import QtGuiclass Example(QtGui.QMainWindow):def __init__(self):super(Example, self).__init__()self.initUI()def initUI(self):# 创建中央窗口部件centralWidget = QtGui.QWidget()self.setCentralWidget(centralWidget)self.setWindowTitle("QMainWindow Example")self.resize(400, 300)

二、QMainWindow 的主要方法

1. addToolBar()

将工具栏添加到主窗口中。可以指定工具栏的位置(如顶部、底部、左侧或右侧)。

toolbar = self.addToolBar("File", QtGui.Qt.TopToolBarArea)

2. addDockWidget()

将停靠窗口添加到主窗口中。第一个参数可以指定停靠窗口的位置(如顶部:QtCore.Qt.TopDockWidgetArea、底部、左侧:QtCore.Qt.LeftDockWidgetArea或右侧)。

dockWidget = QtGui.QDockWidget("Dock Widget", self)
self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, dockWidget)

3. setStatusBar()

设置主窗口的状态栏。

# 创建一个状态栏
self.status_bar = QtGui.QStatusBar()
self.setStatusBar(self.status_bar)# 显示一条状态消息
self.status_bar.showMessage(u"欢迎使用 PyQt4!", 3000)  # 消息停留 3000 毫秒(3秒)

4. setCentralWidget()

设置主窗口的中央窗口部件。

centralWidget = QtGui.QWidget()
self.setCentralWidget(centralWidget)
# 设置中央窗口部件(Central Widget)的边框和背景颜色
centralWidget.setStyleSheet("""QWidget {background-color: lightyellow;border: 2px dashed red;}
""")

5. menuBar()

获取主窗口的菜单栏。

menuBar = self.menuBar()

6. saveState()restoreState()

保存和恢复主窗口的状态(包括工具栏和停靠窗口的布局)。

# 保存状态
state = self.saveState()# 恢复状态
self.restoreState(state)

三、QMainWindow 的高级功能

1. 动画效果

可以通过 setAnimated() 方法启用或禁用动画效果。

self.setAnimated(True)

2. 停靠窗口嵌套

可以通过 setDockNestingEnabled() 方法启用或禁用停靠窗口的嵌套功能。

self.setDockNestingEnabled(True)

3. 自定义上下文菜单

可以通过重写 createPopupMenu() 方法来自定义主窗口的上下文菜单。

class Example(QtGui.QMainWindow):def createPopupMenu(self):menu = QtGui.QMenu(self)menu.addAction("Custom Action")return menu

完整示例

以下是一个完整的示例,展示了如何使用 QMainWindow 创建一个包含菜单栏、工具栏、停靠窗口和状态栏的主窗口:

# -*- coding: utf-8 -*-from PyQt4 import QtGui, QtCoreclass Example(QtGui.QMainWindow):def __init__(self):super(Example, self).__init__()self.initUI()def initUI(self):# 创建菜单栏menubar = self.menuBar()fileMenu = menubar.addMenu("File")fileMenu.addAction("Exit", self.close)# 创建工具栏toolbar = self.addToolBar("File")toolbar.addAction("Open", self.openFile)toolbar.addAction("Save", self.saveFile)# 创建停靠窗口dockWidget = QtGui.QDockWidget("Dock Widget", self)# 创建一个 QLabel 作为 QDockWidget 的内容self.label = QtGui.QLabel(u"这是 QDockWidget 的内容区域", dockWidget)# 设置 QLabel 的背景色self.label.setStyleSheet("background-color: #4CAF50;")dockWidget.setWidget(self.label)# 设置停靠窗口的样式表# 设置对象名称:为 QDockWidget 设置对象名称,然后在样式表中使用该名称进行选择。dockWidget.setObjectName("dockWidget")# self.setStyleSheet("""#     QMainWindow {#         background-color: white;#     }#     QDockWidget#dockWidget {#         background-color: lightblue;#         border: 2px solid black;#         border-radius: 5px;#     }# """)dockWidget.setStyleSheet("""/*  设置QDockWidget导航栏的边框 */QDockWidget#dockWidget {background-color: lightblue;     /* 设置背景颜色 */border: 2px solid black;        /* 设置边框 */border-radius: 5px;             /* 设置边框圆角 */}/*  在停靠和浮动时设置QDockWidget边框 */QDockWidget > QWidget {border: 5px solid purple;}""")# 设置整个窗口的样式表,包括 QDockWidget 的背景色self.setStyleSheet("QDockWidget { background-color: #4CAF50; }")self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, dockWidget)# 创建状态栏# 创建一个状态栏self.status_bar = QtGui.QStatusBar()self.setStatusBar(self.status_bar)# 显示一条状态消息self.status_bar.showMessage(u"欢迎使用 PyQt4!", 3000)  # 消息停留 3000 毫秒(3秒)# 设置状态栏的样式表self.statusBar().setStyleSheet("""QStatusBar {background-color: lightgreen;}""")# 创建中央窗口部件centralWidget = QtGui.QWidget()self.setCentralWidget(centralWidget)# 设置中央窗口部件(Central Widget)的边框和背景颜色centralWidget.setStyleSheet("""QWidget {background-color: lightyellow;border: 2px dashed red;}""")self.setWindowTitle("QMainWindow Example")self.resize(1000, 800)def openFile(self):print("Open file")def saveFile(self):print("Save file")if __name__ == "__main__":app = QtGui.QApplication([])ex = Example()ex.show()app.exec_()# 确保通过 QtCore.Qt 来访问 Qt 命名空间中的成员,而不是 QtGui.Qt。

参考资料

  • QMainWindow Class Reference - 《PyQt4 中文文档》


 ------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12291.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:文件系统(软硬链接)

目录 inode ext2文件系统 Block Group 超级块(Super Block) GDT(Group Descriptor Table) 块位图(Block Bitmap) inode位图(Inode Bitmap) i节点表(inode Tabl…

ubuntu22.40安装及配置静态ip解决重启后配置失效

遇到这种错误,断网安装即可! 在Ubuntu中配置静态IP地址的步骤如下。根据你使用的Ubuntu版本(如 Netplan 或传统的 ifupdown),配置方法有所不同。以下是基于 Netplan 的配置方法(适用于Ubuntu 17.10及更高版…

手写MVVM框架-实现简单的数据代理

MVVM框架最显著的特点就是虚拟dom和响应式的数据、我们以Vue为例,分别实现data、computed、created、methods以及虚拟dom。 这一章我们先实现简单的响应式,修改数据之后在控制台打印。 我们将该框架命名为MiniVue。 首先我们需要创建MiniVue的类(src/co…

ESLint

ESLint ESLint 是一个针对 JS 的代码风格检查工具,当不满足其要求的风格时,会给予警告或错误。 官网:https://eslint.org/ 中文网:https://eslint.nodejs.cn/ 安装使用 在你的项目中安装 ESLint 包: npm install -…

kaggle视频行为分析1st and Future - Player Contact Detection

这次比赛的目标是检测美式橄榄球NFL比赛中球员经历的外部接触。您将使用视频和球员追踪数据来识别发生接触的时刻,以帮助提高球员的安全。两种接触,一种是人与人的,另一种是人与地面,不包括脚底和地面的,跟我之前做的这…

Chapter 6 -Fine-tuning for classification

Chapter 6 -Fine-tuning for classification 本章内容涵盖 引入不同的LLM微调方法准备用于文本分类的数据集修改预训练的 LLM 进行微调微调 LLM 以识别垃圾邮件评估微调LLM分类器的准确性使用微调的 LLM 对新数据进行分类 现在,我们将通过在大语言模型上对特定目标任…

【从零开始的LeetCode-算法】922. 按奇偶排序数组 II

给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。 对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。 你可以返回 任何满足上述条件的…

python 小游戏:扫雷

目录 1. 前言 2. 准备工作 3. 生成雷区 4. 鼠标点击扫雷 5. 胜利 or 失败 6. 游戏效果展示 7. 完整代码 1. 前言 本文使用 Pygame 实现的简化版扫雷游戏。 如上图所示,游戏包括基本的扫雷功能:生成雷区、左键点击扫雷、右键标记地雷、显示数字提示…

安全策略实验报告

1.实验拓扑图 2.实验需求 vlan2属于办公区,vlan3生产区 办公区pc在工作日时间可以正常访问OAserver,i其他时间不允许 办公区pc可以在任意时间访问Web server 生产区pc可以在任意时间访问OA server但不能访问web server 特例:生产区pc可以…

力扣73矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 输入:matrix [[0,1,2,0],[3,4,5,2],[…

蓝桥杯C语言组:暴力破解

基于C语言的暴力破解方法详解 暴力破解是一种通过穷举所有可能的解来找到正确答案的算法思想。在C语言中,暴力破解通常用于解决那些问题规模较小、解的范围有限的问题。虽然暴力破解的效率通常较低,但它是一种简单直接的方法,适用于一些简单…

【自然语言处理(NLP)】生成词向量:GloVe(Global Vectors for Word Representation)原理及应用

文章目录 介绍GloVe 介绍核心思想共现矩阵1. 共现矩阵的定义2. 共现概率矩阵的定义3. 共现概率矩阵的意义4. 共现概率矩阵的构建步骤5. 共现概率矩阵的应用6. 示例7. 优缺点优点缺点 **总结** 目标函数训练过程使用预训练的GloVe词向量 优点应用总结 个人主页:道友老…

介绍一下Mybatis的Executor执行器

Executor执行器是用来执行我们的具体的SQL操作的 有三种基本的Executor执行器: SimpleExecutor简单执行器 每执行一次update或select,就创建一个Statement对象,用完立刻关闭Statement对象 ReuseExecutor可重用执行器 可重复利用Statement…

Autosar-以太网是怎么运行的?(Davinci配置部分)

写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 目录 1.Autosar ETH通讯软件架构 2.Ethernet MCAL配置 2.1配置对应Pin属性 2.2配置TXD引脚 2.3配…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户登录

🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯1.登录-持久层 &…

VSCode设置内容字体大小

1、打开VSCode软件,点击左下角的“图标”,选择“Setting”。 在命令面板中的Font Size处选择适合自己的字体大小。 2、对比Font Size值为14与20下的字体大小。

企业商业秘密百问百答之三十八【商务保密协议签订】

《企业商业秘密百问百答》是由天禾律所陈军律师团队精心编撰的成果,汇集了该团队律师在处理商业秘密相关的刑事和民事案件中的丰富经验。近年来,这份资料已通过线上和线下的方式向全国近千家企业进行了广泛宣讲,并获得了积极的社会反响。 其…

C++11中的bind

官方文档对于bind接口的概述解释:Bind function arguments 在C11中,std::bind 是一个非常有用的工具,用于将函数、成员函数或函数对象与特定的参数绑定在一起,生成一个新的可调用对象。std::bind 可以用于部分应用函数参数、改变…

Qt网络相关

“ 所有生而孤独的人,葆有的天真 ” 为了⽀持跨平台, QT对⽹络编程的 API 也进⾏了重新封装。本章会上手一套基于QT的网络通信编写。 UDP Socket 在使用Qt进行网络编程前,需要在Qt项目中的.pro文件里添加对应的网络模块( network ). QT core gui net…

会计学基础

【拯救者】会计学基础速成(期末 复试 升本均可用) ©无忌教育 重点: 适用课本: 会计基础 会计基础是指会计工作的基本原则和方法,它努力为会计核算提供一个共同的基础,以便各种组织在会计核算上得到一致的结果。会计基础主要…