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序列之list和tuple常用方法以及注意事项
Jan 09 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
pytorch构建网络模型的4种方法
Apr 13 Python
python实现屏保计时器的示例代码
Aug 08 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
Python threading.local代码实例及原理解析
Mar 16 Python
pandas.DataFrame.drop_duplicates 用法介绍
Jul 06 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 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/09/10 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
node.js入门学习之url模块
2017/02/25 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
python3 简单实现组合设计模式
2020/07/02 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
教师辞职报告范文
2014/01/20 职场文书
担保书格式及范文
2014/04/01 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
升职自荐书
2019/05/09 职场文书
KVM基础命令详解
2022/04/30 Servers