def __init__(self): super().__init__() self.mapper_1 = QtWidgets.QDataWidgetMapper() self.mapper_2 = QtWidgets.QDataWidgetMapper() hbox = QtWidgets.QHBoxLayout(self) self.setLayout(hbox) self.ui_name = QtWidgets.QLabel('unknown') self.btn_group = QtWidgets.QButtonGroup() self.btn_group.setExclusive(True) self.btn_group.buttonClicked.connect(self.onClicked) self.ui_btn1 = QtWidgets.QPushButton('?', self) self.ui_btn2 = QtWidgets.QPushButton('?', self) self.ui_btn1.setCheckable(True) self.ui_btn2.setCheckable(True) self.btn_group.addButton(self.ui_btn1, 0) self.btn_group.addButton(self.ui_btn2, 1) hbox.addWidget(self.ui_name) hbox.addWidget(QtWidgets.QLabel(': ')) hbox.addWidget(self.ui_btn1) hbox.addWidget(self.ui_btn2) hbox.addStretch(1) self.via_this_button = False self.btn_group.buttonClicked.connect(self.mapper_1.submit) self.mapper_1.currentIndexChanged.connect( self.mapper_2.setCurrentIndex)
def __init__(self, parent=None, model=None): super(MDBEditGenres, self).__init__(parent) # ===== Set-up Model ===== if model is None: # This should never be seen. QtWidgets.QMessageBox.critical( self, "Model Error", "No model passed to edit genres dialog.", QtWidgets.QMessageBox.Ok) else: self.model_genres = model # ===== Set-up UI ===== self.ui = Ui_dlg_edit_genres() self.ui.setupUi(self) self.ui.lst_genres.setModel(self.model_genres) self.ui.lst_genres.setModelColumn( 1) # 1 is 'genre' column of the 'genres' table. # List view selection model self.selection = self.ui.lst_genres.selectionModel() # ===== Create Widget Mapper ===== self.widget_mapper = QtWidgets.QDataWidgetMapper(self) self.widget_mapper.setModel(self.model_genres) self.widget_mapper.setSubmitPolicy( QtWidgets.QDataWidgetMapper.AutoSubmit) self.widget_mapper.addMapping(self.ui.le_genre_name, 1) self.widget_mapper.addMapping(self.ui.te_genre_description, 2) self.widget_mapper.addMapping(self.ui.te_genre_examples, 3) # ===== Create Signal/Slots ===== self.selection.selectionChanged.connect(self.display_selected_entry) # Buttons self.ui.btn_add_genre.clicked.connect(self.add_genre) self.ui.btn_delete_genre.clicked.connect(self.delete_genre) self.ui.btn_done.clicked.connect(lambda: self.hide())
def __init__(self): super().__init__() self.widgets=OrderedDict() self.dataMapper = QtWidgets.QDataWidgetMapper() self.setupUi() self.updateCheck.connect(self.on_upateCheck)
def __init__(self, parent=None): super(manual_device_view_base, self).__init__() self.setupUi(self) print("HERE") self._model = None self._mapper = QtWidgets.QDataWidgetMapper()
def __init__(self, model, parent=None): super(EditRestPhrase, self).__init__(parent) self.model = model self.mapper = QtWidgets.QDataWidgetMapper(self) self.vertical_order = QtWidgets.QLineEdit() self._init_ui()
def __init__(self): super().__init__() self.mapper = QtWidgets.QDataWidgetMapper() self.mapper = QtWidgets.QDataWidgetMapper() hbox = QtWidgets.QHBoxLayout() self.setLayout(hbox) self.ui_name = QtWidgets.QLabel('unknown') self.ui_value = ScientificDoubleSpinBox() self.ui_units = QtWidgets.QLabel('units') hbox.addWidget(self.ui_name) hbox.addWidget(QtWidgets.QLabel(': ')) hbox.addWidget(self.ui_value) hbox.addWidget(self.ui_units) hbox.addStretch(1)
def __init__(self, coffees_model, reviews_model): super().__init__() self.setLayout(qtw.QFormLayout()) # Coffee Fields self.coffee_brand = qtw.QLineEdit() self.layout().addRow('Brand: ', self.coffee_brand) self.coffee_name = qtw.QLineEdit() self.layout().addRow('Name: ', self.coffee_name) self.roast = qtw.QComboBox() self.layout().addRow('Roast: ', self.roast) # Map the coffee fields self.coffees_model = coffees_model self.mapper = qtw.QDataWidgetMapper(self) self.mapper.setModel(self.coffees_model) self.mapper.setItemDelegate( qts.QSqlRelationalDelegate(self)) self.mapper.addMapping( self.coffee_brand, self.coffees_model.fieldIndex('coffee_brand') ) self.mapper.addMapping( self.coffee_name, self.coffees_model.fieldIndex('coffee_name') ) self.mapper.addMapping( self.roast, self.coffees_model.fieldIndex('description') ) # retrieve a model for the roasts and setup the combo box roasts_model = coffees_model.relationModel( self.coffees_model.fieldIndex('description')) self.roast.setModel(roasts_model) self.roast.setModelColumn(1) # Cause data to be written when changed # Reviews self.reviews = qtw.QTableView() self.layout().addRow(self.reviews) self.reviews.setModel(reviews_model) self.reviews.hideColumn(0) self.reviews.hideColumn(1) self.reviews.horizontalHeader().setSectionResizeMode( 4, qtw.QHeaderView.Stretch) # Using a custom delegate self.dateDelegate = DateDelegate() self.reviews.setItemDelegateForColumn( reviews_model.fieldIndex('review_date'), self.dateDelegate) # add and delete reviews self.new_review = qtw.QPushButton( 'New Review', clicked=self.add_review) self.delete_review = qtw.QPushButton( 'Delete Review', clicked=self.delete_review) self.layout().addRow(self.new_review, self.delete_review)
def __init__(self): super().__init__() self._device_mapper = QtWidgets.QDataWidgetMapper() self._bt_mapper = QtWidgets.QDataWidgetMapper() hbox = QtWidgets.QHBoxLayout(self) self.setLayout(hbox) self.ui_name = QtWidgets.QLabel('unknown') self.ui_combo = QtWidgets.QComboBox() self.ui_combo.addItems([""]) hbox.addWidget(self.ui_name) hbox.addWidget(self.ui_combo) hbox.addStretch(1) self.via_this_button = False self.btn_group.buttonClicked.connect(self.mapper_1.submit)
def create_form(parent, config_widgets, model): tool_mapper = QtWidgets.QDataWidgetMapper(parent) tool_mapper.setModel(model) tool_mapper.addMapping(config_widgets[TabWidgets.NAME], 0) # PlainText mapping because without the descriptions render without # newline tool_mapper.addMapping(config_widgets[TabWidgets.DESCRIPTION], 1, b"plainText") return tool_mapper
def __init__(self, *args, **kwargs): super(MyMainWindow, self).__init__(*args, **kwargs) self.mapper = QtWidgets.QDataWidgetMapper(self) self.db = open_db() self.model = QSqlQueryModel(self) self.model.setQuery('SELECT DISTINCT form FROM test') self.mapper.setModel(self.model) self.mapper.addMapping(self.label, 0, b'text') self.mapper.toFirst() self.button_left.clicked.connect(self.mapper.toPrevious) self.button_right.clicked.connect(self.mapper.toNext)
def create_form( parent: QtWidgets.QWidget, config_widgets: Dict[TabWidgets, QtWidgets.QWidget], model: "models.WorkflowListModel") -> QtWidgets.QDataWidgetMapper: tool_mapper = QtWidgets.QDataWidgetMapper(parent) tool_mapper.setModel(model) tool_mapper.addMapping(config_widgets[TabWidgets.NAME], 0) # PlainText mapping because without the descriptions render without # newline tool_mapper.addMapping(config_widgets[TabWidgets.DESCRIPTION], 1, b"plainText") return tool_mapper
def __init__(self): """ Loads the UI window and initialise the class variables. """ super(ComponentEditor, self).__init__() self.setupUi(self) self.model = None self.manufactureModel = None self.statusModel = None self.currentIndex = qtc.QModelIndex() self.mapper = qtw.QDataWidgetMapper() self._enableSelf()
def alchemyObject(self, saObject): self.__alchemyObject=saObject self.generalModel=checks.gui.models.CheckSettingsModel(abstractItem=saObject) self.dataMapper = QtWidgets.QDataWidgetMapper() self.dataMapper.setModel(self.generalModel) self.widgets = OrderedDict() self.delegate = gui.qtalcmapper.generateQtDelegate(saObject) columns = self.alchemyObject._qt_columns() for colNr, column in enumerate(columns): if colNr in self.delegate.delegates.keys(): # lblWidget = QtWidgets.QLabel(column.info.get('qt_label')) wid = gui.qtalcmapper.getQtWidgetForAlchemyType(column) self.dataMapper.addMapping(wid, colNr) else: wid=Table(self.alchemyObject, column.key) self.widgetReference.addWidget(wid, name=column.key, info=column.info) standardSelection=['IT_USER', 'IT_GROUP', 'IT_UGROUP'] selectionCriteria_rolesProfiles=[] selectionCriteria_authorizations=[] selectionCriteria_defaultValues=[] selectionCriteria_logonData=[] selectionCriteria_documentation=[] param_set_name_widget=QtWidgets.QWidget() param_set_name_layout=QtWidgets.QFormLayout() param_set_name_widget.setLayout(param_set_name_layout) label=self.widgetReference.getLabel('param_set_name') widget=self.widgetReference.getWidget('param_set_name') widget.setStyleSheet('') param_set_name_layout.addRow(label, widget) self.coreVboxLayout.insertWidget(0, param_set_name_widget) for name in standardSelection: self.standardSelection_layout.addRow(self.widgetReference.getLabel(name), self.widgetReference.getWidget(name)) for name in selectionCriteria_logonData: self.selectionCriteria_logonData_layout self.dataMapper.toFirst()
def __init__(self): super().__init__() self.mapper = QtWidgets.QDataWidgetMapper() hbox = QtWidgets.QHBoxLayout() self.setLayout(hbox) self._val = False self.ui_name = QtWidgets.QLabel('unknown') self.ui_val = QtWidgets.QLabel('?') self._off_name = "" self._on_name = "" hbox.addWidget(self.ui_name) hbox.addWidget(QtWidgets.QLabel(': ')) hbox.addWidget(self.ui_val) hbox.addStretch(1)
def __init__(self, parent, flow_data, idx: int) -> None: super().__init__(parent, qc.Qt.WindowTitleHint | qc.Qt.WindowSystemMenuHint) self.setWindowTitle('Edit actor') self.setMinimumWidth(500) self.flow_data = flow_data self.mapper = q.QDataWidgetMapper(self) self.mapper.setSubmitPolicy(q.QDataWidgetMapper.ManualSubmit) self.mapper.setModel(flow_data.actor_model) self.initWidgets(idx) self.initLayout() self.connectWidgets() self.mapper.setCurrentIndex(idx) self.prev_identifier = ActorIdentifier(self.name_edit.text(), self.sub_name_edit.text())
def __init__(self, parent=None, flags=Qt.Window): super(MainWindow, self).__init__(parent, flags) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.data_mapper = QtWidgets.QDataWidgetMapper() self.model = PinModel(PIN_LIST) self.current_model_index = None # Set the model to data mapper and to list view self.data_mapper.setModel(self.model) self.ui.listView.setModel(self.model) # Set mapping for data mapper self.data_mapper.addMapping(self.ui.lineEdit_name, 0) self.data_mapper.addMapping(self.ui.comboBox_type, 1) self.data_mapper.addMapping(self.ui.comboBox_mode, 2) self.data_mapper.toFirst() # When list view's current index changes then set_selection is called self.ui.listView.selectionModel().currentChanged.connect( self.set_selection) # Instantiate the others controllers and add them to the layout self.license_controller = LicenseController() self.digital_input_controller = DigitalInputController(self) self.digital_output_controller = DigitalOutputController( self.model, self) self.pwm_controller = PulseWidthModulationController(self.model, self) self.ui.layout_values.addWidget(self.digital_input_controller) self.ui.layout_values.addWidget(self.digital_output_controller) self.ui.layout_values.addWidget(self.pwm_controller) # Set slots for combo boxes signals and button enable self.ui.comboBox_type.currentTextChanged.connect(self.on_type_changed) self.ui.comboBox_mode.currentTextChanged.connect(self.on_mode_changed) self.ui.button_enable.clicked.connect(self.on_button_enable) # Set slots for actions triggers signals self.ui.action_exit.triggered.connect(QtWidgets.qApp.quit) self.ui.action_license.triggered.connect(self.license_controller.show) self.ui.action_about.triggered.connect(self.on_action_about) self.ui.action_load.triggered.connect(self.on_action_load) self.ui.action_save.triggered.connect(self.on_action_save)
def __init__(self): super().__init__() self.mapper = QtWidgets.QDataWidgetMapper() hbox = QtWidgets.QHBoxLayout() self.setLayout(hbox) self._val = 0 self._display_digits = 3 self._display_scientific = False self.ui_name = QtWidgets.QLabel('unknown') self.ui_val = QtWidgets.QLabel('?') self.ui_units = QtWidgets.QLabel('') hbox.addWidget(self.ui_name) hbox.addWidget(QtWidgets.QLabel(': ')) hbox.addWidget(self.ui_val) hbox.addWidget(self.ui_units) hbox.addStretch(1)
def __init__(self, parent=None): super().__init__(parent) self.label = QtWidgets.QLabel() self.button_left = QtWidgets.QPushButton('<') self.button_right = QtWidgets.QPushButton('>') blayout = QtWidgets.QHBoxLayout() blayout.addWidget(self.button_left) blayout.addWidget(self.button_right) layout = QtWidgets.QVBoxLayout(self) layout.addWidget(self.label) layout.addLayout(blayout) self.mapper = QtWidgets.QDataWidgetMapper(self) self.db = create_db() self.model = QSqlQueryModel(self) self.model.setQuery('SELECT * FROM test') self.mapper.setModel(self.model) self.mapper.addMapping(self.label, 0, b'text') self.mapper.toFirst() self.button_left.clicked.connect(self.mapper.toPrevious) self.button_right.clicked.connect(self.mapper.toNext)
def __init__(self, parent, master, *args, **kwargs): super().__init__(parent, *args, **kwargs) self._actions = [] self.master = master vbox = qt.QVBoxLayout(self) vbox.setContentsMargins(0, 0, 0, 0) frame = qt.QGroupBox('Details') vbox.addWidget(frame) labels = qt.QFormLayout(frame) mapper = qt.QDataWidgetMapper(self) mapper.setModel(master.model()) col_titles = {'FromAlias': 'From', 'ToAlias': 'To'} for text in ('FromAlias', 'ToAlias', 'Title', 'Date', 'IPFS', 'Hash'): left = qt.QLabel(col_titles.get(text, text) + ':') right = qt.QLabel('') right.setTextInteractionFlags(Qt.TextSelectableByMouse) labels.addRow(left, right) section = mapper.model().findColumn(text) if section is not None: mapper.addMapping(right, section, b'text') master.selectionModel().currentRowChanged.connect( mapper.setCurrentModelIndex) docs_tree = qt.QTreeView() docs_tree.setModel(master.model().document_model) vbox.addWidget(docs_tree) master.selectionModel().currentRowChanged.connect( master.model().setCurrentDocumentBatch) self.initContextMenu(docs_tree)
def __init__(self, parent=None): super(TransformEditor, self).__init__(parent) self.setupUi(self) self._dataWrapper = QtWidgets.QDataWidgetMapper() self._dataWrapper.setItemDelegate(TransformDelegate()) self.show()
def __init__(self, parent=None): super(obj3dBase, self).__init__(parent) self.setupUi(self) self.show() self._dataWrapper = QtWidgets.QDataWidgetMapper()
def __init__(self, parent=None): super(RoadView, self).__init__(parent) self.setupUi(self) self.mapper = QtWidgets.QDataWidgetMapper(self)
def __init__(self, parent=None): super().__init__() self.parent = parent self.cfg = parent.cfg self.state = mesoSPIM_StateSingleton() loadUi('gui/mesoSPIM_AcquisitionManagerWindow.ui', self) self.setWindowTitle('mesoSPIM Acquisition Manager') self.MoveUpButton.clicked.connect(self.move_selected_row_up) self.MoveDownButton.clicked.connect(self.move_selected_row_down) ''' Parent Enable / Disable GUI''' self.parent.sig_enable_gui.connect(lambda boolean: self.setEnabled(boolean)) self.statusBar = QtWidgets.QStatusBar() ''' Setting the model up ''' self.model = AcquisitionModel() self.table.setModel(self.model) self.model.dataChanged.connect(self.set_state) self.model.dataChanged.connect(self.update_acquisition_time_prediction) ''' Table selection behavior ''' self.table.setSelectionBehavior(self.table.SelectRows) self.table.setSelectionMode(self.table.ExtendedSelection) self.table.setDragDropMode(self.table.InternalMove) self.table.setDragDropOverwriteMode(False) self.table.setDragEnabled(True) self.table.setAcceptDrops(True) self.table.setDropIndicatorShown(True) self.table.setSortingEnabled(True) self.set_item_delegates() ''' Set our custom style - this draws the drop indicator across the whole row ''' self.table.setStyle(MyStyle()) self.selection_model = self.table.selectionModel() self.selection_mapper = QtWidgets.QDataWidgetMapper() self.AddButton.clicked.connect(self.add_row) self.DeleteButton.clicked.connect(self.delete_row) self.CopyButton.clicked.connect(self.copy_row) self.SaveButton.clicked.connect(self.save_table) self.LoadButton.clicked.connect(self.load_table) self.MarkCurrentXYButton.clicked.connect(self.mark_current_xy_position) self.MarkCurrentFocusButton.clicked.connect(self.mark_current_focus) self.MarkCurrentRotationButton.clicked.connect(self.mark_current_rotation) self.MarkCurrentStateButton.clicked.connect(self.mark_current_state) self.MarkCurrentETLParametersButton.clicked.connect(self.mark_current_etl_parameters) self.PreviewSelectionButton.clicked.connect(self.preview_acquisition) self.TilingWizardButton.clicked.connect(self.run_tiling_wizard) self.FilenameWizardButton.clicked.connect(self.generate_filenames) self.FocusTrackingWizardButton.clicked.connect(self.run_focus_tracking_wizard) self.ImageProcessingWizardButton.clicked.connect(self.run_image_processing_wizard) self.DeleteAllButton.clicked.connect(self.delete_all_rows) # self.SetRotationPointButton.clicked.connect(lambda bool: self.set_rotation_point() if bool is True else self.delete_rotation_point()) self.SetFoldersButton.clicked.connect(self.set_folder_names) logger.info('Thread ID at Startup: '+str(int(QtCore.QThread.currentThreadId()))) self.selection_model.selectionChanged.connect(self.selected_row_changed) ''' Display initial time prediction ''' self.update_acquisition_time_prediction() '''XML writing testcode'''
def __init__(self, parent=None, in_designer=False): super().__init__(parent=parent) self.in_designer = in_designer self.ui = epyqlib.nvview_ui.Ui_Form() self.ui.setupUi(self) self.ui.module_to_nv_button.clicked.connect(self.module_to_nv) self.ui.write_to_module_button.clicked.connect(self.write_to_module) self.ui.read_from_module_button.clicked.connect(self.read_from_module) self.ui.write_to_file_button.clicked.connect(self.write_to_file) self.ui.write_to_value_set_file_button.clicked.connect( self.write_to_value_set_file, ) self.ui.write_to_overlay_value_set_file_button.clicked.connect( self.write_to_overlay_value_set_file, ) self.ui.write_to_sparse_value_set_file_button.clicked.connect( self.write_to_sparse_value_set_file, ) self.ui.read_from_file_button.clicked.connect(self.read_from_file) self.ui.read_from_value_set_file_button.clicked.connect( self.read_from_value_set_file, ) self.ui.write_to_auto_parameters_button.clicked.connect( self.write_to_auto_parameters, ) view = self.ui.tree_view view.setContextMenuPolicy(Qt.CustomContextMenu) view.customContextMenuRequested.connect(self.context_menu) view.header().setContextMenuPolicy(Qt.CustomContextMenu) view.header().customContextMenuRequested.connect( self.header_context_menu, ) view.setSelectionBehavior(view.SelectItems) view.setSelectionMode(view.ExtendedSelection) view.row_columns = { epyqlib.nv.Columns.indexes.name, } self.meta_columns = { getattr(epyqlib.nv.Columns.indexes, meta.name) for meta in epyqlib.nv.MetaEnum } no_update_columns = set(epyqlib.nv.Columns.indexes) no_update_columns -= { epyqlib.nv.Columns.indexes.name, } no_update_columns -= self.meta_columns no_update_columns.remove(epyqlib.nv.Columns.indexes.scratch) view.no_update_columns = no_update_columns self.resize_columns = epyqlib.nv.Columns( name=True, comment=True, ) self.progress = None self.ui.tree_view.clicked.connect(self.clicked) self.ui.tree_view.header().setMinimumSectionSize(0) self.ui.searchbox.connect_to_view( view=self.ui.tree_view, column=epyqlib.nv.Columns.indexes.name, ) self.can_contents = None self.can_suffix = None self.set_access_level_signal_path(path=None) self.password_mapper = QtWidgets.QDataWidgetMapper() self.password_mapper.setSubmitPolicy( QtWidgets.QDataWidgetMapper.ManualSubmit, ) self.access_level_mapper = QtWidgets.QDataWidgetMapper() self.access_level_mapper.setSubmitPolicy( QtWidgets.QDataWidgetMapper.ManualSubmit, ) self.ui.access_level_password.setPlaceholderText("Access Code...") self.metas = None self.set_metas(()) self.resize_modes = None self.device = None self.diff_proxy = None self.ui.diff_reference_column.currentIndexChanged[int].connect( self.diff_reference_column_changed, ) self.ui.auto_read.stateChanged.connect(lambda state: ( self.auto_read_checked.emit() if state == Qt.Checked else self.auto_read_unchecked.emit())) self.auth_key = None
def __init__(self, model, parent=None): super(ActiveBreathingPhrase, self).__init__(parent) self.model = model self.mapper = QtWidgets.QDataWidgetMapper(self) self._init_ui()
def initUI(self, Macro_Dialog): Macro_Dialog.setObjectName("Macro_Dialog") Macro_Dialog.resize(600, 675) self.macro_title = QtWidgets.QLineEdit(Macro_Dialog) self.macro_title.setGeometry(QtCore.QRect(100, 20, 400, 30)) self.macro_title.setMaxLength(75) self.macro_title.setAlignment(QtCore.Qt.AlignCenter) self.macro_title.setObjectName("macro_title") self.macro_description = QtWidgets.QTextEdit(Macro_Dialog) self.macro_description.setGeometry(QtCore.QRect(20, 70, 560, 100)) self.macro_description.setObjectName("macro_description") self.Label_sheets = QtWidgets.QLabel(Macro_Dialog) self.Label_sheets.setGeometry(QtCore.QRect(45, 210, 210, 20)) self.Label_sheets.setAlignment(QtCore.Qt.AlignCenter) self.Label_sheets.setObjectName("Label_sheets") self.Label_cell_entries = QtWidgets.QLabel(Macro_Dialog) self.Label_cell_entries.setGeometry(QtCore.QRect(345, 210, 210, 20)) self.Label_cell_entries.setAlignment(QtCore.Qt.AlignCenter) self.Label_cell_entries.setObjectName("Label_cell_entries") self.tableWidget_sheets = QtWidgets.QTableWidget(Macro_Dialog) self.tableWidget_sheets.setGeometry(QtCore.QRect(45, 240, 218, 320)) self.tableWidget_sheets.setEditTriggers( QtWidgets.QAbstractItemView.DoubleClicked | QtWidgets.QAbstractItemView.AnyKeyPressed) self.tableWidget_sheets.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.tableWidget_sheets.setColumnCount(2) self.tableWidget_sheets.setObjectName("tableWidget_sheets") self.tableWidget_sheets.setRowCount( 0) # << Set to 0 myself. Use commented code later if needed item = QtWidgets.QTableWidgetItem() self.tableWidget_sheets.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.tableWidget_sheets.setHorizontalHeaderItem(1, item) self.tableWidget_cells = QtWidgets.QTableWidget(Macro_Dialog) self.tableWidget_cells.setGeometry(QtCore.QRect(345, 240, 218, 320)) self.tableWidget_cells.setEditTriggers( QtWidgets.QAbstractItemView.DoubleClicked | QtWidgets.QAbstractItemView.AnyKeyPressed) self.tableWidget_cells.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.tableWidget_cells.setObjectName("tableWidget_cell_entries") self.tableWidget_cells.setColumnCount(2) self.tableWidget_cells.setRowCount( 0) # << Set to 0 myself. Use commented code later if needed item = QtWidgets.QTableWidgetItem() self.tableWidget_cells.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.tableWidget_cells.setHorizontalHeaderItem(1, item) if self.model: # If this window was opened with "Edit" button (Not "New" button) self.mapper = QtWidgets.QDataWidgetMapper( self, submitPolicy=QtWidgets.QDataWidgetMapper.ManualSubmit) self.mapper.setModel(self.model) self.mapper.addMapping(self.macro_title, self.model.record().indexOf("title")) self.mapper.addMapping(self.macro_description, self.model.record().indexOf("description")) self.mapper.setCurrentIndex(self.index) self.Button_del_sheets = QtWidgets.QPushButton(Macro_Dialog) self.Button_del_sheets.setGeometry(QtCore.QRect(90, 570, 50, 30)) self.Button_del_sheets.setAutoDefault(False) self.Button_del_sheets.setObjectName("Button_del_sheets") self.Button_del_sheets.clicked.connect(lambda: self.remove_row( self.tableWidget_sheets)) # Del Sheet entry self.Button_add_sheets = QtWidgets.QPushButton(Macro_Dialog) self.Button_add_sheets.setGeometry(QtCore.QRect(170, 570, 50, 30)) self.Button_add_sheets.setAutoDefault(False) self.Button_add_sheets.setObjectName("Button_add_sheets") self.Button_add_sheets.clicked.connect(lambda: self.add_row( self.tableWidget_sheets)) # Add entry to sheet table self.Button_del_cell_entries = QtWidgets.QPushButton(Macro_Dialog) self.Button_del_cell_entries.setGeometry(QtCore.QRect( 390, 570, 50, 30)) self.Button_del_cell_entries.setAutoDefault(False) self.Button_del_cell_entries.setObjectName("Button_del_cell_entries") self.Button_del_cell_entries.clicked.connect( lambda: self.remove_row(self.tableWidget_cells)) # Del cell entry self.Button_add_cell_entries = QtWidgets.QPushButton(Macro_Dialog) self.Button_add_cell_entries.setGeometry(QtCore.QRect( 470, 570, 50, 30)) self.Button_add_cell_entries.setAutoDefault(False) self.Button_add_cell_entries.setObjectName("Button_add_cell_entries") self.Button_add_cell_entries.clicked.connect(lambda: self.add_row( self.tableWidget_cells)) # Add entry to cell entry table self.Button_cancel = QtWidgets.QPushButton(Macro_Dialog) self.Button_cancel.setGeometry(QtCore.QRect(190, 630, 100, 30)) self.Button_cancel.setAutoDefault(False) self.Button_cancel.setObjectName("Button_cancel") self.Button_cancel.clicked.connect( lambda: Macro_Dialog.close()) # << Exit Dialog self.Button_save = QtWidgets.QPushButton(Macro_Dialog) self.Button_save.setGeometry(QtCore.QRect(310, 630, 100, 30)) self.Button_save.setObjectName("Button_save") self.Button_save.clicked.connect( self.accept) # << Save/Update Dialog to sqlite if self.model: self.Button_save.clicked.connect(self.mapper.submit) self.retranslateUi(Macro_Dialog) QtCore.QMetaObject.connectSlotsByName(Macro_Dialog)
def __init__(self, db_name="Media-Database.db", parent=None): super(MDB, self).__init__(parent) # ===== Database ===== self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE") self.db.setDatabaseName(db_name) if not self.db.open(): QtWidgets.QMessageBox.warning( self, "Media Database", "Error connecting to database:\n{}".format( self.db.lastError().text()), QtWidgets.QMessageBox.Ok) sys.exit(1) if self.db.driver().hasFeature(QtSql.QSqlDriver.Transactions): logger.info("Database driver can commit and rollback.") self.create_tables() # ===== Create Models ===== # main entries model self.model_media = QtSql.QSqlTableModel(self) self.model_media.setTable("media") self.model_media.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) self.model_media.sort( 1, QtCore.Qt.AscendingOrder ) # Column 1 is the 'title' column of the 'media' table. self.model_media.select() # proxy model for search feature. self.model_media_proxy = QtCore.QSortFilterProxyModel(self) self.model_media_proxy.setSourceModel(self.model_media) self.model_media_proxy.sort( 1, QtCore.Qt.AscendingOrder ) # Column 1 is the 'title' column of the 'media' table. self.model_media_proxy.setFilterKeyColumn(1) self.model_media_proxy.setFilterCaseSensitivity( QtCore.Qt.CaseInsensitive) # genres model self.model_genres = QtSql.QSqlTableModel(self) self.model_genres.setTable("genres") self.model_genres.sort( 1, QtCore.Qt.AscendingOrder ) # Column 1 is the 'genre' column of the 'genres' table. self.model_genres.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) self.model_genres.select() # media types model self.model_types = QtSql.QSqlTableModel(self) self.model_types.setTable("media_types") self.model_types.sort( 1, QtCore.Qt.AscendingOrder ) # Column 1 is the 'title' column of the 'media' table. self.model_types.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) self.model_types.select() # ===== Create the UI ===== self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.lst_media_list.setModel(self.model_media_proxy) self.ui.lst_media_list.setModelColumn( 1) # Column 1 is the 'title' column of the 'media' table. self.ui.cb_genre.setModel(self.model_genres) self.ui.cb_genre.setModelColumn( 1) # Column 1 is the 'genre' column of the 'genres' table. self.ui.cb_media_type.setModel(self.model_types) self.ui.cb_media_type.setModelColumn( 1) # Column 1 is the 'type' column of the 'media_types' table. # List view selection model self.selection = self.ui.lst_media_list.selectionModel() # Sub-Windows self.ui_edit_genres = MDBEditGenres( self, self.model_genres) # Give the genres model to the pop-up dialog. self.ui_edit_types = MDBEditTypes( self, self.model_types) # Give the types model to the pop-up dialog. self.ui_converter = MDBConverter(self) # ===== Create Widget Mapper ===== self.widget_mapper = QtWidgets.QDataWidgetMapper(self) self.widget_mapper.setModel(self.model_media_proxy) self.widget_mapper.setSubmitPolicy( QtWidgets.QDataWidgetMapper.AutoSubmit) self.widget_mapper.addMapping(self.ui.le_title, 1) # 'title' column text self.widget_mapper.addMapping(self.ui.te_description, 2) # 'description' column text self.widget_mapper.addMapping(self.ui.le_age_rating, 3) # 'age_rating' column text self.widget_mapper.addMapping(self.ui.cb_genre, 4) # 'genre' column text self.widget_mapper.addMapping(self.ui.sb_season, 5) # 'season' column int self.widget_mapper.addMapping(self.ui.sb_disc_count, 6) # 'disc_count' column int self.widget_mapper.addMapping(self.ui.cb_media_type, 7) # 'media_type' column text self.widget_mapper.addMapping(self.ui.sb_play_time, 8) # 'play_time' column int self.widget_mapper.addMapping(self.ui.te_notes, 9) # 'notes' column text self.widget_mapper.toFirst() # ===== Display Entry Count ===== self.count_entries_by_type() # ===== Create Signal/Slots ===== logger.info("Creating Qt Signal/Slot Connections...") # Search Options: self.ui.rb_title.toggled.connect(lambda: self.model_media_proxy. setFilterKeyColumn(1)) # Title Column self.ui.rb_description.toggled.connect( lambda: self.model_media_proxy.setFilterKeyColumn( 2)) # Description Column self.ui.rb_genre.toggled.connect(lambda: self.model_media_proxy. setFilterKeyColumn(4)) # Genre Column self.ui.rb_notes.toggled.connect(lambda: self.model_media_proxy. setFilterKeyColumn(9)) # Notes Column # File Menu: self.ui.actionQuit.triggered.connect(self.closeEvent) # View Menu: self.ui.actionClear_UI.triggered.connect(self.clear_ui) # Data Menu: self.ui.actionAdd_Entry.triggered.connect(self.add_entry) self.ui.actionDelete_Entry.triggered.connect(self.delete_entry) self.ui.actionEdit_Genres.triggered.connect( self.show_edit_genres_window) # self.ui.actionConvert_Genres.triggered.connect() self.ui.actionEdit_Media_Types.triggered.connect( self.show_edit_types_window) # self.ui.actionConvert_Types.triggered.connect() # Help Menu: self.ui.actionAbout.triggered.connect( lambda: QtWidgets.QMessageBox.information( self, f"About MDB {__version__}", f"Media Database created by {__author__}\nVersion: {__version__}", QtWidgets.QMessageBox.Ok)) # Other UI Elements: self.ui.le_search_bar.textChanged.connect( self.model_media_proxy.setFilterRegExp) self.ui.actionDisplay_by_Type.triggered.connect( lambda: self.display_count(self.ui.actionDisplay_by_Type)) self.ui.actionDisplay_by_Genre.triggered.connect( lambda: self.display_count(self.ui.actionDisplay_by_Genre)) self.selection.selectionChanged.connect(self.display_selected_entry) logger.info("Qt Connections Done.")