【问题标题】:PyQt: QFileDialog close directly after openingPyQt:QFileDialog打开后直接关闭
【发布时间】:2014-04-03 21:03:36
【问题描述】:

我正在使用 QFileDialoggetOpenFileNamegetSaveFileName)但有一个奇怪的行为:

  • 如果我直接从 (ipython) shell 调用它们,我没有问题
  • 如果我从小部件调用它们:
    • 在 mac 10.6 中,它会在打开对话框后立即关闭对话框(对话框“弹出”然后关闭)
    • 在 mac 10.6 中,如果我使用 QtGui.QFileDialog.DontUseNativeDialog,它可以正常工作
    • 在 win xp 中(在虚拟机中)它可以在没有 DontUseNativeDialog 选项的情况下工作
    • 在 win xp 中,使用 DontUseNativeDialog 选项,对话框在打开后立即关闭
    • 在 win 7 中,两者似乎都有效(其他人做了测试,所以我自己没有看到)

我的问题:

  • 一般来说,对话框在打开后立即关闭的原因是什么?
  • 为什么它会在某些情况下而不是全部情况下这样做?
  • 我应该怎么做才能让它跨平台工作?

【问题讨论】:

  • 您能否发布一个简单的工作示例来演示该行为,这样我们就可以排除常见的 Qt 错误(例如,因为您没有持有对对象的引用,所以对象被垃圾收集,或类似的)
  • 试图做一个极简主义的例子,我发现它来自与 ipython 及其--pylab start 选项的奇怪冲突。可以通过直接执行代码 (python xxxx.py) 或不使用 pylab 选项来避免该问题。在这两种情况下,qapplication 都应该手动启动。
  • 我不确定是否应该删除问题或对其进行编辑并在上面给出答案。解释为什么存在冲突可能仍然很有趣。
  • 我不知道为什么会发生冲突,但我猜 pylab 对 Qt 的使用是把事情搞砸了。无论如何都值得留下这个问题,以防其他人有问题!

标签: qt pyqt cross-platform ipython qfiledialog


【解决方案1】:

我发现这个问题来自与 ipython 及其--pylab 启动选项的奇怪冲突。因此可以通过以下任一方式避免

  • 直接使用python xxxx.py执行代码
  • 或不使用 pylab 选项

在这两种情况下,qapplication 都应该手动启动:

qapp = QtGui.QApplication([])
my_app = MyQtAppWindow(...)
my_app.exec_()

但是,我仍然不知道为什么会发生冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 2013-05-23
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多