QListViewを表示すると、それぞれの項目がラベル付きのチェックボックスになります。チェックボックスは常に表示する必要があります。私が考えることのできる1つの方法は、カスタムデリゲートとQAbstractListModelを使用することです。簡単な方法がありますか?これを行う最も簡単なスニペットを提供できますか?事前にPyQtのチェックボックスのリストビュー
おかげで
QListViewを表示すると、それぞれの項目がラベル付きのチェックボックスになります。チェックボックスは常に表示する必要があります。私が考えることのできる1つの方法は、カスタムデリゲートとQAbstractListModelを使用することです。簡単な方法がありますか?これを行う最も簡単なスニペットを提供できますか?事前にPyQtのチェックボックスのリストビュー
おかげで
独自のモデルを作成している場合は、単にflags()
メソッドの戻り値のQt.ItemIsUserCheckable
フラグが含まれ、そしてあなたがdata()
方法からQt.CheckStateRole
ため 有効な値を返すことを確認してください。
あなたがQStandardItemModel
クラスを使用する場合は、各項目のsetFlags()
メソッドに渡すと、そのsetData()
方法でQt.CheckStateRole
のチェック 状態を設定したものでQt.ItemIsUserCheckable
フラグが含まれます。 Pythonの対話セッションで
、次のように入力します。
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()
私はPyQtはメーリングリストにDavid 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_()
注:ここでは彼のコードに基づいて作業抜粋ですsetCheckState
にチェック役割をsetData
の呼び出しを変更し、代わりにフラグのsetCheckable
を使用しました。
そのような項目/チェックボックスを切り替えたときにどのような信号(もしあれば)が放出されるのですか? – marcin
自分自身に答えるには、ここに示すように 'model.itemChanged'を使うことができます:http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/ – marcin