class MainWindow(QMainWindow): def __init__(self): super().__init__() self.table = QTableView() self.model = QSqlTableModel(db=db) self.table.setModel(self.model) # tag::titles[] self.model.setTable("Track") column_titles = { "Name": "Name", "AlbumId": "Album (ID)", "MediaTypeId": "Media Type (ID)", "GenreId": "Genre (ID)", "Composer": "Composer", } for n, t in column_titles.items(): idx = self.model.fieldIndex(n) self.model.setHeaderData(idx, Qt.Horizontal, t) self.model.select() # end::titles[] self.model.select() self.setMinimumSize(QSize(1024, 600)) self.setCentralWidget(self.table)
def UseSqlQuery(db, query, columns): model = QSqlTableModel(db=db) model.setQuery(query) for column in columns: if column[hcol_idx.DISPLAY_NAME]: model.setHeaderData(model.fieldIndex(column[hcol_idx.DB_NAME]), Qt.Horizontal, column[hcol_idx.DISPLAY_NAME]) return model
class CurrencyComboBox(QComboBox): changed = Signal(int) def __init__(self, parent): QComboBox.__init__(self, parent) self.p_selected_id = 0 self.model = None self.table_name = 'currencies' self.field_name = 'name' self.activated.connect(self.OnUserSelection) self.model = QSqlTableModel(db=db_connection()) self.model.setTable(self.table_name) self.model.select() self.setModel(self.model) self.setModelColumn(self.model.fieldIndex(self.field_name)) def isCustom(self): return True def getId(self): return self.p_selected_id def setId(self, new_id): if self.p_selected_id == new_id: return self.p_selected_id = new_id name = get_field_by_id_from_table(self.table_name, self.field_name, self.p_selected_id) if self.currentIndex() == self.findText(name): return self.setCurrentIndex(self.findText(name)) selected_id = Property(int, getId, setId, notify=changed, user=True) def setIndex(self, index): if index is not None: self.selected_id = index self.changed.emit(self.selected_id) @Slot() def OnUserSelection(self, _selected_index): self.selected_id = self.model.record(self.currentIndex()).value("id") self.changed.emit(self.selected_id)
class MainWindow(QMainWindow): def __init__(self): super().__init__() self.table = QTableView() self.model = QSqlTableModel(db=db) self.table.setModel(self.model) # tag::sortTable[] self.model.setTable("Track") idx = self.model.fieldIndex("Milliseconds") self.model.setSort(idx, Qt.DescendingOrder) self.model.select() # end::sortTable[] self.model.select() self.setMinimumSize(QSize(1024, 600)) self.setCentralWidget(self.table)