PyQt5 模态对话框与非模态对话框的区别

本文介绍了PyQt5中模态对话框和非模态对话框的区别,包括它们的交互特性,以及show()与exec_()方法的使用。通过实例代码展示了如何创建和使用这两种对话框,帮助理解它们在应用程序中的行为。
摘要由CSDN通过智能技术生成

模态对话框与非模态对话框的区别

记录博文
一、模态对话框
  1. 应用程序模态对话框:一旦调用该对话框,它就会成为应用程序唯一能够与用户进行交互的部件。在关闭该对话框之前,用户都不能使用应用程序的其他部件。当然,用户还可以自由使用其他的应用程序。比如,通过单机其他应用程序而使其获得光标。
  2. 窗口模态对话框:与应用程序模态对话框工作方式相似,除了它会阻止与其父窗口、父窗口的父窗口并直至顶层窗口等的交互,当然也会阻止与父窗口同层各兄弟窗口的交互。对于只有一个顶层窗口的那些应用程序老说,在实践上不会存在应用程序模态与窗口模态的区别。
二、非模态对话框

当调用非模态对话框的时候,用户可以与该对话框以及应用程序的其它部分交互。这会对如何设计代码产生影响,因为用户可以既从主窗口又从非模态对话框两边同时修改程序的状态,这就可能造成两者相互影响。

三、show() 与 exec_()的区别

exec() 有返回值,show() 没有返回值。其次这两个方法的作用也不同。调用 show() 的作用仅仅是将 Widget 及其上的内容都显示出来。而调用 exec() 后,调用线程将会被阻塞,直到 Dialog 关闭。

实际的小例子:

    def setPenProperties(self):
        dialog = PenPropertiesDlg(self)
        dialog.widthSpinBox.setValue(self.width)
        dialog.beveledCheckBox.setChecked(self.beveled)
        dialog.styleComboBox.setCurrentIndex(dialog.styleComboBox.findText(self.style))
        if dialog.exec_():
            self.width = dialog.widthSpinBox.value()
            self.beveled = dialog.beveledCheckBox.isChecked()
            self.style = dialog.styleComboBox.currentText()
            self.updateData()

当对话框窗口关闭之后,获取对话框的宽度微调框(widthSpinBox)的值,获取复选框(beveledCheckBox)的选择状态,获取组合框(styleComboBox)的文本字符串,并刷新主窗口。

四、完整的实例代码
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class PenPropertiesDlg(QDialog):

    def __init__(self, parent=None):
        super(PenPropertiesDlg, self).__init__(parent)

        widthLabel = QLabel("&Width:")
        self.widthSpinBox = QSpinBox()
        widthLabel.setBuddy(self.widthSpinBox)
        self.widthSpinBox.setAlignment
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值