能够在 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 中一次打开多个对话框的单窗口模式?的主要内容,如果未能解决你的问题,请参考以下文章