Pyqt Model/view框架 2.自定義委托(Delegate)
>通過上篇學習[Pyqt Model/view框架 1.第一個model](http://www.rzrgm.cn/hangxin1940/archive/2012/12/07/2806444.html),我們現在已經可以簡單的通過model/view顯示數據,在這篇中,我們會學到如何通過委托(delegate)控制view的顯示
我的第一個Delegate
---
在[上篇](http://www.rzrgm.cn/hangxin1940/archive/2012/12/07/2806444.html)已完成的代碼中加入以下類:
class MyDelegate(QStyledItemDelegate):
"""
自定義的委托
用來在Model獲取后,view顯示前,再將數據渲染一次
"""
def paint(self,painter,option,index):
"""
paint,有了畫布畫筆,想怎么顯示就怎么顯示,畫什么按自己的想法來
"""
#首先,從索引獲取數據,這里獲取當前索引角色為DisplayQole的數據
item_var=index.data(Qt.DisplayRole) #[QVariant]
#數據是C格式,我們再轉為Python格式,記住這點
item_str=item_var.toPyObject() #[QVariant] -> str
#我們將數據以進度條的方式顯現
opts=QStyleOptionProgressBarV2()
opts.rect=option.rect #進度條所占的矩形大小
opts.minimum=0
opts.maximum=100
opts.text=str(item_str) #顯示的內容
opts.textAlignment=Qt.AlignCenter
opts.textVisible=True
opts.progress=int(item_str) #設置當前進度
#這是關鍵
#讓QApplication根據當前的風格渲染控件并畫出來
QApplication.style().drawControl(QStyle.CE_ProgressBar,opts,painter)
并更改`main()`方法的內容:
def main():
app=QApplication(sys.argv)
#新建一個自定義Model
model=MyListModel()
#新建一個委托(Delagate)
delegate=MyDelegate()
#新建一個ListView
view=QListView()
#設置view的model
view.setModel(model)
#設置view的delegate
view.setItemDelegate(delegate)
view.show()
sys.exit(app.exec_())
運行后會發現,數據以進度條形式顯示出來,這就是delegate的作用
>[下一篇](http://www.rzrgm.cn/hangxin1940/archive/2012/12/07/2806450.html)中,我們將會掌握如何在view中呈現可編輯的數據
浙公網安備 33010602011771號