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中使用pprint函数进行格式化输出的教程
Apr 07 Python
在Django中创建第一个静态视图
Jul 15 Python
python实现二叉树的遍历
Dec 11 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
网易有道2017内推编程题 洗牌(python)
Jun 19 Python
python支付宝支付示例详解
Aug 22 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
Python Opencv实现单目标检测的示例代码
Sep 08 Python
python/golang 删除链表中的元素
Sep 14 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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
php empty函数 使用说明
2009/08/10 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
用Juery网页选项卡实现代码
2011/06/13 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
python不带重复的全排列代码
2013/08/13 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
python wsgiref源码解析
2021/02/06 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
linux面试题参考答案(4)
2013/01/28 面试题
软件工程师面试题
2012/06/25 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
怎样写演讲稿
2014/01/04 职场文书
饭店工作计划书
2014/01/10 职场文书
《荷花》教学反思
2014/04/16 职场文书
2014财务年度工作总结
2014/11/11 职场文书
车队安全员岗位职责
2015/02/15 职场文书
退货证明模板
2015/06/23 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python
CSS的calc函数用法小结
2022/06/25 HTML / CSS