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 相关文章推荐
Python Tkinter基础控件用法
Sep 03 Python
Python下Fabric的简单部署方法
Jul 14 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
python修改字典键(key)的方法
Aug 05 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
python实现滑雪者小游戏
Feb 22 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
python实现xml转json文件的示例代码
Dec 30 Python
Python关于OS文件目录处理的实例分享
May 23 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
将数组写入txt文件 var_export
2009/04/21 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
动态控制Table的js代码
2007/03/07 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
详解Swift中属性的声明与作用
2016/06/30 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
numpy.where() 用法详解
2019/05/27 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
精灵市场:Pixie Market
2019/06/18 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
销售人员中英文自荐信
2013/09/22 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
劳模先进事迹材料
2014/12/24 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
css弧边选项卡的项目实践
2023/05/07 HTML / CSS