0

我正在向 listwidget 添加一个项目,但奇怪的是 if 的第一个块添加了图标,而第二个没有我还检查了该图标是否在指定位置

def addToRenderQueue(self):
    ext=os.path.splitext(str(self.scnFilePath.text()))[-1]
    if self.mayachkBox.isChecked() and (ext=='.ma'):
       img_mIcon=QtGui.QPixmap("images\icon_maya-small.png")
       ntask=self.makeBatTask()
       self.itemTask=QtGui.QListWidgetItem(ntask)
       self.itemTask.setIcon(QtGui.QIcon(img_mIcon))
       self.listWidget.insertItem(0,self.itemTask)
    elif self.nukechkBox.isChecked() and (ext=='.nk'):
         img_nIcon=QtGui.QPixmap("images\nuke.png")
         ntask=self.makeBatTask()
         self.itemTask=QtGui.QListWidgetItem(ntask)
         self.itemTask.setIcon(QtGui.QIcon(img_nIcon))
         self.listWidget.insertItem(0,self.itemTask)

对于 elif 块 ntask 包含这种字符串: Nuke6.1.exe -t E:\Dropbox\Research_Study\myprojects\Batch\nukeRender.py Write2 E:/Dropbox/Research_Study/myprojects/Batch/test_project_nuke/sign_board.nk 1 16 1 次测试

4

1 回答 1

1

在 Python 字符串中,\是用于特殊字符(如换行符(\n)、制表符(\t)等)的转义字符。在您的第二个路径中"images\nuke.png",您有\n,因此它被解析为"images<new-line>uke.png"并且 PyQt 找不到该文件。

你有几个选择:

  • 你可以逃避它\本身:"images\\nuke.png"
  • 您可以使用禁用转义的原始字符串:r"images\nuke.png"
  • 您可以使用/文件夹分隔符:"images/nuke.png"

我更喜欢第三种选择。Windows 同时接受\/作为文件夹分隔符。除了在 Qt 中, using/是首选方式,因为它会自动转换为适当的系统分隔符:

Qt 使用“/”作为通用目录分隔符,就像在 URL 中使用“/”作为路径分隔符一样。如果您总是使用“/”作为目录分隔符,Qt 将转换您的路径以符合底层操作系统。

于 2012-12-14T19:02:07.877 回答