能够在 PyQt5 中一次打开多个对话框的单窗口模式?

Posted

技术标签:

【中文标题】能够在 PyQt5 中一次打开多个对话框的单窗口模式?【英文标题】:Single window mode with the ability to open multiple dialogs at once in PyQt5? 【发布时间】:2020-09-22 20:12:12 【问题描述】:

当我打开一个新对话框时,我在 PyQt5/PySide2 中使用以下代码来创建单模式窗口应用程序:

dialog.setWindowModality(QtCore.Qt.ApplicationModal)
dialog.setWindowFlags(QtCore.Qt.Tool)

但是我需要另一种模式,但我没有通过阅读文档来解决它,假设我们有一个 QMainWindow 并且我们在主窗口上有 4 个按钮,我想在单击时打开相应的对话框按钮,但想法是这样的:

    通过使用上面的代码,父窗口(主)将被阻止,因此无法单击其他按钮打开对话框。

    阻止应用程序打开已经打开的对话框。

【问题讨论】:

你的问题有点晦涩,我看看能不能搞清楚。您想打开对话窗口,避免多次打开这些窗口,同时继续允许与主窗口进行交互,对吗?为了清楚起见,这些对话的目的是什么?你确定你不需要 QDockWidget 代替吗? 你试过“.setEnabled(False)”来禁用主窗口和按钮吗?并在关闭对话框时,将它们重新启用以供选择。 【参考方案1】:

好的,在主窗口中,您可以创建打开自己窗口的函数,例如:

主窗口文件:

def open_add_user_window(self):
    # import the class of window dialog that you create, example:
    from new_user_dialog import NewUserDialog # the class you create
    # Create a variable to store the object of the NewUserDialog class
    # in this case self means the instances of the main window
    window = NewUserDialog(self)  
    # then call the method show() of the object window
    window.show()

新建用户窗口文件(子窗口):

# in the constructor:
# parent is the parameter that stored the main window instance 
def __init__(self, parent=None):
    # with super call the constructor of the QDialog class an passed like argument the 
    #parent
    super().__init__(parent)
    # This is important if you don't put this code the child window will appear like 
    #sticked on the main window.
    self.setWindowFlag(Qt.Window) 

【讨论】:

以上是关于能够在 PyQt5 中一次打开多个对话框的单窗口模式?的主要内容,如果未能解决你的问题,请参考以下文章

在 Chrome 中一次打开多个链接作为新标签页

无法在 PyQt5 中打开多个窗口

在 PyQt5 中打开多个窗口时遇到问题

如何在chrome中一次打开多个标签? [复制]

如何使用 pyqt5 和 qt 设计器从主对话框窗口打开第二个窗口

pyqt5 继承python类可以传递信号函数吗