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中range()与xrange()用法分析
Sep 21 Python
Python tkinter事件高级用法实例
Jan 31 Python
Django自定义manage命令实例代码
Feb 11 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
Python实现的直接插入排序算法示例
Apr 29 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
python pandas生成时间列表
Jun 29 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
python新式类和经典类的区别实例分析
Mar 23 Python
python定义类的简单用法
Jul 24 Python
python爬虫分布式获取数据的实例方法
Nov 26 Python
详解Python自动化之文件自动化处理
Jun 21 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 数组教程 定义数组
2009/10/23 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
prototype Element学习笔记(Element篇三)
2008/10/26 Javascript
js 匿名调用实现代码
2009/06/19 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
Python实现注册、登录小程序功能
2018/09/21 Python
python实现查找所有程序的安装信息
2020/02/18 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
Python list和str互转的实现示例
2020/11/16 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
2014年大学生就业规划书
2014/04/04 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
大学毕业生个人总结
2015/02/28 职场文书
仓库统计员岗位职责
2015/04/14 职场文书