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标准库内置函数complex介绍
Nov 25 Python
python爬取51job中hr的邮箱
May 14 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
详解Python中namedtuple的使用
Apr 27 Python
python开发入门——列表生成式
Sep 03 Python
Python eval函数介绍及用法
Nov 09 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
python代码实现备忘录案例讲解
Jul 26 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
生成缩略图
2006/10/09 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
Python判断字符串与大小写转换
2015/06/08 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
哈弗商学院毕业生求职信
2014/02/26 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL