最近想用python3做一个音乐播放器的交互应用,所以研究起了pyqt5,然后遇上了如上难题,仔细查找发现这一类的介绍好像极少,我是翻找qtc++琢磨出来的,所以写篇随笔希望帮助一些遇到困难的朋友,废话不多说,首先简单做个界面。

如图,其中只有一个控件QListWidget,objectName为listWidget

然后直接祭出源码....

import sys
from PyQt5 import uic, QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize,Qt

(form_class, qtbase_class) = uic.loadUiType('widget.ui')
#调用Qtcreator生成的界面,我喜欢这么用,也可以直接将ui界面转码成.py文件调用
class Widget(form_class, qtbase_class):
    def __init__(self):
        super(Widget, self).__init__()
        self.setupUi(self)
        self.widget2 = QtWidgets.QWidget()
        #再生成一个QWidget子窗口
        self.song = QtWidgets.QLabel('难得')
        #生成一个QLabel控件
        self.art = QtWidgets.QLabel('安来宁')
        self.download = QtWidgets.QToolButton()
        #生成一个QToolButtonStyle按钮用于存放一个自定义按钮
        self.download.setToolButtonStyle(Qt.ToolButtonIconOnly)
        #设置按钮只显示图标
        self.download.setIconSize(QSize(20,20))
        #设置按钮大小
        self.download.setIcon(QIcon('timg.jpg'))
        #设置按钮图片样式
        self.download.setStyleSheet('background-color:transparent')
        #设置按钮样式背景透明
        self.gridlayout = QtWidgets.QGridLayout()
        #生成一个QGridLayout栅栏布局
        self.gridlayout.addWidget(self.song,0,0)
        #将之前生成的控件加入到布局中
        self.gridlayout.addWidget(self.art,0,1)
        self.gridlayout.addWidget(self.download,0,2)

        self.widget2.setLayout(self.gridlayout)
        #将布局放到开始生成的子窗口中
        '''重要部分'''
        self.listwidgetitem = QtWidgets.QListWidgetItem()
        #生成一个QListWidgetItem列表控件
        self.listwidgetitem.setSizeHint(QSize(40,40))
        #设置listwidgetitem的大小,防止显示不完全
        self.listWidget.addItem(self.listwidgetitem)
        #将listWidgetitem加入到主窗口的列表中
        self.listWidget.setItemWidget(self.listwidgetitem,self.widget2)
        #将子窗口与listWidgetitem进行连接
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ui = Widget()
    ui.show()
    sys.exit(app.exec_())

简单总结下:

  1.生成一个子窗口

  2.将想放进一行的控件用QGridLayout栅栏布局打包

  3.在子窗口生成上一步的布局

  4.生成一个QListWidgetItem控件并把它加入到主窗口的QListWidget控件中

  5.将子窗口与QListWidgetItem控件进行连接

self.listwidgetitem = QtWidgets.QListWidgetItem()
self.listWidget.addItem(self.listwidgetitem)
self.listWidget.setItemWidget(self.listwidgetitem,self.widget2)

这是其中关键的三行

 

posted on 2018-12-09 20:55  FNgrey  阅读(1881)  评论(0编辑  收藏  举报