python3 pyQt5之listWidget控制元件的高階運用--將多種控制元件組合插入其中一行
最近想用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)
這是其中關鍵的三行