Python 如何将带有标签的GIF添加到QListWidgetItem?
我试图在QListWidget中QListWidgetItem的左侧显示动画GIF,标签文本如下。我一直在读QLabels包含可以运行GIF动画的QMovies,我需要创建一个自定义小部件并使用它来代替默认的QListWidgetItem,但我运气不好。有人知道怎么做吗?我把事情复杂化了吗 我在下面编写了一个基本测试用例:Python 如何将带有标签的GIF添加到QListWidgetItem?,python,python-2.7,pyqt,pyside,pyside2,Python,Python 2.7,Pyqt,Pyside,Pyside2,我试图在QListWidget中QListWidgetItem的左侧显示动画GIF,标签文本如下。我一直在读QLabels包含可以运行GIF动画的QMovies,我需要创建一个自定义小部件并使用它来代替默认的QListWidgetItem,但我运气不好。有人知道怎么做吗?我把事情复杂化了吗 我在下面编写了一个基本测试用例: #/usr/bin/env python 从PySide2导入QtGui、QtWidgets、QtCore 类列表\u Widget\u Gif(qtwidts.QWidge
#/usr/bin/env python
从PySide2导入QtGui、QtWidgets、QtCore
类列表\u Widget\u Gif(qtwidts.QWidget):
def uuu init uuuu(self,label_text,gif,parent=None):
超级(列表\小部件\ Gif,自我)。\初始化\父级)
#布局
horizontal_box_layout=qtwidts.QHBoxLayout()
#创建文本标签
self.text_label=qtwidts.QLabel()
self.text\u label.setText(label\u text)
#创建要应用GIF的标签(显然,在这种情况下,这是GIF的最佳选择?)
self.icon_label=qtwidts.QLabel()
movie=QtGui.QMovie(gif,QtCore.QByteArray(),self)
self.icon_label.setMovie(电影)
电影开始
#向布局中添加小部件
水平\u框\u布局.addWidget(self.text\u标签)
水平\u框\u布局.addWidget(self.icon\u标签)
#设置布局
self.setLayout(水平\u框\u布局)
类TestUI(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
super(TestUI,self)。\uuuuu init\uuuuuu(父级)
self.setObjectName(“TestUI”)
#要通过的VAR
self.my\u gif=“my\u cool\u animation.gif”
self.my_text=“这是非常棒的文本”
def设置界面(自身):
#创建默认列表小部件
list_widget=qtwidts.QListWidget()
#创建默认列表小部件项
default_list_item=QtWidgets.QListWidgetItem()
#创建带有标签和GIF运动的自定义列表小部件
自定义\u列表\u小部件\u项目=列表\u小部件\u Gif(self.my\u文本,self.my\u Gif)
#将默认项添加到列表小部件
list\u widget.insertItem(list\u widget.count(),默认的列表项)
#将默认项设置为带有gif运动的自定义项。
self.ui.layerList.setItemWidget(默认列表项目、自定义列表项目)
#设置为用户界面
self.setCentralWidget(列表小部件)
self.show()
如果名称=“\uuuuu main\uuuuuuuu”:
app=QtWidgets.QApplication([])
test=TestUI()
test.setup_UI()
app.exec()
首先您有一个输入错误(它应该引发一个异常),因此您必须将self.ui.layerList
更改为list\u小部件
纠正上述错误有几种可能的错误原因:
- 必须从自定义小部件的布局中删除边距:
horizontal\u box\u布局。设置内容边缘(0,0,0,0)
- 不要使用相对路径,因为它们是导致静默错误的原因,最好基于另一个元素的位置构建绝对路径。如果我假设.gif与.py位于同一文件夹中,则您可以使用该信息进行更改:
导入操作系统 CURRENT_DIR=os.path.dirname(os.path.realpath(uu文件_uu))
self.my\u gif=os.path.join(当前目录,“my\u cool\u animation.gif”)
再次感谢!边距是个问题,我更喜欢在自定义小部件中设置边距,而不是调整默认项目的大小(非破坏性)。谢谢!边距确实是问题所在,我在自定义小部件中将它们设置为0。现在工作得很好@丹尼斯·詹森你能再详细一点吗?我只需要对UI类使用super()。PyCharm甚至让我讨厌将super添加到我的非UI类中,如果这些类有def_uuinit_u_;()但我没有理由添加它们。1)您必须始终如一地使用它,并记录您使用它的情况,因为它是类的外部接口的一部分,不管您喜欢与否。