2009-05-11 36 views
9

Tôi muốn hiển thị một QListView trong đó mỗi mục là một hộp kiểm với một số nhãn. Các hộp kiểm sẽ luôn được hiển thị. Một cách tôi có thể nghĩ là sử dụng một đại biểu tùy chỉnh và QAbstractListModel. Có cách nào đơn giản hơn không? Bạn có thể cung cấp đoạn mã đơn giản nhất không?Một ListView các hộp kiểm trong PyQt

Cảm ơn trước

Trả lời

10

Nếu bạn đang viết mô hình riêng của bạn, chỉ cần bao gồm cờ Qt.ItemIsUserCheckable trong giá trị trả về từ phương pháp flags(), và đảm bảo rằng bạn quay trở lại một giá trị hợp lệ cho Qt.CheckStateRole từ phương pháp data() .

Nếu bạn sử dụng lớp QStandardItemModel, bao gồm cờ Qt.ItemIsUserCheckable trong những bạn vượt qua phương pháp của mỗi mục setFlags(), và thiết lập trạng thái kiểm tra cho Qt.CheckStateRole với phương pháp setData() của nó.

Trong một phiên Python tương tác, gõ như sau:

from PyQt4.QtGui import * 

model = QStandardItemModel() 
item = QStandardItem("Item") 
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) 
item.setData(QVariant(Qt.Checked), Qt.CheckStateRole) 
model.appendRow(item) 

view = QListView() 
view.setModel(model) 
view.show() 
21

tôi đã kết thúc bằng cách sử dụng phương pháp được cung cấp bởi David Boddie trong mailing list PyQt. Dưới đây là một đoạn làm việc dựa trên mã của mình:

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 
from random import randint 


app = QApplication(sys.argv) 

model = QStandardItemModel() 

for n in range(10):     
    item = QStandardItem('Item %s' % randint(1, 100)) 
    check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked 
    item.setCheckState(check) 
    item.setCheckable(True) 
    model.appendRow(item) 


view = QListView() 
view.setModel(model) 

view.show() 
app.exec_() 

Lưu ý: thay đổi các cuộc gọi của setData với một vai trò kiểm tra để setCheckState và sử dụng setCheckable thay vì cờ.

+1

những tín hiệu nào (nếu có) được phát ra khi mục/hộp kiểm đó được bật? – marcin

+3

để tự trả lời, 'model.itemChanged' có thể được sử dụng, như được hiển thị ở đây: http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/ – marcin

Các vấn đề liên quan