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抓取网页内容示例分享
Feb 24 Python
python中ConfigParse模块的用法
Sep 29 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
总结python爬虫抓站的实用技巧
Aug 09 Python
Python实现的密码强度检测器示例
Aug 23 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
Python中str.join()简单用法示例
Mar 20 Python
python实现扫描日志关键字的示例
Apr 28 Python
python pyheatmap包绘制热力图
Nov 09 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 Python
Python内置函数及功能简介汇总
Oct 13 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 cookie 登录验证示例代码
2009/03/16 PHP
php xml实例 留言本
2009/03/20 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
基于php判断客户端类型
2016/10/14 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python爬取成语接龙类网站
2018/10/19 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
《水乡歌》教学反思
2014/04/24 职场文书
购房委托书范本
2014/09/18 职场文书
《春酒》教学反思
2016/02/22 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
Python Django模型详解
2021/10/05 Python