A ListView من خانات في باي كيوت
-
21-08-2019 - |
سؤال
وأريد أن عرض QListView حيث كل عنصر ومربع مع بعض التسمية. وينبغي أن تكون مربعات مرئية في جميع الأوقات. طريقة واحدة أستطيع أن أفكر في يستخدم مندوب العرف وQAbstractListModel. هي الطرق هناك أبسط؟ يمكنك توفير أبسط مقتطف يفعل ذلك؟
وشكرا مقدما
المحلول
إذا كنت تكتب نموذج الخاص بك، فقط تشمل Qt.ItemIsUserCheckable
العلم في قيمة الإرجاع من أسلوب flags()
، والتأكد من أنك العودة
قيمة صالحة للQt.CheckStateRole
من أسلوب data()
.
إذا كنت تستخدم فئة QStandardItemModel
، وتشمل Qt.ItemIsUserCheckable
العلم في تلك التي تمر على طريقة setFlags()
كل بند، وتعيين الاختيار
الدولة لQt.CheckStateRole
مع طريقة setData()
لها.
في جلسة بيثون التفاعلية، اكتب ما يلي:
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()
نصائح أخرى
وانتهى بي الأمر باستخدام طريقة التي تقدمها ديفيد Boddie في القائمة البريدية باي كيوت. وفيما يلي مقتطف العمل على أساس قانون له:
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_()
ملحوظة: غيرت دعوة setData
مع دور الاختيار لsetCheckState
وتستخدم setCheckable
بدلا من أعلام