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 21 Python
Python实现简单登录验证
Apr 13 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
python3判断url链接是否为404的方法
Aug 10 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
python实现大文件分割与合并
Jul 22 Python
centos7之Python3.74安装教程
Aug 15 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
如何搭建pytorch环境的方法步骤
May 06 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 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学习 字符串课件
2008/06/15 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
Javascript 读后台cookie代码
2008/09/15 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
JS作用域链详解
2017/06/26 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
python批量处理文件或文件夹
2020/07/28 Python
Python日志syslog使用原理详解
2020/02/18 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
ktv中秋节活动方案
2014/01/30 职场文书
教师专业自荐信
2014/05/31 职场文书
行风评议整改报告
2014/11/06 职场文书
2015年组织部工作总结
2015/04/03 职场文书
采购员岗位职责范本
2015/04/07 职场文书
创业计划书之便利店
2019/09/05 职场文书