1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
import sys
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtCore import Qt, QModelIndex, QItemSelectionModel
from PyQt5.QtWidgets import (
QMainWindow,
QApplication,
QListView,
QAbstractItemView,
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
elements = [
{'name' : 'bob', 'state' : True},
{'name' : 'alice', 'state' : True},
{'name' : 'marc', 'state' : False},
{'name' : 'eve', 'state' : True}
]
listeWdg = OrderNChooseWdg(elements)
self.setCentralWidget(listeWdg)
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
QApplication.quit()
class OrderNChooseWdg(QListView):
def __init__(self, elements):
super().__init__()
self.setDragDropMode(QAbstractItemView.InternalMove)
self.setDefaultDropAction(Qt.MoveAction)
self.setDragDropOverwriteMode(False)
self.setAcceptDrops(True)
self.setDropIndicatorShown(True)
self.setDragEnabled(True)
self.model = QStandardItemModel(self)
self.model.itemChanged.connect(self.test)
self.model.rowsInserted.connect(self.test2)
#self.selection_model = QItemSelectionModel(self.model)
self.setModel(self.model)
for elt in elements:
self.add_item(elt['name'], elt['state'])
self.get_states()
def test(self, e):
print('== item changed ===')
self.get_states()
def test2(self, item, index, _):
print("== rows inserted ==")
def add_item(self, name, state):
item = QStandardItem(name)
item.setCheckable(True)
item.setUserTristate(False)
item.setCheckState(state)
item.setDragEnabled(True)
item.setDropEnabled(False)
self.model.appendRow(item)
def get_states(self):
for i in range(self.model.rowCount()):
name = self.model.item(i).text()
state = self.model.item(i).checkState()
print(name, state)
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_()) |
Partager