我是 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/