添加QIcon时出现奇怪的行为

时间:2012-12-14 11:50:09

标签: pyqt4 qpixmap qicon

我正在向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)

for elif block 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测试

1 个答案:

答案 0 :(得分:1)

在Python字符串中,\是转义字符,用于特殊字符,如换行符(\n),制表符(\t)等。在第二个路径中,{ {1}},您有"images\nuke.png"所以它被解析为\n而PyQt无法找到该文件。

您有几个选择:

  • 您可以逃避"images<new-line>uke.png"本身:\
  • 您可以使用原始字符串来禁用转义:"images\\nuke.png"
  • 您可以将r"images\nuke.png"用于文件夹分隔符:/

我更喜欢第三种选择。对于文件夹分隔符,Windows同时接受"images/nuke.png"\。除了在Qt中,使用/是首选方法,因为它是automatically translated到适当的系统分隔符:

  

Qt使用“/”作为通用目录分隔符   “/”用作URL中的路径分隔符。如果你总是使用“/”作为   目录分隔符,Qt将转换您的路径以符合   基础操作系统。