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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
编程语言Python的发展史
Sep 26 Python
Python数据类型详解(二)列表
May 08 Python
django初始化数据库的实例
May 27 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
python剪切视频与合并视频的实现
Mar 03 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
JS实现放大镜效果
2020/09/21 Javascript
python关键字and和or用法实例
2015/05/28 Python
python获取文件扩展名的方法
2015/07/06 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
python3 字符串知识点学习笔记
2020/02/08 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
.NET面试问题集
2015/12/08 面试题
三查三看党性分析材料
2014/02/18 职场文书
会走路的树教学反思
2014/02/20 职场文书
校庆接待方案
2014/03/18 职场文书
先进班集体事迹材料
2014/12/25 职场文书
单位实习鉴定评语
2015/01/04 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
看雷锋电影观后感
2015/06/10 职场文书
公司老总年会致辞
2015/07/30 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书