PyQt 把子窗口转换为模态窗口

问题描述:

模态窗口就是在该窗口关闭之前,其父窗口不可能成为活动窗口的那种窗口。

解决方法:

方法1:

子窗口继承QDialog类,然后使用 exec() 显示

  • 但是Qt文档中并不提倡这种方法,而是建议用open()代替exec()。因为open()是异步的,可以防止在打开dialog的时候删除dialog的父级。

为什么要避免使用exec()

方法2:


widget.setWindowModality(Qt.ApplicationModal)
widget.show()

如果仅仅希望锁定其他的窗口而非整个应用程序


widget.setWindowFlags(widget.windowFlags() | Qt.Window)
widget.setParent(otherWindow)
widget.setWindowModality(Qt.WindowModal)
widget.show()

其他问题

窗口弹出后闪退。
可能是窗体被python自动垃圾回收了,如果在类中实例化模态窗口,用属性来代替局部变量存储模态窗口的实例。

 # 这样会被自动回收
 widget = QDialog()
 widget.show()

 # 可以使用属性存储
 self.widget = QDialog()
 self.widget.show()

 # 或者对实例指定一个父控件
 widget = QDialog(parent)
 widget.show() 

话题链接

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt6中,可以使用`setWindowModality`方法来设置子窗口性。窗口是指在打开的子窗口未关闭之前,无法与其他窗口进行交互。 以下是设置子窗口的步骤: 1. 创建子窗口对象。 2. 调用子窗口对象的`setWindowModality`方法,将其性设置为所需的式,例如`Qt.WindowModal`或`Qt.ApplicationModal`。 3. 显示子窗口。 下面是一个示例代码,演示了如何设置子窗口窗口: ```python from PyQt6.QtWidgets import QApplication, QMainWindow, QDialog, QPushButton, QLabel, QVBoxLayout from PyQt6.QtCore import Qt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Main Window") self.button = QPushButton("Open Modal Dialog") self.button.clicked.connect(self.openModalDialog) layout = QVBoxLayout() layout.addWidget(self.button) central_widget = QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) def openModalDialog(self): dialog = QDialog(self) dialog.setWindowTitle("Modal Dialog") dialog.setWindowModality(Qt.WindowModal) # 设置为窗口 label = QLabel("This is a modal dialog.") dialog_layout = QVBoxLayout() dialog_layout.addWidget(label) dialog.setLayout(dialog_layout) dialog.exec() app = QApplication([]) window = MainWindow() window.show() app.exec() ``` 在上述示例中,点击"Open Modal Dialog"按钮会打开一个对话框,该对话框会阻塞主窗口的交互,直到对话框关闭。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值