Guest User

Untitled

a guest
Feb 23rd, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. import sys
  2.  
  3. from PyQt5.QtGui import *
  4. from PyQt5.QtSql import *
  5. from PyQt5.QtCore import *
  6. from PyQt5.QtWidgets import *
  7.  
  8.  
  9. class FilterDialog(QDialog):
  10. def __init__(self, parent):
  11. super().__init__(parent)
  12. self.init_elements()
  13.  
  14. def init_elements(self):
  15. cancelButton = QPushButton("Cancel")
  16. cancelButton.clicked.connect(self.reject)
  17.  
  18. okButton = QPushButton("OK")
  19. okButton.setDefault(True)
  20. okButton.clicked.connect(self.accept)
  21.  
  22. hbox = QHBoxLayout()
  23. hbox.addStretch(1)
  24. hbox.addWidget(cancelButton)
  25. hbox.addWidget(okButton)
  26.  
  27. self.regex = QLineEdit()
  28.  
  29. vbox = QVBoxLayout()
  30. vbox.addWidget(self.regex)
  31. vbox.addStretch(1)
  32. vbox.addLayout(hbox)
  33.  
  34. self.setLayout(vbox)
  35.  
  36. self.setWindowTitle('Filter Column')
  37.  
  38.  
  39. class FilterModel(QSortFilterProxyModel):
  40. def __init__(self, filters):
  41. super().__init__()
  42. self.filters = filters
  43.  
  44. def filterAcceptsRow(self, row, modelindex):
  45. for i, filter in enumerate(self.filters):
  46. if filter not in str(self.sourceModel().index(row, i).data()):
  47. return False
  48. return True
  49.  
  50.  
  51. class WordListViewer(QMainWindow):
  52. def __init__(self, path):
  53. super().__init__()
  54. self.dbpath = path
  55. self.init_elements()
  56.  
  57. def init_elements(self):
  58. exitAct = QAction(QIcon.fromTheme('exit'), 'Exit', self)
  59. exitAct.setShortcut('Ctrl+Q')
  60. exitAct.triggered.connect(qApp.quit)
  61.  
  62. self.toolbar = self.addToolBar('Exit')
  63. self.toolbar.addAction(exitAct)
  64.  
  65. self.statusBar().showMessage(self.dbpath)
  66.  
  67. self.init_table()
  68.  
  69. self.setCentralWidget(self.table)
  70.  
  71. self.setGeometry(200, 100, 800, 600)
  72. self.setWindowTitle('FormTable viewer')
  73.  
  74. self.show()
  75.  
  76. def init_table(self):
  77. db = QSqlDatabase.addDatabase("QSQLITE")
  78. db.setDatabaseName(self.dbpath)
  79. if not db.open():
  80. raise Error("Could not open the database")
  81.  
  82. self.model = QSqlTableModel(self, db)
  83. self.model.setTable("FormTable")
  84. self.model.EditStrategy(QSqlTableModel.OnManualSubmit)
  85. self.model.select()
  86.  
  87. self.table = QTableView()
  88. self.table.setSortingEnabled(True)
  89. self.add_filter_functionality()
  90. self.table.show()
  91.  
  92. def add_filter_functionality(self):
  93. def show_filter(logical_index):
  94. dialog = FilterDialog(self)
  95. if not dialog.exec_():
  96. return
  97. filter = dialog.regex.text()
  98. self.filters.filters[logical_index] = filter
  99. print(self.filters.filters)
  100. self.filters.modelReset.emit()
  101.  
  102. self.filters = FilterModel([""] * self.model.columnCount())
  103. self.filters.setSourceModel(self.model)
  104. self.table.setModel(self.filters)
  105. self.filters.modelReset.emit()
  106.  
  107. header = self.table.horizontalHeader()
  108. header.sectionDoubleClicked.connect(show_filter)
  109.  
  110.  
  111. if True or __name__ == '__main__':
  112. app = QApplication(sys.argv)
  113.  
  114. ex = WordListViewer(sys.argv[1])
  115.  
  116. sys.exit(app.exec_())
Add Comment
Please, Sign In to add comment