分享

PyQt5中弹出框QDialog的show()和exec()的区别

 星光闪亮图书馆 2019-11-09

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

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

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

模式与非模式

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

 

简单的理解:

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

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

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

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

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. from PyQt4 import QtCore
  4. from PyQt4.QtGui import *
  5. import sys
  6. class W1(QWidget):
  7. def __init__(self, parent=None):
  8. super(W1, self).__init__(parent)
  9. self.btn = QPushButton('Click1')
  10. vb = QVBoxLayout()
  11. vb.addWidget(self.btn)
  12. self.setLayout(vb)
  13. self.btn.clicked.connect(self.fireupWindows2)
  14. def fireupWindows2(self):
  15. w2 = W2() # w2= W2(self) 在父类基础self弹框
  16. w2.show() # Dialog show() 直接闪退
  17. # 需要通过self实例化为全局变量,不加self的话,一运行就被回收,也就无法显示。
  18. self.w2 = W2()
  19. self.w2.show()
  20. # 或者 直接exec_() Dialog 可执行exec_() 方法, Widget 没有exec_()方法
  21. w2 = W2()
  22. w2.exec_() # app.exec_()--------------消息循环结束之后,进程自然也会结束
  23. class W2(QDialog):
  24. def __init__(self, parent=None):
  25. super(W2, self).__init__(parent)
  26. self.btn = QPushButton('Click2')
  27. vb = QVBoxLayout()
  28. vb.addWidget(self.btn)
  29. self.setLayout(vb)
  30. self.btn.clicked.connect(self.fireupWindows3)
  31. def fireupWindows3(self):
  32. self.accept()
  33. if __name__ == "__main__":
  34. app = QApplication(sys.argv)
  35. w = W1()
  36. w.show()
  37. sys.exit(app.exec_())

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多