059.PyQt5_QDialog_对话窗口基类

QDialog 对话窗口基类

  • 描述
    • 是对话窗口的基类
    • 对话窗口是顶级窗口,主要用于短期任务和与用户的简短通信。
    • 是一个空白的窗口
  • QDialog可能是模态的或非模态对话框
    • 模态对话框
      • 应用程序级别(默认值)
        • 当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口
        • 打开方式:obj.exec()
        • 应用场景:
      • 窗口级别
        • 该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互
        • 打开方式:obj.open()
        • 应用场景:文件选择、是否同意
    • 非模态对话框
      • 不会阻塞与对话框关联的窗口以及与其他窗口进行交互
      • 打开方式:obj.show()
      • 结合 setModal(True) 也可以实现模态对话框
      • 结合 setWindowModality(Qt.WindowModal) 也可以实现模态对话框
        • Qt.WindowModal 设置为窗口级别
        • Qt.ApplicationModal 设置为应用程序级别
      • 应用场景:查找替换
  • QDialogs可以提供返回值,它们可以有默认按钮
  • 继承自:QWidget
  • 功能作用
    • 构造函数

      QDialog(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags())
      
    • 弹出

      exec()                                  # 以应用程序级别模态对话框模式弹出
      open()                                  # 以窗口级别模态对话框模式弹出
      show()                                  # 以非模态对话框模式弹出
      
    • 模态设置

      setModal(bool)                          # 设置对话框是否为窗口级别模态对话框
      
      setWindowModality(Qt.WindowModal)       # 将非模态对话框设置为指定级别的模态对话框
          # 参数:Qt.WindowModal
                  Qt.WindowModal              # 设置为窗口级别
                  Qt.ApplicationModal         # 设置为应用程序级别
          
      modal() -> bool                         # 获取对话框模态
      
      # 一般在show()方法弹出为非模态对话框模式时才使用
      
    • 是否显示尺寸调整控件

      • 右下角多出一个小控件
      setSizeGripEnabled(bool)                # 设置是否显示尺寸调整控件
      
      isSizeGripEnabled() -> bool             # 获取是否设置显示尺寸调整控件
      
    • 常用操作槽函数

      • 通过返回值识别用户的操作
      accept()                                # 确认,返回1
      reject()                                # 取消,返回0
      done(int r)                             # 完成,返回自定义的r
      
      # 在accept()和reject()槽函数中,最后都调用了done()槽函数
      # 在按钮上通过信号连接对应的槽函数,执行对话框的槽函数会触发对应的信号
      
    • 设置和获取数值

      setResult(int)                          # 设置对话框返回值
      
      result() -> int                         # 获取对话框设置的返回值
      
  • 注意:这里的模态设置、添加控件等操作都需要在弹出之前设置好(也就是要在窗口显示之前先设置好,否则窗口已经展示出来了,其他控件或者设置都未调用就无法显示了)
  • 可用信号
    accepted()                                  # 执行accept槽函数时发射该信号
    rejected()                                  # 执行reject槽函数时发射该信号
    finished(int result)                        # 执行done槽函数时发射该信号,并传递返回值
    
    # 由于在accept()和reject()槽函数中,最后都调用了done()槽函数,所以执行三个槽函数都会发射finished()信号
    # 个人测试时发现用exec()弹出应用程序级别模态对话框,执行槽函数时并不会发射信号
    

  • 示例代码
  • 示例1:QDialog-功能作用
    from PyQt5.Qt import *
    import sys
    class MyDialog(QDialog):
        def done(self, a0: int) -> None:
            super(MyDialog, self).done(a0)
            print('执行了done函数')
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QDialog-功能作用')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            # dialog = QDialog(self)
            dialog = MyDialog(self)
            dialog.setWindowTitle('QDialog选择窗口')
    
            # ****************弹出功能****************** 开始
            # dialog.exec()           # 以应用程序级别模态对话框弹出
            # dialog.open()           # 以窗口级别模态对话框弹出
            # dialog.show()           # 以非模态对话框弹出
            # ****************弹出功能****************** 结束
            pass
            # ****************非模态转换为模态对话框****************** 开始
            # dialog.setModal(True)
            # dialog.setWindowModality(Qt.WindowModal)
            # dialog.setWindowModality(Qt.ApplicationModal)
            # dialog.show()
            # ****************非模态转换为模态对话框****************** 结束
            pass
            # ****************设置右下角显示调整大小控件****************** 开始
            # dialog.setSizeGripEnabled(True)
            
            # ****************设置右下角显示调整大小控件****************** 结束
            pass
            # ****************常用操作槽函数****************** 开始
            btn1 = QPushButton(dialog)
            btn1.setText("确定")
            btn1.move(50, 50)
            btn1.clicked.connect(lambda :dialog.accept())
    
            btn2 = QPushButton(dialog)
            btn2.setText("取消")
            btn2.move(50, 100)
            btn2.clicked.connect(lambda: dialog.reject())
    
            btn2 = QPushButton(dialog)
            btn2.setText("自定义")
            btn2.move(50, 150)
            btn2.clicked.connect(lambda val: dialog.done(8))
    
            # result = dialog.open()
            # result = dialog.exec()
            # print(result)
            # ****************常用操作槽函数****************** 结束
            pass
            # ****************设置返回值****************** 开始
            # btn4 = QPushButton(dialog)
            # btn4.setText("设置返回值")
            # btn4.move(50,200)
            # btn4.clicked.connect(lambda :dialog.setResult(888))
            #
            # btn5 = QPushButton(dialog)
            # btn5.setText("打印返回值")
            # btn5.move(50, 250)
            # btn5.clicked.connect(lambda: print(dialog.result()))
            #
            # result = dialog.exec()
            # print(result)
            # ****************设置返回值****************** 结束
            pass
    
            # ****************可用信号****************** 开始
            dialog.open()
            # dialog.show()
            # dialog.exec()           # 应用程序级别模态对话框不发射信号
            dialog.accepted.connect(lambda :print("点击了“确定”按钮"))
            dialog.rejected.connect(lambda :print("点击了“取消”按钮"))
            dialog.finished.connect(lambda val:print("点击了“完成”按钮", val))
            # ****************可用信号****************** 结束
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyQt中,可以通过将QDialog作为QWidget的子类来将QDialog添加为QWidget的部件。可以使用QDialog的构造函数来创建一个对话框实例,并将其作为QWidget的子部件添加到父部件中。\[1\] 例如,可以使用以下代码将QDialog添加为QWidget的部件: ```python from PyQt5.QtWidgets import QApplication, QWidget, QDialog import sys if __name__ == '__main__': app = QApplication(sys.argv) # 创建一个QWidget作为父部件 parent_widget = QWidget() # 创建一个QDialog实例 dialog = QDialog(parent_widget) # 将QDialog添加为QWidget的子部件 parent_widget.layout().addWidget(dialog) parent_widget.show() sys.exit(app.exec_()) ``` 在上述代码中,我们首先创建了一个QWidget作为父部件,然后创建了一个QDialog实例,并将其作为QWidget的子部件添加到父部件的布局中。最后,我们显示了父部件并启动了应用程序的事件循环。这样,QDialog就被成功添加到了QWidget中。\[2\]\[3\] #### 引用[.reference_title] - *1* [059.PyQt5_QDialog_对话窗口基类](https://blog.csdn.net/weixin_50296259/article/details/130632155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [7. PyQt5对话框QDialog](https://blog.csdn.net/hubing_hust/article/details/127840232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值