python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择


Posted in Python onFebruary 26, 2020

PyQt中MainWindow, QWidget以及Dialog的区别和选择

1. Qt界面分类

在Qt Designer设计界面时,首先需要选择界面模板,主要分为三个类:

  1. Main Window
  2. Widget
  3. Dialog

2. 三种模板的区别(官方文档介绍)

MainWindow

QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。

主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态变得更容易。继承使创建当用户点击菜单项或者工具条按钮时被调用的槽成为可能。你也可以使用Qt设计器来创建主窗口。我们将简要地回顾一下有关添加菜单项和工具条按钮,然后描述QMainWindow自己的便捷。

Widget

QWidget类是所有用户界面对象的基类。

窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。

QWidget有很多成员函数,但是它们中的一些有少量的直接功能:例如,QWidget有一个字体属性,但是它自己从来不用。有很多继承它的子类提供了实际的功能,比如QPushButton、QListBox和QTabDialog等等。

Dialog

QDialog是最普通的顶级窗口。

不被嵌入到一个父窗口部件的窗口部件被叫做顶级窗口部件。通常情况下,顶级窗口部件是有框架和标题栏的窗口(尽管如果使用了一定的窗口部件标记,创建顶级窗口部件时也可能没有这些装饰。)在Qt中,QMainWindow和和不同的QDialog的子类是最普通的顶级窗口。

一个没有父窗口部件的窗口部件一直是顶级窗口部件。

3. 如何选择QMainWindow,QWidget,QDialog

大致理解是:

QMainWindow是完整的窗体,在window上可以加入widget,适合于完整的项目,因为它封装了toolbar,statusbar,central widget,docking area。

QWidget是raw widget,widget也可以容纳其他的widget,但是注意setCentralWidget是只能由mainwindow类调用的。

QDialog派生自QWidget,是顶级窗口,功能也最基础。

所以功能上QMainWindow > QWidget > QDialog

4. 在PyQt中初始化类的区别

QMainWindow

from test.py import Ui_MainWindow #通过pyuic产生的test.py中生成类
class mywindow(QMainWindow,Ui_MainWindow):
  def __init__(self,parent = None):
    super(mywindow,self).__init__(parent)
    self.setupUi(self)

QWidget

from test import Ui_Widget 
from PyQt5 import QtWidgets

class mywindow(QtWidgets.QWidget,Ui_Widget):
  def __init__(self,parent = None):
    super(mywindow,self).__init__(parent)
    self.setupUi(self)

本文主要分析介绍了python GUI库图形界面开发PyQt5中QMainWindow, QWidget以及QDialog的区别和怎样选择选择,更多关于python GUI库图形界面开发PyQt5开发请查看下面的相关链接

Python 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
python实现dict版图遍历示例
Feb 19 Python
使用Python生成url短链接的方法
May 04 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
python中的turtle库函数简单使用教程
Jul 23 Python
Django文件存储 默认存储系统解析
Aug 02 Python
python 实现简单的FTP程序
Dec 27 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
增大python字体的方法步骤
Jul 05 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 #Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 #Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 #Python
基于Python数据结构之递归与回溯搜索
Feb 26 #Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 #Python
Python基于Dlib的人脸识别系统的实现
Feb 26 #Python
python 回溯法模板详解
Feb 26 #Python
You might like
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php查询ip所在地的方法
2014/12/05 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
JS实现分页导航效果
2020/02/19 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
python爬虫爬取网页表格数据
2018/03/07 Python
详解numpy的argmax的具体使用
2019/05/27 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
师生聚会感言
2014/01/26 职场文书
满月酒主持词
2014/03/27 职场文书
合伙经营协议书范本
2014/04/18 职场文书
村级四风对照检查材料
2014/08/24 职场文书