我正在尝试创建一个包含两个子窗口小部件的对话框:左侧是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_()
我尝试过的一些事情:
file_dialog.show()
之前/之后添加main_dialog.show()
:这会显示QFileDialog
,但会显示在其他窗口中;我希望文件对话框显示在main_dialog
内,而不是单独的窗口; Qt.Widget
传递给QFileDialog
构造函数,不起作用; main_dialog
作为父级传递给QFileDialog
,再次无效; main_dialog
更改为QWidget
只是为了查看它是否发生了变化,但事实并非如此; 我搜索了文档但没有找到合适的解决方案。
任何提示?此外,欢迎提供有关如何完成允许用户选择文件和在同一窗口中显示文件预览的任务的建议。
上下文:这是为Qt3编写的旧应用程序的端口。 Qt3的QFileSystem
对话框内置了这个“预览”功能;我正在尝试在Qt5中重现相同的功能。
版本
我也尝试过使用Python 3.6(来自conda-forge)但获得了同样的行为。
答案 0 :(得分:1)
您需要关闭文件对话框windowFlags
中的Qt.Dialog
标记...
file_dialog.setWindowFlags(file_dialog.windowFlags() & ~Qt.Dialog)
否则QFileDialog
将始终创建为顶级窗口。无论如何都适合我。