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实现自动添加脚本头信息的示例代码
Sep 02 Python
Python中取整的几种方法小结
Jan 06 Python
python读取excel表格生成erlang数据
Aug 26 Python
python 整数越界问题详解
Jun 27 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
python实现简易学生信息管理系统
Apr 05 Python
Series和DataFrame使用简单入门
Nov 13 Python
Django配置文件代码说明
Dec 04 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Pytorch环境搭建与基本语法
Jun 03 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 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
jQuery 1.0.2
2006/10/11 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
新闻编辑自荐信
2013/11/03 职场文书
建筑行业的大学生自我评价
2013/12/08 职场文书
卖车协议书
2014/04/21 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis