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 查询的输出中向列表中添加了更多项目,我可以看到无论我单击哪个复选框,都会打印“Hello”。这是我的全部代码:

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()

如何确保仅在“全选”状态更改时调用该函数?

克里斯平

不是连接到QAbstractItemModel.itemChanged信号,而是连接到QAbstractItemView.clicked信号,它指定点击的索引。此外,建议不要命名变量list,因为它会干扰内置的list.

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_view = QListView()
    model = QStandardItemModel(list_view)

    item = QStandardItem("Select all")
    model.appendRow(item)
    item.setCheckable(True)
    list_view.clicked.connect(state_changed)

    while (query.next()):
        item1 = QStandardItem(str(query.value(0)))
        model.appendRow(item1)
        item1.setCheckable(True)

    list_view.setModel(model)
    list_view.show()
    return app.exec_()

def state_changed(index):
    row = index.row()
    if row == 0:
        print ("Hello")

if __name__ == '__main__':
    app  = QApplication(sys.argv)
    list_view = QListView()
    model = QStandardItemModel(list)
    main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将向量连接到numpy矩阵的行中?

如何完全遍历QStandardItemModel?

如何复制-将QStandardItemModel创建的QTableView形式的多个项目粘贴到文本/ excel文件中?

QStandardItemModel中的项的解除分配

如何将函数连接到主线程之外的PyQt信号

如何使用replace函数将mark标签连接到字符串中的单个单词?

如何将输入连接到函数

如何将滑块连接到JavaScript中的article元素?

QStandardItem子类中克隆的实现

postgresql:如何将函数返回的单行连接到表中

如何将输出的单列连接到列表中?

如何将QStandardItem追加到两行中

如何将按钮连接到ubuntu sdk中的FileDialog函数?

如何“打印” QStandardItem的数据

如何在Qt / PyQt中删除QStandardItem的文本?

我如何将我的pyqt登录名连接到python中的qstackedwidget新窗口

如何在PySide / PyQt中撤消对QStandardItem的编辑?

如何将抽象信号连接到接口构造函数中的插槽?

如何将动作连接到ControlsFX中的按钮?

在PyQt4中将Button连接到该函数时,该函数未运行

将拖放连接到QListWidget中的函数的最佳方法

在PyQt中关闭QTextEdit时连接到方法/函数

PyQt5:使用QtDesigner,如何将信号与模块中定义的插槽/可调用连接

如何优雅地将多个信号连接到 PyQt5 中的一个函数?

在 Qml 中获取 QStandardItem 的类型

将返回的元素连接到递归函数中的列表

如何将函数连接到 QAction

如何将 Docker 中的 Prometheus 连接到 Kubernetes 集群?

如何将变量连接到替代文本中