我可能缺少一些明显的东西,但下面的代码似乎没有在窗口标题栏中显示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资源系统。