Python PySide2在文件对话框中显示与主窗口相同的图标

Python PySide2在文件对话框中显示与主窗口相同的图标,python,pyside2,qfiledialog,Python,Pyside2,Qfiledialog,我有一个简单的pyside2应用程序,看起来有点像这样: import sys from PySide2.QtWidgets import QApplication, QDialog, QPushButton, QFileDialog, QVBoxLayout from PySide2 import QtGui class Form(QDialog): def __init__(self, parent=None): super(Form, self).__init_

我有一个简单的pyside2应用程序,看起来有点像这样:

import sys
from PySide2.QtWidgets import QApplication, QDialog, QPushButton, QFileDialog, QVBoxLayout
from PySide2 import QtGui

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.setWindowTitle("My Form")
        self.setWindowIcon(QtGui.QIcon("myicon.png"))
        layout = QVBoxLayout()
        self.button = QPushButton("Open dialog")
        self.button.clicked.connect(self.browse)
        layout.addWidget(self.button)
        self.setLayout(layout)

    def browse(self):
        qfd = QFileDialog()
        qfd.setWindowIcon(QtGui.QIcon("myicon.png"))
        filename, _ = qfd.getOpenFileName(None, "Load Data", ".", "*.txt")



if __name__ == '__main__':
    # Create the Qt Application
    app = QApplication(sys.argv)
    # Create and show the form
    form = Form()
    form.show()
    # Run the main Qt loop
    sys.exit(app.exec_())

我想为
QFileDialog
设置与主窗口图标相同的图标,但由于某些原因,它不起作用。有没有办法把它设置成我在上面尝试的样子?提前感谢您的想法、建议和帮助!(我使用的是Ubuntu 20.04)

getOpenFileName方法是一种静态方法,它会创建一个内部QFileDialog,而不是“qfd”,因此不会应用图标。一种可能的选择是不使用getOpenFileName,而是仅使用QFileDialog类创建逻辑,另一种解决方案是使用顶级特性访问在getOpenFileName内创建的QFileDialog对象:

导入系统 从PySide2导入QtCore、QtGui、QtWidgets 类形式(qtwidts.QDialog): def uuu init uuu(self,parent=None): 超级(形式,自我)。\uuuu初始\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu self.setWindowTitle(“我的表单”) self.setWindowIcon(QtGui.QIcon(“myicon.png”)) layout=qtwidts.QVBoxLayout(self) self.button=qtwidts.QPushButton(“打开对话框”) self.button.clicked.connect(self.browse) layout.addWidget(self.button) def浏览(自我): QtCore.QTimer.singleShot(0,self.handle\u超时) 文件名,u=QtWidgets.QFileDialog.getOpenFileName( 没有一个 “加载数据”, ".", “*.txt”, options=qtwidts.QFileDialog.DontUseNativeDialog, ) def句柄_超时(自身): 对于QtWidgets.QApplication.topLevelWidgets()中的w: 如果isinstance(w,qtwidts.QFileDialog): w、 setWindowIcon(QtGui.QIcon(“myicon.png”)) 如果名称=“\uuuuu main\uuuuuuuu”: app=qtwidts.QApplication(sys.argv) form=form() 表格.show() sys.exit(app.exec_())
getOpenFileName方法是一种静态方法,用于创建除“qfd”之外的内部QFileDialog,因此不应用图标。一种可能的选择是不使用getOpenFileName,而是仅使用QFileDialog类创建逻辑,另一种解决方案是使用顶级特性访问在getOpenFileName内创建的QFileDialog对象:

导入系统 从PySide2导入QtCore、QtGui、QtWidgets 类形式(qtwidts.QDialog): def uuu init uuu(self,parent=None): 超级(形式,自我)。\uuuu初始\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu self.setWindowTitle(“我的表单”) self.setWindowIcon(QtGui.QIcon(“myicon.png”)) layout=qtwidts.QVBoxLayout(self) self.button=qtwidts.QPushButton(“打开对话框”) self.button.clicked.connect(self.browse) layout.addWidget(self.button) def浏览(自我): QtCore.QTimer.singleShot(0,self.handle\u超时) 文件名,u=QtWidgets.QFileDialog.getOpenFileName( 没有一个 “加载数据”, ".", “*.txt”, options=qtwidts.QFileDialog.DontUseNativeDialog, ) def句柄_超时(自身): 对于QtWidgets.QApplication.topLevelWidgets()中的w: 如果isinstance(w,qtwidts.QFileDialog): w、 setWindowIcon(QtGui.QIcon(“myicon.png”)) 如果名称=“\uuuuu main\uuuuuuuu”: app=qtwidts.QApplication(sys.argv) form=form() 表格.show() sys.exit(app.exec_())
由于某些原因,我在Ubuntu 20.04上无法使用该代码段。QFileDialog中的图标仍然与主对话框窗口不同。如何仅使用QFileDialog类创建逻辑?@Blind0ne请尝试使用我的更新代码。是的,这很有效!但是为什么我不能使用NativeDialog窗口呢?@Blind0ne我不知道,可能是个错误。但是,当使用DontUseNativeDialog标志时,不需要句柄超时。它会自动将主窗口图标分配给对话框窗口。由于某些原因,该代码段在Ubuntu 20.04上不适用于我。QFileDialog中的图标仍然与主对话框窗口不同。如何仅使用QFileDialog类创建逻辑?@Blind0ne请尝试使用我的更新代码。是的,这很有效!但是为什么我不能使用NativeDialog窗口呢?@Blind0ne我不知道,可能是个错误。但是,当使用DontUseNativeDialog标志时,不需要句柄超时。它会自动将主窗口图标指定给对话框窗口。