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写的一个squid访问日志分析的小程序
Sep 17 Python
跟老齐学Python之list和str比较
Sep 20 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
Python get获取页面cookie代码实例
Sep 12 Python
python实现Zabbix-API监控
Sep 17 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
Python动态声明变量赋值代码实例
Dec 30 Python
Python实现计算图像RGB均值方式
Jun 04 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
Python闭包装饰器使用方法汇总
Jun 29 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
angular十大常见问题
2017/03/07 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
详解如何运行vue项目
2019/04/15 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
python 弧度与角度互转实例
2020/04/15 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
Collection和Collections的区别
2016/05/02 面试题
机电专业毕业生求职信
2013/10/27 职场文书
初中生自我评价
2014/02/01 职场文书
小区消防演习方案
2014/02/21 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
Java异常处理try catch的基本用法
2021/12/06 Java/Android