странное поведение при добавлении 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)

для блока 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 тест


person Community    schedule 14.12.2012    source источник


Ответы (1)


В строках Python \ — это escape-символ, который используется для специальных символов, таких как новая строка (\n), табуляция (\t) и т. д. Во втором пути, "images\nuke.png", у вас есть \n, поэтому он анализируется как "images<new-line>uke.png", и PyQt не может найти этот файл.

У вас есть несколько вариантов:

  • Вы можете избежать самого \: "images\\nuke.png"
  • Вы можете использовать необработанную строку, которая отключает экранирование: r"images\nuke.png"
  • Вы можете использовать / для разделителя папок: "images/nuke.png"

Я предпочитаю третий вариант. Windows принимает как \, так и / в качестве разделителя папок. Кроме того, в Qt предпочтительнее использовать /, так как он автоматически переводится к соответствующему системному разделителю:

Qt использует «/» в качестве универсального разделителя каталогов так же, как «/» используется в качестве разделителя путей в URL-адресах. Если вы всегда используете «/» в качестве разделителя каталогов, Qt преобразует ваши пути в соответствии с базовой операционной системой.

person Avaris    schedule 14.12.2012
comment
нет, чувак, я думал, что это должно исправить, но я перепробовал все варианты, и значок все еще не появлялся... - person ; 15.12.2012
comment
забыл упомянуть, даже если использовать значок, используемый в первом блоке if в нижнем блоке else, который тоже не отображается, хотя, если блок выполняется, он отображается для него. - person ; 15.12.2012
comment
@san: Вы уверены, что блок elif выполнен? - person Avaris; 15.12.2012
comment
да 100 %, потому что текст, сгенерированный блоком elif, добавляется... см. эту ссылку< /а> - person ; 15.12.2012