使用 Pyside6 缺少主窗口图标
Posted
技术标签:
【中文标题】使用 Pyside6 缺少主窗口图标【英文标题】:Main Window icon missing using Pyside6 【发布时间】:2022-01-10 16:14:58 【问题描述】:我可能遗漏了一些明显的东西,但以下代码似乎没有在窗口标题栏中显示 app_icon。 app_icon.png 是一个 24x24px 的文件,与 main.py 和 ui_mainwindow.py 位于同一文件夹中。 Qt docs 似乎暗示 PySide6.QtGui.QIcon(fileName) 是一种有效的方法,但也许我误解了它。除了这个问题,应用程序的其余部分都可以正常工作。
from PySide6.QtGui import QIcon, QScreen
from PySide6.QtWidgets import QApplication, QFileDialog, QMainWindow
from ui_mainwindow import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Change a few things
screenSize = QScreen.availableGeometry(QApplication.primaryScreen())
winXpos = ((screenSize.width() - self.width())/2)
winYpos = ((screenSize.height() - self.height())/2)
self.move(winXpos, winYpos)
self.setWindowTitle('App - Main Window')
self.setWindowIcon(QIcon('app_icon.png'))
...rest of the code...
改成下面这样,会报错
self.setWindowIcon(QIcon.addFile('app_icon.png'))
TypeError: descriptor 'addFile' for 'PySide6.QtGui.QIcon' objects doesn't apply to a 'str' object
这是在 linux 上,使用 Python3.8.10 和 PySide6。该表单与 Qt Creator 放在一起,并使用 pyside6-uic 将 .ui 转换为 .py。有什么想法我哪里出错了吗?
编辑: screenshot of missing icon, post changes suggested in the comments
【问题讨论】:
addFile
不是静态函数,它也返回None
,所以需要一个QIcon实例(icon = QIcon()
),然后使用icon.addFile('app_icon.png')
,最后使用setWindowIcon(icon)
,但这可能不是这里的问题。您确定该图标与您运行脚本的路径相同吗?尝试使用简单的print(QPixmap('app_icon.png').isNull())
。
【参考方案1】:
我的猜测是因为addFile
不是静态函数,直接从QIcon
类调用它是行不通的。相反,我认为您需要实例化一个QIcon
对象并将addFile
应用于它:
my_icon = QIcon()
my_icon.addFile('app_icon.png')
self.setWindowIcon(my_icon)
作为建议,请测试该文件是否存在 (os.path.isfile
) 以及在 Linux 上您是否有读取权限。或者,尝试从文件路径创建QPixmap
并测试像素图是否为空(Python 中为None
)
(正如@musicamante 建议的那样,它可能由于某种原因找不到您的文件)。
另外,试试
from PySide6.QtGui import QIcon, QPixmap
my_pixmap = QPixmap(":/app_icon.png")
my_icon = QIcon(my_pixmap)
self.setWindowIcon(my_icon)
详情请参阅the Qt Resource System。
【讨论】:
那行不通,因为addFile()
返回None
。必须创建一个实例,然后在该实例上调用addFile()
,最后使用setWindowIcon()
。但这不应该与文件名构造函数有太大变化,所以,这不是这里的问题。
@musicamante 我认为我们俩都在做同样的事情,只是时间略有不同(比如船只在夜间穿越)。
它们都在同一个文件夹中,os.path.isfile 为每个文件返回 True。上面的方法有点作用——图标现在在面板/任务栏上可见,但在应用程序窗口本身不可见。
@CodgerCoder 你的图标有qrc
文件吗?如果是这样,请确保app_icon.png
与qrc
文件位于同一目录中,或其子目录之一中。二、试试my_icon.addFile(":/app_icon.png")
。
@A.Hendry setIconSize()
为工具栏默认图标大小,与窗口图标无关(大小由系统决定)以上是关于使用 Pyside6 缺少主窗口图标的主要内容,如果未能解决你的问题,请参考以下文章