python - PySide:为什么在另一个 QmainWIndow(Main) 中触发 QAction 时 QMainWindow flask 并消失

标签 python qt pyside qtgui qmainwindow

我是 PySide 的新手。我遇到一个问题:当我从另一个 QmainWIndow(主 UI)触发 QAction 时,一个新的 QMainWindow 闪烁并消失。这里我发布示例代码来说明上述内容:

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
       super(MainWindow, self).__init__(parent)
       ...
       self.execTaskAct = QtGui.QAction("execute", self,  triggered=self.executeTask)
       ...

    def  executeTask(self):
      task = TaskWindow()

class  TaskWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
       super(TaskWindow, self).__init__(parent)
       ...
      self.show()


if __name__ == '__main__':

    import sys

    app = QtGui.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit(app.exec_())

最佳答案

在创建新的 QMainWindow 后,您不会保留对它的引用,并且由于该新窗口(TaskWindow)没有父窗口,因此一旦 executeTask 方法运行。

您只需保留对新窗口的引用,将 executeTask 更改为:

def  executeTask(self):
    self.task = TaskWindow()

请注意,如果该操作运行两次,这将覆盖第一个 TaskWindow 并使其消失,或者您的应用程序崩溃。您可以计算出在这种情况下会发生什么,或者存储多个 TaskWindow 的引用的更好方法(例如在列表中)。

请注意,如果 QWidget 没有父级,则只需存储 QWidget 的引用(在当前情况下就是如此)。如果 QWidget 有父级,Qt 会在内部存储一个引用。

关于python - PySide:为什么在另一个 QmainWIndow(Main) 中触发 QAction 时 QMainWindow flask 并消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21104879/

相关文章:

qt - QScrollArea 的元素不会重绘

python - PySide QPropertyAnimation 未启动

python - 在python中递归定义函数

Python:替换字典中的所有值

python - Python如何执行[list] * num?什么是时间复杂度和内存复杂度?

wpf - XAML 和 QML 等声明式 UI 语言在现实世界中有何好处?

python - 测试工具 ConcurrentStreamTestSuite 的一个简单的工作示例

c++ - QT 图形 View 在场景中查找项目

python - Pyside 与 python 3.6.4 不兼容吗?

python - 当直接从文件而不是 QImage 制作时,PyQt 中的 QPixmap 无法正确清理