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中的编码知识整理汇总
Jan 26 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
Python实现的科学计算器功能示例
Aug 04 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
May 10 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
python aiohttp的使用详解
Jun 20 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
Python定义一个Actor任务
Jul 29 Python
python绘图subplots函数使用模板的示例代码
Apr 30 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
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
JavaScript Prototype对象
2009/01/07 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
Python编程中的反模式实例分析
2014/12/08 Python
Python获取当前路径实现代码
2017/05/08 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
pandas取出重复数据的方法
2019/07/04 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
python中的测试框架
2020/11/13 Python
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
会议接待欢迎词
2014/01/12 职场文书
旷课检讨书1000字
2014/02/14 职场文书
补充协议书范本
2014/04/23 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书