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 相关文章推荐
wxPython中文教程入门实例
Jun 09 Python
python 字符串和整数的转换方法
Jun 25 Python
Atom的python插件和常用插件说明
Jul 08 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
python下载的库包存放路径
Jul 27 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
python井字棋游戏实现人机对战
Apr 28 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模板页面中分页代码的解析
2009/02/06 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
2014/11/18 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
php文件上传类的分享
2017/07/06 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
用js怎么把&字符换成"&amp:"
2006/10/19 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
Python内置的字符串处理函数整理
2013/01/29 Python
python中二维阵列的变换实例
2014/10/09 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python编程之string相关操作实例详解
2017/07/22 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
python实现局域网内实时通信代码
2019/12/22 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
Python文件操作的面试题
2013/06/22 面试题
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
2015年暑假工作总结
2015/07/13 职场文书
运动员代表致辞
2015/07/29 职场文书
网络营销实训总结
2015/08/03 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python