GUI学习之二十四——QDialog学习总结
今天学习对话框输入控件的基类(QDialog)。
一.描述
是对话类窗口(字体框、颜色选择、文件选择框等)的基类。
对话框窗口是顶级窗口(就是说不包含于哪个父类的显示界面里),主要用于短期任务和与用户的短期通信。
QDialogs是可以有返回值的(字体、颜色等),有默认按钮(确认、取消和关闭)。
二.对话框的种类
对话框可以是模态或非模态的对话框
模态对话框也分两种
应用程序级别(exec()),当该种对话框出现时,用户必须首先对该对话框进行操作,直至关闭后才能访问程序中的其他窗口(注意是访问而不是操作,不关闭时都看不到)。
import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.resize(800,600)
le = QLineEdit(window)
window.setWindowTitle('主界面')
d = QDialog()
d.setWindowTitle('对话框')
d.exec() #注意要在window.show的前面
window.show()
sys.exit(app.exec_())
运行以后会发现弹出了对话框

看到右上角的按钮了么?注意不是最小化最大化了!是一个提示按钮和关闭按钮。关闭界面以后才能弹出主界面。

注意并不是对话框把主界面遮盖了,你拖拽也能发现主界面是没有显示的。
窗口级别(open()),对话框仅仅阻塞与其关联的窗口,用户可和程序内其他窗口交互。就像我们word文件里,打开’打开文件对话框‘,只要对话框不关闭是无法对其进行操作的。因为打开文件对话框和word的窗口是关联的
我们把上面代码中的exec改成open看看有什么效果
import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.resize(800,600)
le = QLineEdit(window)
window.setWindowTitle('主界面')
d = QDialog()
d.setWindowTitle('对话框')
d.open() #注意要在window.show的前面
window.show()
sys.exit(app.exec_())
运行以后发现可以访问主界面啊

愿意是因为我们上面讲的,只阻塞和对话框关联的界面,所以我们在声明对话框时应该加上父级控件
d = QDialog(window)
这样就无法访问主界面了。
非模态对话框
非模态的只有一种状态(show()),在使用中不会阻塞与对话框关联的窗口进行交互,就像word里的查找对话框,对话框即使不关闭也可以对主窗口进行交互。
import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.resize(800,600)
le = QLineEdit(window)
window.setWindowTitle('主界面')
d = QDialog(window)
d.setWindowTitle('对话框')
d.show() #注意要在window.show的前面
window.show()
sys.exit(app.exec_())
这样就可以访问主界面了

这里要注意一点:在访问主界面的时候对话框是在主界面上面的。两个可以同时操作互不影响。
非模态的对话框也可以结合下面的语法实现为模态对话框。
QDialog.setModal(self, modal: bool)
或者这样
QDialog.setWindowModality(self, windowModality: QtCore.Qt.WindowModality)
NonModal = ... # type: 'Qt.WindowModality'
WindowModal = ... # type: 'Qt.WindowModality'
ApplicationModal = ... # type: 'Qt.WindowModality'
三.常用功能作用
1.是否显示尺寸调整控件

控件右下角有尺寸调整控件
QDialog.setSizeGripEnabled(self, a0: bool)
QDialog.isSizeGripEnabled()
2.常用槽函数
QDialog.accept() #返回值为1
QDialog.reject() #返回值为0
QDialog.done(self, a0: int) #返回值为设定值
可以看一下效果
import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.resize(800,600)
le = QLineEdit(window)
window.setWindowTitle('主界面')
d = QDialog(window)
d.setWindowTitle('对话框')
btn1 = QPushButton('btn1',d)
btn1.clicked.connect(lambda :d.accept())
btn1.move(100,200)
btn2 = QPushButton('btn2',d)
btn2.move(250,200)
btn2.clicked.connect(lambda :d.reject())
btn3 = QPushButton('btn3',d)
btn3.move(500,200)
btn3.clicked.connect(lambda :d.done(123))
result = d.exec() #注意要在window.show的前面
print(result)
window.show()
sys.exit(app.exec_())
点击按钮,可以看出不同的槽有不同的返回值的。
当然,我们还可以给对话框设定一个返回值
QDialog.setResult()
QDialog.result()
import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.resize(800,600)
le = QLineEdit(window)
window.setWindowTitle('主界面')
d = QDialog(window)
d.setWindowTitle('对话框')
btn1 = QPushButton('btn1',d)
btn1.clicked.connect(lambda :d.accept())
btn1.move(100,200)
btn2 = QPushButton('btn2',d)
btn2.move(250,200)
btn2.clicked.connect(lambda :print(d.result())) #获取返回值
btn3 = QPushButton('btn3',d)
btn3.move(500,200)
btn3.clicked.connect(lambda :d.setResult(112233)) #设定返回值
result = d.exec()
print(result)
window.show()
sys.exit(app.exec_())
如果不设置直接点击btn2的话,默认的返回值为0。并且这个方法是在不关闭对话框的前提下获得返回值。
四.信号
和上面的槽对应,有相应的信号
accept——accepted
reject——rejected
done——finished
结合槽和信号就一个案例说明所有的问题
import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.resize(800,600)
le = QLineEdit(window)
window.setWindowTitle('主界面')
d = QDialog(window)
d.setWindowTitle('对话框')
btn1 = QPushButton('btn1',d)
btn1.clicked.connect(lambda :d.accept())
d.accepted.connect(lambda :print('btn1 is clicked'))
btn1.move(100,200)
btn2 = QPushButton('btn2',d)
btn2.move(250,200)
btn2.clicked.connect(lambda :print(d.reject())) #获取返回值
d.rejected.connect(lambda :print('btn2 is clicked'))
btn3 = QPushButton('btn3',d)
btn3.move(500,200)
btn3.clicked.connect(lambda :d.done(112233)) #设定返回值
d.finished.connect(lambda val:print('btn3 is clicked',val))
result = d.exec()
print(result)
window.show()
sys.exit(app.exec_())
点击一下各个按钮会发现一个现象:不了点击哪个按钮都会显示btn3被点击,所以说accepted和rejected都会导致finished被调用。
GUI学习之二十四——QDialog学习总结的更多相关文章
- python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...
- 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用
目录 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用 24.1 expect实现无交互登录 24.1.1 安装和使用expect 24.2 正则表达式的使用 24 ...
- 设计模式学习(二十四):Spring 中使用到的设计模式
设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...
- (C/C++学习笔记) 二十四. 知识补充
二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...
- GUI学习之二十五——QFontDialog学习总结
今天学习字体对话框——QFontDialog()控件. QFontDialog()是继承自QDialog()的一个子类,用来选择给定的字体(包括字体.字号.样式等) 一.构造函数 QFontDialo ...
- javaweb学习总结(二十四)——jsp传统标签开发
一.标签技术的API 1.1.标签技术的API类继承关系 二.标签API简单介绍 2.1.JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属 ...
- GUI学习之二十九—QFileDialog学习总结
今天学习的是文件对话框——QFileDialog 一.描述 QFileDialog提供了一个对话框,允许用户选择文件或者目录,也允许用户遍历文件系统,用以选择一个或多个文件或者目录. QFileDia ...
- Go语言核心36讲(Go语言实战与应用二十四)--学习笔记
46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. s ...
- Python学习(二十四)—— 前端基础之Bookstrap
转载自:http://www.cnblogs.com/liwenzhou/p/8214637.html 一.Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.Jav ...
随机推荐
- NDK下编译JNI
NDK环境下编译JNI 下载demo.tar.gz然后解压 弄个套路 1.编辑build.sh设置好NDK目录 2.把cpp文件放到code下面 运行sh build.sh即可
- JRE、JDK、JVM 及 JIT 之间有什么不同
java虚拟机(JVM) 使用java编程语言的主要优势就是平台的独立性.你曾经想知道过java怎么实现平台的独立性吗?对,就是虚拟机,它抽象化了硬件设备,开发者和他们的程序的得以操作系统.虚 ...
- lnmp源码搭建
Nginx工作原理 这里需要结合Apache的工作,对PHP文件处理过程的区别 1:Nginx是通过php-fpm这个服务来处理php文件 2:Apache是通过libphp5.so ...
- 2、Shiro的认证
Shiro的认证流程大体可以参考下面这幅图: 但是没有接触过shiro的同学看到上面的图片也不明白,下面我们来在代码中尝试体验Shiro的认证过程: 1.新建一个SpringBoot项目项目结构如下: ...
- python插件快速安装
windows下安装python插件没有linux那样方便. 可以先安装easy_install.我的是win64 下载地址 直接下载py文件运行,将对应目录添加到环境变量,我的是D:\dev_t ...
- ubuntu的无线网无法连上
自己的笔记本可以连上wireless,但是实验室的台式机无法连上. 有无线显示,就是无法连上. 后来把连在机箱上的网线拔了以后可以连无线了.如果有网线连接,系统优先会选择有线的上网.
- ES6实现数组去重
ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Array.from方法可以将 Set 结构转为数组. 扩展运算符内部调用的是数据结构的 Iterator 接 ...
- 细说python类3——类的创建过程
细说python类3——类的创建过程 https://blog.csdn.net/u010576100/article/details/50595143 2016年01月27日 18:37:24 u0 ...
- apue 在 mac 环境编译错误
参考资料:https://unix.stackexchange.com/questions/105483/compiling-code-from-apue 笔者使用 mac 学习 apue, 在编译的 ...
- LeetCode.872-叶子值相等的树(Leaf-Similar Trees)
这是悦乐书的第334次更新,第358篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第204题(顺位题号是872).考虑二叉树的所有叶子,从左到右的顺序,这些叶子的值形成叶 ...