相关文章推荐

QDialog的显示有两个函数show()和exec()。他们的区别在参考文档上的解释如下:

show():
显示一个 非模式 对话框。控制权即刻返回给调用函数。
弹出窗口是否模式对话框,取决于modal属性的值。

exec():
显示一个 模式 对话框,并且锁住程序直到用户关闭该对话框为止。函数返回一个DialogCode结果。
在对话框弹出期间,用户不可以切换同程序下的其它窗口,直到该对话框被关闭。

模式与非模式

模式对话框,就是在弹出窗口的时候,整个程序就被锁定了,处于等待状态,直到对话框被关闭。这时往往是需要对话框的返回值进行下面的操作。如:确认窗口(选择“是”或“否”)。
非模式对话框,在调用弹出窗口之后,调用即刻返回,继续下面的操作。这里只是一个调用指令的发出,不等待也不做任何处理。如:查找框。

简单的理解:

首先这两个方法返回值不同。exec()有返回值,show()没有返回值。

其次这两个方法的作用也不同。调用show()的作用仅仅是将widget及其上的内容都显示出来,控制权即刻返回给调用函数。而调用exec()后,调用线程将会被阻塞,锁住程序直到用户关闭该对话框,期间用户不可以切换同程序下的其它窗口直到Dialog关闭。

在举一个父类点击事件弹层QDialog子窗体的例子

父类实例化子类 直接用.show()方法闪退, 所以要实例化为父类的全局变量 or 执行exec_() 方法

#!/usr/bin/python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore
from PyQt4.QtGui import *
import sys
class W1(QWidget):
    def __init__(self, parent=None):
        super(W1, self).__init__(parent)
        self.btn = QPushButton('Click1')
        vb = QVBoxLayout()
        vb.addWidget(self.btn)
        self.setLayout(vb)
        self.btn.clicked.connect(self.fireupWindows2)
    def fireupWindows2(self):
        w2 = W2()  # w2= W2(self) 在父类基础self弹框
        w2.show()  # Dialog show()  直接闪退
        # 需要通过self实例化为全局变量,不加self的话,一运行就被回收,也就无法显示。
        self.w2 = W2()
        self.w2.show()
        # 或者 直接exec_()   Dialog 可执行exec_() 方法, Widget 没有exec_()方法
        w2 = W2()
        w2.exec_()  # app.exec_()--------------消息循环结束之后,进程自然也会结束
class W2(QDialog):
    def __init__(self, parent=None):
        super(W2, self).__init__(parent)
        self.btn = QPushButton('Click2')
        vb = QVBoxLayout()
        vb.addWidget(self.btn)
        self.setLayout(vb)
        self.btn.clicked.connect(self.fireupWindows3)
    def fireupWindows3(self):
        self.accept()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = W1()
    w.show()
    sys.exit(app.exec_())

转载自: https://www.cnblogs.com/dcb3688/p/4586373.html

QDialog的显示有两个函数show()和exec()。他们的区别在参考文档上的解释如下:show():显示一个非模式对话框。控制权即刻返回给调用函数。弹出窗口是否模式对话框,取决于modal属性的值。exec():显示一个模式对话框,并且锁住程序直到用户关闭该对话框为止。函数返回一个DialogCode结果。在对话框弹出期间,用户不可以切换同程序下的其它窗口,直到该对话框被关闭...
pyqt5 -模式和非模式对话框 mainwindow 和Q Dialog 版 show()非模式对话框,在调用弹出窗口之后,调用即刻返回 exec ()模式对话框,就是在弹出窗口的时候,整个程序就被锁定了 业务和ui分离版本
Pyqt中Q Dialog show和 exec 区别 Q Dialog 的显示有两个函数show()和 exec ()。他们的 区别 在参考文档上的解释如下: show():显示一个非模式对话框。控制权即刻返回给调用函数。弹出窗口是否模式对话框,取决于modal属性的值。 原文:Shows the dialog as a modeless dialog . Control returns im...
//构造函数中定义一个Q Dialog 类 this 指定父窗口为MainWindow类 Q Dialog dialog (this); //调用show函数让其显示 如果此时运行 发现一个小窗口一闪而过 //因为在一个函数中定义的变量,等这个函数执行完毕后,他就会自动释放, dialog .show(); 必须调用show 进入主事件循环并等待,直到调用exit(),然后返回设置为exit()的值(如果exit()通过quit()调用则为0)。 需要调用这个函数来启动事件处理。主事件循环从窗口系统接收事件并将这些事件分派给应用程序小部件。 通常,在调用 exec () 之前不能进行用户交互。 void QCoreApplication:: exit ( int returnCode = 0) 告诉应用程序退出loop并返回returnCode。...
```python import sys from PyQt5 .QtWidgets import QApplication, QMainWindow, Q Dialog , QPushButton class SubWindow(Q Dialog ): def __init__(self): super().__init__() self.setWindowTitle('Sub Window') self.resize(200, 100) class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Main Window') self.resize(400, 300) button = QPushButton('Open Sub Window', self) button.move(150, 150) button.clicked.connect(self.open_sub_window) def open_sub_window(self): sub_window = SubWindow() sub_window. exec _() if __name__ == '__main__': app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sys.exit(app. exec _()) 这段代码创建了一个主窗口和一个子窗口,当点击主窗口中的按钮时,会弹出子窗口。 ORB_SLAM2编译build_ros.sh时报错([rosbuild] Error from directory check: /opt/ros/kinetic/share) 真的很好啊: hxd 我也一直在这卡着,你还记得是怎么解决的吗 PyQt5遇到的坑:QThread:Destroyed while thread is still running的原因 wanghencsdn: 感谢,对刚学的我十分有用。 IDEA_Maven快速排查依赖包冲突 社区版本没这个好像,博主有遇到过吗
 
推荐文章