Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 滑动以在QListWidget中选中/取消选中_Python_Pyqt_Pyqt5_Swipe_Qlistwidget - Fatal编程技术网

Python 滑动以在QListWidget中选中/取消选中

Python 滑动以在QListWidget中选中/取消选中,python,pyqt,pyqt5,swipe,qlistwidget,Python,Pyqt,Pyqt5,Swipe,Qlistwidget,我想在PyQt5中设置QListWidget,以便在我刷卡时选中或取消选中复选框 这是我的界面: 我的代码是: import sys from PyQt5.QtCore import QDate, QSize, Qt from PyQt5.QtGui import * from PyQt5.QtWidgets import * class VerifyDialog(QDialog): def __init__(self, parent=None): super(Ver

我想在PyQt5中设置QListWidget,以便在我刷卡时选中或取消选中复选框

这是我的界面:

我的代码是:

import sys
from PyQt5.QtCore import QDate, QSize, Qt
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class VerifyDialog(QDialog):
    def __init__(self, parent=None):
        super(VerifyDialog, self).__init__(parent)

        self.listWidget = QListWidget()

        for i in range(100):
            item = QListWidgetItem("Item %i" % i)
            # could be Qt.Unchecked; setting it makes the check appear
            item.setCheckState(Qt.Checked)
            self.listWidget.addItem(item)

        runButton = QPushButton("Run")
        runButton.clicked.connect(self.exec)

        cancelButton = QPushButton("Cancel")
        cancelButton.clicked.connect(self.close)

        horizontalLayout = QHBoxLayout()
        horizontalLayout.addWidget(self.listWidget, 1)

        buttonsLayout = QHBoxLayout()
        buttonsLayout.addStretch(1)
        buttonsLayout.addWidget(runButton)
        buttonsLayout.addWidget(cancelButton)

        mainLayout = QVBoxLayout()
        mainLayout.addLayout(horizontalLayout)
        mainLayout.addSpacing(12)
        mainLayout.addLayout(buttonsLayout)

        self.setLayout(mainLayout)
        self.setWindowTitle("Config Dialog")
        self.show()

if __name__=="__main__":
    app = QApplication(sys.argv)
    dialog = VerifyDialog()
    sys.exit(app.exec_())

我想单击项目4并取消选中它(这比单击框容易),然后我想向下拖动并取消选中许多其他项目。

您必须使用
itemcentered
信号,该信号将鼠标下的对象发送给您

self.listWidget.itemEntered.connect(lambda item: item.setCheckState(Qt.Checked if item.checkState()==Qt.Unchecked else Qt.Unchecked))
完整代码:

import sys
from PyQt5.QtCore import QDate, QSize, Qt
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class VerifyDialog(QDialog):
    def __init__(self, parent=None):
        super(VerifyDialog, self).__init__(parent)

        self.listWidget = QListWidget()

        self.listWidget.itemEntered.connect(lambda item: item.setCheckState(Qt.Checked if item.checkState()==Qt.Unchecked else Qt.Unchecked))


        for i in range(100):
            item = QListWidgetItem("Item %i" % i)
            # could be Qt.Unchecked; setting it makes the check appear
            item.setCheckState(Qt.Checked)
            self.listWidget.addItem(item)

        runButton = QPushButton("Run")
        runButton.clicked.connect(self.exec)

        cancelButton = QPushButton("Cancel")
        cancelButton.clicked.connect(self.close)

        horizontalLayout = QHBoxLayout()
        horizontalLayout.addWidget(self.listWidget, 1)

        buttonsLayout = QHBoxLayout()
        buttonsLayout.addStretch(1)
        buttonsLayout.addWidget(runButton)
        buttonsLayout.addWidget(cancelButton)

        mainLayout = QVBoxLayout()
        mainLayout.addLayout(horizontalLayout)
        mainLayout.addSpacing(12)
        mainLayout.addLayout(buttonsLayout)

        self.setLayout(mainLayout)
        self.setWindowTitle("Config Dialog")
        self.show()


if __name__=="__main__":
    app = QApplication(sys.argv)
    dialog = VerifyDialog()
    sys.exit(app.exec_())

是的,我只是想看看。它需要一些改进,但大部分都在那里。好的,我做了改进。现在它记住了单击的第一个项目的状态更改,并在拖动到其他项目时传播该更改。@vy32使用lambda函数,这样您就不必创建新函数。您已经尝试了我的答案。@vy32如果您想进行更改,您应该编辑您的问题。当然,更改将被删除。为什么您认为代码不应该被编辑?我看到代码一直在编辑,所以;请为未编辑的文档提供参考。