【问题标题】:PySide2 display same icon in file dialog as main windowPySide2 在文件对话框中显示与主窗口相同的图标
【发布时间】:2020-12-07 15:28:18
【问题描述】:

我有一个简单的 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)

【问题讨论】:

    标签: python pyside2 qfiledialog


    【解决方案1】:

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

    import sys
    
    from PySide2 import QtCore, QtGui, QtWidgets
    
    
    class Form(QtWidgets.QDialog):
        def __init__(self, parent=None):
            super(Form, self).__init__(parent)
            self.setWindowTitle("My Form")
            self.setWindowIcon(QtGui.QIcon("myicon.png"))
            layout = QtWidgets.QVBoxLayout(self)
            self.button = QtWidgets.QPushButton("Open dialog")
            self.button.clicked.connect(self.browse)
            layout.addWidget(self.button)
    
        def browse(self):
            QtCore.QTimer.singleShot(0, self.handle_timeout)
            filename, _ = QtWidgets.QFileDialog.getOpenFileName(
                None,
                "Load Data",
                ".",
                "*.txt",
                options=QtWidgets.QFileDialog.DontUseNativeDialog,
            )
    
        def handle_timeout(self):
            for w in QtWidgets.QApplication.topLevelWidgets():
                if isinstance(w, QtWidgets.QFileDialog):
                    w.setWindowIcon(QtGui.QIcon("myicon.png"))
    
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
    
        form = Form()
        form.show()
    
        sys.exit(app.exec_())
    

    【讨论】:

    • 由于某种原因,代码 sn-p 在 Ubuntu 20.04 上对我不起作用。 QFileDialog 中的图标仍然与主对话框窗口不同。如何仅使用 QFileDialog 类创建逻辑?
    • 是的,这行得通!但是为什么我不能使用 NativeDialog 窗口呢?
    • @Blind0ne 不知道,可能是bug
    • 是的。但是当使用 DontUseNativeDialog 标志时,handle_timeout 不是必需的。它会自动将主窗口图标分配给对话窗口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多