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 正则表达式操作指南
May 04 Python
python目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
简单使用Python自动生成文章
Dec 25 Python
Python标准库urllib2的一些使用细节总结
Mar 16 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
Python中的字符串操作和编码Unicode详解
Jan 18 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
Python Collatz序列实现过程解析
Oct 12 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 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
dedecms系统常用术语汇总
2007/04/03 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
JavaScript运算符小结
2015/06/03 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
Angular工具方法学习
2016/12/26 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
vue单页缓存方案分析及实现
2018/09/25 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
python模块之time模块(实例讲解)
2017/09/13 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python中for用来遍历range函数的方法
2018/06/08 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
回门宴父母答谢词
2014/01/26 职场文书
入党自荐书范文
2014/03/09 职场文书
毕业证代领委托书
2014/09/26 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
学校运动会广播稿
2014/10/11 职场文书
故宫导游词
2015/01/31 职场文书
基石观后感
2015/06/12 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android