将QFileDialog作为窗口小部件添加到另一个QDialog

时间:2017-08-31 16:27:36

标签: python qt pyqt qfiledialog

我正在尝试创建一个包含两个子窗口小部件的对话框:左侧是QFileDialog实例,因此用户可以选择文件,右侧是一个单独的窗口小部件,用于显示预览所选文件属于某种类型。

问题是对话框打开了,我可以看到“预览”小部件就好了,但QFileDialog根本没有出现。

这个简短的例子说明了我的问题:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

app = QApplication([])

main_dialog = QDialog()
main_dialog.setWindowTitle('My Dialog')
layout = QHBoxLayout(main_dialog)

file_dialog = QFileDialog(main_dialog, Qt.Widget)
file_dialog.setOption(QFileDialog.DontUseNativeDialog)
layout.addWidget(file_dialog)

preview = QLabel('Preview', main_dialog)
layout.addWidget(preview)

main_dialog.show()

app.exec_()

我尝试过的一些事情:

  1. file_dialog.show()之前/之后添加main_dialog.show():这会显示QFileDialog,但会显示在其他窗口中;我希望文件对话框显示在main_dialog内,而不是单独的窗口;
  2. 不要将Qt.Widget传递给QFileDialog构造函数,不起作用;
  3. 不要将main_dialog作为父级传递给QFileDialog,再次无效;
  4. main_dialog更改为QWidget只是为了查看它是否发生了变化,但事实并非如此;
  5. 我搜索了文档但没有找到合适的解决方案。

    任何提示?此外,欢迎提供有关如何完成允许用户选择文件和在同一窗口中显示文件预览的任务的建议。

    上下文:这是为Qt3编写的旧应用程序的端口。 Qt3的QFileSystem对话框内置了这个“预览”功能;我正在尝试在Qt5中重现相同的功能。

    版本

    • Python 2.7
    • PyQt 5.5.1

    我也尝试过使用Python 3.6(来自conda-forge)但获得了同样的行为。

1 个答案:

答案 0 :(得分:1)

您需要关闭文件对话框windowFlags中的Qt.Dialog标记...

file_dialog.setWindowFlags(file_dialog.windowFlags() & ~Qt.Dialog)

否则QFileDialog将始终创建为顶级窗口。无论如何都适合我。