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内置函数bin() oct()等实现进制转换
Dec 30 Python
python通过BF算法实现关键词匹配的方法
Mar 13 Python
Python实现查找系统盘中需要找的字符
Jul 14 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
实时获取Python的print输出流方法
Jan 07 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
python 中关于pycharm选择运行环境的问题
Oct 31 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 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
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
js tab效果的实现代码
2009/12/26 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python深入学习之闭包
2014/08/31 Python
Python入门篇之编程习惯与特点
2014/10/17 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
python使用matplotlib绘制热图
2018/11/07 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
python 利用zmail库发送邮件
2020/09/11 Python
汽车促销活动方案
2014/03/31 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
先进员工事迹材料
2014/12/20 职场文书
追悼会答谢词
2015/01/05 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
汽车转让协议书
2015/01/29 职场文书
三好学生竞选稿
2015/11/21 职场文书
导游词之无锡梅园
2019/11/28 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
MySQL基础(一)
2021/04/05 MySQL
详解Python常用的魔法方法
2021/06/03 Python
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
Python中的datetime包与time包包和模块详情
2022/02/28 Python