2009-05-11 31 views
9

QListViewを表示すると、それぞれの項目がラベル付きのチェックボックスになります。チェックボックスは常に表示する必要があります。私が考えることのできる1つの方法は、カスタムデリゲートとQAbstractListModelを使用することです。簡単な方法がありますか?これを行う最も簡単なスニペットを提供できますか?事前にPyQtのチェックボックスのリストビュー

おかげで

答えて

10

独自のモデルを作成している場合は、単に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() 
21

私は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を使用しました。

+1

そのような項目/チェックボックスを切り替えたときにどのような信号(もしあれば)が放出されるのですか? – marcin

+3

自分自身に答えるには、ここに示すように 'model.itemChanged'を使うことができます:http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/ – marcin

関連する問題