Python 滑动以在QListWidget中选中/取消选中
我想在PyQt5中设置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
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如果您想进行更改,您应该编辑您的问题。当然,更改将被删除。为什么您认为代码不应该被编辑?我看到代码一直在编辑,所以;请为未编辑的文档提供参考。