私はQStandardItemModelとQStandardItemを使って作成したチェックボックスのリストを持つPyQtでアプリケーションを作成しています。私はリストの最初の項目を 'Select all'チェックボックスを関数に接続したいと思います。この関数は、リストの他のすべての項目をチェックできるはずです。私は、次のコードでこれをやろうとしている:私は、SQLクエリの出力から、リストに複数の項目を追加したPyQt:QStandardItemModelのQStandardItemを関数に接続する方法
model = QStandardItemModel(list)
item = QStandardItem("Select all")
model.appendRow(item)
item.setCheckable(True)
model.itemChanged.connect(state_changed)
def state_changed(item):
print ("Hello")
と私はそのボックスをチェックかかわらず、印刷された「こんにちは」ことがわかりますIクリック。
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
def main():
db = QSqlDatabase.addDatabase("QODBC")
db.setHostName('LAPTOP-B79DRPA3')
db.setDatabaseName('local')
db.open()
if (db.open()==False):
QMessageBox.critical(None, "Database Error",
db.lastError().text())
query = QSqlQuery()
query.exec_ ("select id from [Sarah].[dbo].fraga")
list = QListView()
model = QStandardItemModel(list)
item = QStandardItem("Select all")
model.appendRow(item)
item.setCheckable(True)
model.itemChanged.connect(state_changed)
while (query.next()):
item1 = QStandardItem(str(query.value(0)))
model.appendRow(item1)
item1.setCheckable(True)
list.setModel(model)
list.show()
return app.exec_()
def state_changed(item):
print ("Hello")
if __name__ == '__main__':
app = QApplication(sys.argv)
list = QListView()
model = QStandardItemModel(list)
main()
がどのように機能が「すべて選択」の状態が変更された場合にのみ呼び出されることを保証します:これは私の全体のコードですか?
'state_changed'関数をモデルの' itemChanged'信号に接続しました。独自の実装では、 'state_changed'にitem引数があります。最も簡単な方法は、item引数が必要な項目であるかどうかをチェックすることです。今では、スコープの問題を抱えています(あなたはどこにでもあなたの望むアイテムを保存しないので、別の場所でテストすることができます)。私はあなたがクラス内で実装を行い、あなたのターゲットアイテムをクラスの変数にするべきだと思います(これが可能になります: 'self.item == item')。 – armatita