“палочка” это ваша иконка? тогда это нормально, у вас же на виджете две QLabel.
несмотря на то что текст вы не передаете, сам QLabel отрисовываеться и занимает место в лайоте (рамка у него там или еще что). Вот вам и “сдвиг”
1. совем уберите label1.
тогда вообще можно упростить код до такого: там QWidget и лайоты не нужны, просто фигачте картинку в лебл.
class TableWidgetItem(QtGui.QLabel):
def __init__(self, icon):
QtGui.QLabel.__init__(self)
self.setPixmap(QtGui.QPixmap(icon))
2 .если в некоторых случая вам нужет таки текст то не отрисовывайтеlabel1 если текст пустой:
удалите все строки где есть label1. и поместите после layout.setSpacing(0) такой код
if text:
label1 = QtGui.QLabel()
label1.setText(text)
label1.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
layout.addWidget(label1)
Пока писал ответ, топикстартер сам разобрался..