我在PyQt中創建了一個應用程序,其中我有一個使用QStandardItemModel和QStandardItem創建的複選框列表,它完美地工作。我想將列表中的第一個項目連接到一個「全選」複選框。這個功能應該能夠檢查列表中的所有其他項目。我想通過下面的代碼來做到這一點: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")
我增加了更多的項目列表從SQL查詢的輸出,我可以看到「你好」印刷不管是哪個的複選框我單擊。這是我的全部代碼:
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參數。最簡單的方法是檢查項目參數是否是您需要的項目。現在你將遇到一個範圍問題(你沒有把你想要的物品保存在任何地方,因此可以在另一個地方進行測試)。我認爲你應該在一個類內部實現你的實現,並將你的目標項目變成一個類的變量(所以這成爲可能:'self.item == item')。 – armatita