使用Pyside6时缺少主窗口图标



我可能缺少一些明显的东西,但下面的代码似乎没有在窗口标题栏中显示app_icon。app_icon.png是一个24x24px的文件,与main.py和ui_mainwindow.py位于同一文件夹中。Qt文档似乎建议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组合在一起的,并且使用pyside6uic将.ui转换为.py。你知道我哪里错了吗?

编辑:丢失图标的截图,在评论中建议的帖子更改

我的猜测是,由于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)

有关详细信息,请参阅Qt资源系统。

最新更新