Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将带有标签的GIF添加到QListWidgetItem?_Python_Python 2.7_Pyqt_Pyside_Pyside2 - Fatal编程技术网

Python 如何将带有标签的GIF添加到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

我试图在QListWidget中QListWidgetItem的左侧显示动画GIF,标签文本如下。我一直在读QLabels包含可以运行GIF动画的QMovies,我需要创建一个自定义小部件并使用它来代替默认的QListWidgetItem,但我运气不好。有人知道怎么做吗?我把事情复杂化了吗

我在下面编写了一个基本测试用例:

#/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”)
    

它可以工作,您只需将默认项目的大小调整为自定义项目的大小即可

def setup_UI(self): #Create Default List Widget list_widget = QtWidgets.QListWidget() # Create Default List Widget Item default_list_item = QtWidgets.QListWidgetItem() # Create Custom List Widget with label and GIF motion custom_list_widget_item = List_Widget_Gif(self.my_text, self.my_gif) # Add default item to list widget list_widget.insertItem(list_widget.count(), default_list_item) # Set the default item to the custom one with the gif motion. list_widget.setItemWidget(default_list_item, custom_list_widget_item) default_list_item.setSizeHint(custom_list_widget_item.size()) #Set into UI self.setCentralWidget(list_widget) self.show() 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运动的自定义项。 列表小部件。setItemWidget(默认列表小部件、自定义列表小部件) 默认列表项.setSizeHint(自定义列表项小部件项.size()) #设置为用户界面 self.setCentralWidget(列表小部件) self.show() 输出


再次感谢!边距是个问题,我更喜欢在自定义小部件中设置边距,而不是调整默认项目的大小(非破坏性)。谢谢!边距确实是问题所在,我在自定义小部件中将它们设置为0。现在工作得很好@丹尼斯·詹森你能再详细一点吗?我只需要对UI类使用super()。PyCharm甚至让我讨厌将super添加到我的非UI类中,如果这些类有def_uuinit_u_;()但我没有理由添加它们。1)您必须始终如一地使用它,并记录您使用它的情况,因为它是类的外部接口的一部分,不管您喜欢与否。