2017-05-19 8 views
0

PyQt5にQListWidgetを設定して、スワイプ時にチェックボックスをオンまたはオフにしたいとします。ここでPyQt5 - スワイプしてQListWidgetをチェック/アンチェックします

は私のインターフェイスです:

enter image description here

そして、私のコード:

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をクリックすると、それは(それがボックスをクリックするよりも簡単です)オフにしたい、と私は下にドラッグして、他の多くのアイテムをチェックしないようにしたい。

答えて

0

itemEnteredマウスの下にオブジェクトを送信する信号を使用する必要があります。

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_()) 
+0

すごいすごいすごいです!ありがとうございました!!!! – vy32

+0

私の答えが役に立ったら、それを正しいものとしてマークしてください。 – eyllanesc

+0

ねえ、私はちょうどそれをチェックしていた。それには改善が必要だが、ほとんどがそこにある。 – vy32

関連する問題