PyQt QMainWindow的使用示例


Posted in Python onMarch 24, 2021

QMainWindow继承自QWidget
QMainWindow相当于程序的主界面,内置了menu和toolBar。
使用 Qt Designer 可以很方便地添加menu选项。

对于较大型的界面,用Qt Designer比较方便。.ui文件就像Android中使用xml一样。
画出的ui文件可以用PyQt中的PyUIC转换成py文件。转换后的py文件中有一个class。
新建一个继承自QMainWindow的类,来调用生成的这个类。

主窗口关闭时,会调用closeEvent(self, *args, **kwargs),可复写这个方法,加上一些关闭时的操作。
比如终止子线程,关闭数据库接口,释放资源等等操作。

PyQt5 手写 QMainWindow 示例

Win7  PyCharm  Python3.5.1  PyQt5

手写一个main window,主要使用了菜单栏、文本编辑框、工具栏和状态栏

|-- main.py
|-- res
| `-- sword.png
`-- ui
 `-- app_main_window.py

main.py主文件

import sys
 
from PyQt5.QtWidgets import QApplication
from ui.app_main_window import AppMainWindow
 
if __name__ == '__main__':
 app = QApplication(sys.argv)
 window = AppMainWindow()
 window.show()
 sys.exit(app.exec_())

app_main_window.py窗口实现文件

from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QTextEdit
 
 
class AppMainWindow(QMainWindow):
 """
 菜单栏、文本编辑框、工具栏和状态栏
 """
 
 def __init__(self):
  super().__init__()
  self.init_ui()
 
 def init_ui(self):
  # 菜单栏
  self.statusBar().showMessage('Main window is ready')
  self.setGeometry(500, 500, 450, 220)
  self.setMinimumSize(150, 120)
  self.setWindowTitle('MainWindow')
 
  # 文本编辑框
  text_edit = QTextEdit()
  self.setCentralWidget(text_edit) # 填充剩下的位置
 
  # 定义退出动作
  exit_action = QAction(QIcon('res/sword.png'), 'Exit', self)
  exit_action.setShortcut('Ctrl+Q')
  exit_action.setStatusTip('Exit App') # 鼠标指向选项时在窗口状态栏出现的提示
  # exit_action.triggered.connect(QCoreApplication.instance().quit)
  exit_action.triggered.connect(self.close) # 关闭app
 
  # 定义菜单栏,添加一个选项
  menu_bar = self.menuBar()
  file_menu = menu_bar.addMenu('&File')
  file_menu.addAction(exit_action)
 
  # 定义工具栏,添加一个退出动作
  toolbar = self.addToolBar('&Exit')
  toolbar.addAction(exit_action)

有的时候PyCharm给的代码提示不完全。网上说PyCharm配合vim插件来使用能带来很好的体验。

生成的界面中,工具栏可以自由的拖动,可以放在上下左右4个地方。

同样的代码,可以很方便地移植到PyQt4中。

使用designer画出来的界面

Ubuntu

使用designer绘制好界面后,讲ui文件转换成py代码。

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from ui_main_window import Ui_UAppMainWindow
 
 
class RustMainWindow(QMainWindow):
 """主界面类"""
 
 def __init__(self):
  super(RustMainWindow, self).__init__()
  self.ma = Ui_UAppMainWindow() # designer画的界面
  self.ma.setupUi(self)
 
 
if __name__ == "__main__":
 app = QApplication(sys.argv)
 main_window = RustMainWindow()
 main_window.show()
 sys.exit(app.exec_())

复写__init__初始化方法时需要调用父类方法

PyQt4手写窗口代码

和上面那个功能类似。

import sys
from PyQt4.QtGui import QMainWindow, QTextEdit, QAction, QIcon, QApplication
 
 
class AppMainWindow(QMainWindow):
 def __init__(self):
  super(AppMainWindow, self).__init__()
  self.init_ui()
 
 def init_ui(self):
  self.statusBar().showMessage('Main window is ready')
  self.setGeometry(500, 500, 450, 220)
  self.setMinimumSize(150, 120)
  self.setWindowTitle('MainWindow')
 
  text_edit = QTextEdit()
  self.setCentralWidget(text_edit)
 
  exit_action = QAction(QIcon('res/ic_s1.png'), 'Exit', self)
  exit_action.setShortcut('Ctrl+Q')
  exit_action.setStatusTip('Exit App')
  exit_action.triggered.connect(self.close)
 
  menu_bar = self.menuBar()
  file_menu = menu_bar.addMenu('&File')
  file_menu.addAction(exit_action)
 
  toolbar = self.addToolBar('&Exit')
  toolbar.addAction(exit_action)
 
 
if __name__ == '__main__':
 app = QApplication(sys.argv)
 window = AppMainWindow()
 window.show()
 sys.exit(app.exec_())

可以看出,PyQt4 和 5 的代码基本上是通用的。复写__init__的方法不同。

Python 相关文章推荐
python使用正则表达式检测密码强度源码分享
Jun 11 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
python re库的正则表达式入门学习教程
Mar 08 Python
python实现动态创建类的方法分析
Jun 25 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
Python with标签使用方法解析
Jan 17 Python
jenkins+python自动化测试持续集成教程
May 12 Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
PyQt 如何创建自定义QWidget
Mar 24 #Python
解决python 输出到csv 出现多空行的情况
opencv实现图像平移效果
python+selenium小米商城红米K40手机自动抢购的示例代码
Python使用openpyxl复制整张sheet
Mar 24 #Python
基于Python 函数和方法的区别说明
Mar 24 #Python
Pytorch之扩充tensor的操作
Mar 04 #Python
You might like
PHP 网页过期时间的控制代码
2009/06/29 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
详细解析Python中的变量的数据类型
2015/05/13 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
美国最大网上鞋店:Zappos
2016/07/25 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
医院实习介绍信
2014/01/12 职场文书
创建文明学校实施方案
2014/03/11 职场文书
建设投标担保书
2014/05/13 职场文书
施工安全生产承诺书
2014/05/23 职场文书
岗位职责说明书模板
2014/07/30 职场文书
医院领导班子整改方案
2014/10/01 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
十月围城观后感
2015/06/08 职场文书
学校运动会加油词
2015/07/18 职场文书
小学运动会通讯稿
2015/07/18 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python