def __init__(self, crossword_index, grid_data, parent=None): super(Form, self).__init__(parent) self.setWindowTitle('{} {} {}'.format( app_title, bangla.convert_english_digit_to_bangla_digit(crossword_index), date.today().strftime("%A, %d %B, %Y"))) self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) tableModel = CrosswordGridModel(crossword_index, grid_data, self) tableView = QTableView(self) tableView.horizontalHeader().hide() tableView.verticalHeader().hide() tableView.setModel(tableModel) for i in range(grid_row_count): tableView.setRowHeight(i, grid_cell_size) for i in range(grid_column_count): tableView.setColumnWidth(i, grid_cell_size) generateIconFiles(icons_folder, tableView.columnWidth(0), tableView.rowHeight(0)) right_label = QLabel(self) right_pixmap = QPixmap('right_clues.png') right_label.setPixmap(right_pixmap) down_label = QLabel(self) down_pixmap = QPixmap('down_clues.png') down_label.setPixmap(down_pixmap) saveButton = QPushButton('Save progress', self) loadButton = QPushButton('Load progress', self) clearButton = QPushButton('Clear progress', self) saveButton.clicked.connect(tableModel.save_solution) loadButton.clicked.connect(tableModel.load_solution) clearButton.clicked.connect(tableModel.clear_solution) bbox = QDialogButtonBox(self) bbox.addButton(saveButton, QDialogButtonBox.AcceptRole) bbox.addButton(loadButton, QDialogButtonBox.AcceptRole) bbox.addButton(clearButton, QDialogButtonBox.AcceptRole) layout = QGridLayout(self) layout.addWidget(tableView, 0, 0) layout.addWidget(right_label, 0, 1, Qt.AlignLeft | Qt.AlignTop) layout.addWidget(down_label, 1, 0, Qt.AlignLeft | Qt.AlignTop) layout.addWidget(bbox, 1, 1, Qt.AlignHCenter | Qt.AlignBottom) self.setLayout(layout) windowWidth = tableView.columnWidth( 0 ) * grid_column_count + grid_column_count - 1 + right_clues_right - right_clues_left + layout.horizontalSpacing( ) + 27 windowHeight = tableView.rowHeight( 0 ) * grid_row_count + grid_row_count - 1 + down_clues_bottom - down_clues_top + layout.verticalSpacing( ) + 10 self.setFixedSize(QSize(windowWidth, windowHeight))
class SQLite(QSqlDatabase): """ Класс для инициализации и открытия базы данных каталога, полученный из Slot'а (openFile) """ def __init__(self, path=None): """ Инициализация экземпляра класса :param path: путь до каталога, полученный изиз Slot'а (openFile) """ super().__init__() self.path = path self.width = 0 self.heigh = 0 self.db = QSqlDatabase.addDatabase('QSQLITE') self.db.setDatabaseName(self.path) self.db.open() self.window = QWidget() self.window.setWindowTitle("Каталог книг") self.conn = sqlite3.connect(self.path) cursor = self.conn.cursor() sql = f'select * from sqlite_master where type = "table"' # получение имени таблицы(первая в списке), к которой будет # осуществлено подключение cursor.execute(sql) self.search_result = cursor.fetchall()[0][1] self.model = QSqlTableModel(parent=self.window, db=self.db) self.model.setTable(self.search_result) self.db_record = QSqlRecord(self.db.record(self.search_result)) self.tableView = QTableView() def on(self): """ Метод для подключения и отображения подключенного каталога :return: виджет self.window """ self.model.setEditStrategy(QSqlTableModel.OnManualSubmit) self.model.select() self.model.setHeaderData(-1, Qt.Horizontal, self.db_record.fieldName(0)) vbox = QVBoxLayout() self.tableView.setModel(self.model) self.tableView.resizeColumnsToContents() self.tableView.resizeRowsToContents() for i in range(self.model.columnCount() + 2): self.width += self.tableView.columnWidth(i) for j in range(self.model.rowCount() + 1): self.heigh += self.tableView.rowHeight(j) self.tableView.resize(self.width + 50, self.heigh + 50) vbox.addWidget(self.tableView) self.window.setLayout(vbox) self.window.resize(self.tableView.width() + 30, self.tableView.height() + 120) return self.window