将 QFileDialog 作为小部件添加到另一个 QDialog 中
Adding QFileDialog as a widget inside another QDialog
我正在尝试创建一个包含两个子小部件的对话框:左侧是一个 QFileDialog
实例,以便用户可以 select 文件,右侧是一个单独的小部件,它将用于显示 selected 文件的预览(如果它是某种类型)。
问题是对话框打开,我可以看到 "preview" 小部件,但 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_()
我尝试过的一些事情:
- 添加
file_dialog.show()
before/aftermain_dialog.show()
:这显示了QFileDialog
,但在不同的window;我希望文件对话框显示在 main_dialog
中,而不是作为单独的 window;
- 不要将
Qt.Widget
传递给 QFileDialog
构造函数,无效;
- 不要将
main_dialog
作为父级传递给 QFileDialog
,同样无效;
- 将
main_dialog
更改为 QWidget
只是为了看看它是否改变了什么,它没有;
我搜索了文档,但没有找到合适的解决方案。
有什么提示吗?此外,欢迎就如何完成允许用户 select 文件并在同一 window 中显示文件预览的任务提出建议。
Context:这是为 Qt3 编写的旧应用程序的端口。 Qt3 的 QFileSystem
对话框内置了这个 "preview" 功能;我正在尝试在 Qt5 中重现相同的功能。
版本
- Python 2.7
- PyQt 5.5.1
我也尝试过 Python 3.6(来自 conda-forge),但获得了相同的行为。
您需要关闭文件对话框 windowFlags
...
中的 Qt.Dialog
标志
file_dialog.setWindowFlags(file_dialog.windowFlags() & ~Qt.Dialog)
否则 QFileDialog
将始终创建为顶级 window。反正对我有用。
我正在尝试创建一个包含两个子小部件的对话框:左侧是一个 QFileDialog
实例,以便用户可以 select 文件,右侧是一个单独的小部件,它将用于显示 selected 文件的预览(如果它是某种类型)。
问题是对话框打开,我可以看到 "preview" 小部件,但 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_()
我尝试过的一些事情:
- 添加
file_dialog.show()
before/aftermain_dialog.show()
:这显示了QFileDialog
,但在不同的window;我希望文件对话框显示在main_dialog
中,而不是作为单独的 window; - 不要将
Qt.Widget
传递给QFileDialog
构造函数,无效; - 不要将
main_dialog
作为父级传递给QFileDialog
,同样无效; - 将
main_dialog
更改为QWidget
只是为了看看它是否改变了什么,它没有;
我搜索了文档,但没有找到合适的解决方案。
有什么提示吗?此外,欢迎就如何完成允许用户 select 文件并在同一 window 中显示文件预览的任务提出建议。
Context:这是为 Qt3 编写的旧应用程序的端口。 Qt3 的 QFileSystem
对话框内置了这个 "preview" 功能;我正在尝试在 Qt5 中重现相同的功能。
版本
- Python 2.7
- PyQt 5.5.1
我也尝试过 Python 3.6(来自 conda-forge),但获得了相同的行为。
您需要关闭文件对话框 windowFlags
...
Qt.Dialog
标志
file_dialog.setWindowFlags(file_dialog.windowFlags() & ~Qt.Dialog)
否则 QFileDialog
将始终创建为顶级 window。反正对我有用。