def init(self): self.pic = Picture(self) self.setCentralWidget(self.pic) self.panel = Panel(self.pic) self.dock = QDockWidget('info panel') self.dock.setWidget(self.panel) self.dock.setAllowedAreas(Qt.RightDockWidgetArea) self.addDockWidget(Qt.RightDockWidgetArea, self.dock) self.dock.setFeatures(QDockWidget.NoDockWidgetFeatures) self.dock.setFixedWidth(300) self.setWindowTitle('Untitled') dock = QDockWidget('command line', self) dock.setWidget(TwoLines()) dock.setAllowedAreas(Qt.BottomDockWidgetArea) self.addDockWidget(Qt.BottomDockWidgetArea, dock) dock.setFeatures(QDockWidget.NoDockWidgetFeatures) dock.setFixedHeight(60) dock.setFixedWidth(800) desktop = QApplication.desktop() self.setGeometry(300, 100, desktop.width(), desktop.height()) self.setFixedSize(1100, 705)
def history_subwindow(self): """ Summary of the function: ------------------------ (a) Defining the sub-window for showing executed docker containers history Parameters: ----------- :arg: None :return: A dock-widget object (sub-window) """ dock_widget = QDockWidget(self) # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("history")) dock_widget.setTitleBarWidget(QWidget(None)) dock_widget.setFloating(False) dock_widget.setFont(self.subdoc_font_customization()) dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures) dock_widget.setFixedHeight((int(self.screen_height * 3.9) // 10)) dock_widget.setFixedWidth(self.screen_width // 2) dock_widget.setStyleSheet(css_layout.dockwidget_layout) dock_widget.setAllowedAreas(Qt.RightDockWidgetArea) return dock_widget
def userstats_subwindow(self): """ Summary of the function: ------------------------ (a) Defining the sub-window for the User Statistics Parameters: ----------- :arg: None :return: A dock-widget object (sub-window) """ dock_widget = QDockWidget(self) # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("userstats")) dock_widget.setTitleBarWidget(QWidget(None)) dock_widget.setFloating(False) dock_widget.setFont(self.subdoc_font_customization()) dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures) dock_widget.setFixedHeight((int(self.screen_height * 3.4) // 10)) dock_widget.setFixedWidth(self.screen_width // 2) dock_widget.setStyleSheet(css_layout.dockwidget_layout) dock_widget.setAllowedAreas(Qt.TopDockWidgetArea) return dock_widget
def enqueued_containers_subwindow(self): """ Summary of the function: ------------------------ (a) Defining the sub-window for showing the enqueued containers information Parameters: ----------- :arg: None :return: A dock-widget object (sub-window) """ dock_widget = QDockWidget(self) # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("enqueued")) dock_widget.setTitleBarWidget(QWidget(None)) dock_widget.setFloating(False) dock_widget.setFont(self.subdoc_font_customization()) dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures) dock_widget.setFixedHeight( (int(self.screen_height * 4.6) // 10)) # 48% dock_widget.setFixedWidth(int(self.screen_width * 4.97) // 10) dock_widget.setStyleSheet(css_layout.dockwidget_layout) dock_widget.setAllowedAreas(Qt.RightDockWidgetArea) return dock_widget
def status_subwindow(self): """ Summary of the function: ------------------------ (a) Defining the sub-window for the priority queue status (b) Info would be blank for initial loading Parameters: ----------- :arg: None :return: A dock-widget object """ dock_widget = QDockWidget(self) # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("status")) dock_widget.setTitleBarWidget(QWidget(None)) dock_widget.setFont(self.subdoc_font_customization()) dock_widget.setFloating(False) dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures) dock_widget.setFixedWidth(self.screen_width // 2) dock_widget.setFixedHeight(int(self.screen_height * 2.1) // 10) # 25% of total height dock_widget.setStyleSheet(css_layout.dockwidget_layout) dock_widget.setAllowedAreas(Qt.LeftDockWidgetArea) return dock_widget
class CatalogMainWindow(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) # Структура главного окна # Создаем меню self.menu_bar = self.menuBar() # Создаем блоки меню # Блок меню 'Учет движения товаров' self.gma_menu = self.menu_bar.addMenu('Учет движения товаров') self.gma_menu.setEnabled(False) self.ro_open_btn = QAction(self) self.ro_open_btn.setText('Приходный ордер') self.wo_open_btn = QAction(self) self.wo_open_btn.setText('Расходный ордер') self.gma_menu.addAction(self.ro_open_btn) self.gma_menu.addAction(self.wo_open_btn) # Блок меню 'Отчеты' self.r_menu = self.menu_bar.addMenu('Отчеты') self.r_menu.setEnabled(False) self.tws_report_btn = QAction(self) self.tws_report_btn.setText('Операции с поставщиками') self.gis_report_btn = QAction(self) self.gis_report_btn.setText('Товары в наличии') self.r_menu.addAction(self.tws_report_btn) self.r_menu.addAction(self.gis_report_btn) # Блок меню 'Справочники' self.d_menu = self.menu_bar.addMenu('Справочники') self.d_menu.setEnabled(False) self.u_catalog_btn = QAction(self) self.u_catalog_btn.setText('Пользователи') self.r_catalog_btn = QAction(self) self.r_catalog_btn.setText('Права пользователей') self.c_catalog_btn = QAction(self) self.c_catalog_btn.setText('Категории') self.n_catalog_btn = QAction(self) self.n_catalog_btn.setText('Номенклатура товаров') self.un_catalog_btn = QAction(self) self.un_catalog_btn.setText('Единицы измерения') self.s_catalog_btn = QAction(self) self.s_catalog_btn.setText('Поставщики') self.p_catalog_btn = QAction(self) self.p_catalog_btn.setText('Должности') self.e_catalog_btn = QAction(self) self.e_catalog_btn.setText('Сотрудники') self.d_menu.addAction(self.u_catalog_btn) self.d_menu.addAction(self.r_catalog_btn) self.d_menu.addAction(self.c_catalog_btn) self.d_menu.addAction(self.n_catalog_btn) self.d_menu.addAction(self.un_catalog_btn) self.d_menu.addAction(self.s_catalog_btn) self.d_menu.addAction(self.p_catalog_btn) self.d_menu.addAction(self.e_catalog_btn) # Верхний виджет с полным путем до файла БД self.db_lbl = QLabel() self.db_lbl.setText('Путь до БД:') self.db_lbl.setStyleSheet("border-style: none;" "font-size: 10pt;") self.db_path_lbl = QLineEdit() self.db_path_lbl.setStyleSheet( "background-color: white;" "font-size: 10pt;" "color: green;") self.db_path_lbl.setFixedSize(700, 25) self.db_path_lbl.setEnabled(False) self.db_path_btn = QPushButton('...') self.db_path_btn.setFixedSize(25, 25) self.db_path_btn.setStyleSheet( "border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 5px;" "background-color: gainsboro;") self.db_path_btn.clicked.connect(self.on_db_path_btn_clicked) self.tdw = QDockWidget() self.tdw.setFixedHeight(65) self.tdw.setFeatures(self.tdw.NoDockWidgetFeatures) self.tdw_grid = QGridLayout() self.tdw_grid.setColumnStretch(3, 1) self.tdw_grid.addWidget(self.db_lbl) self.tdw_grid.addWidget(self.db_path_lbl) self.tdw_grid.addWidget(self.db_path_btn) self.tdw_frame = QFrame() self.tdw_frame.setStyleSheet( "background-color: ghostwhite;" "border-width: 0.5px;" "border-style: solid;" "border-color: silver;") self.tdw_frame.setLayout(self.tdw_grid) self.tdw.setWidget(self.tdw_frame) self.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.tdw) # Левый виджет с окном каталога продукции self.ldw = QDockWidget() self.ldw.setFixedSize(500, 570) self.ldw.setFeatures(self.ldw.NoDockWidgetFeatures) self.ldw_tree = QTreeView() self.ldw_tree.setFixedSize(500, 530) self.ldw_tree.setHeaderHidden(True) self.ldw_tree_model = QStandardItemModel() self.ldw_tree.setModel(self.ldw_tree_model) self.ldw_tree.clicked.connect(self.on_ldw_tree_clicked) self.outf_scroll = QScrollArea() self.outf_scroll.setWidget(self.ldw_tree) self.ldw.setWidget(self.outf_scroll) self.ldw.setWindowTitle("Каталог продукции") # Центральный виджет с карточкой товара self.cdw = QDockWidget() self.cdw.setFeatures(self.cdw.NoDockWidgetFeatures) #self.setCentralWidget(self.cdw) # Нижний виджет со служебными сообщениями self.smdw = QDockWidget() self.smdw.setFixedHeight(140) self.smdw.setFeatures(self.smdw.NoDockWidgetFeatures) self.sm_list_widget = QListWidget() self.smdw.setWidget(self.sm_list_widget) self.smdw.setWindowTitle("Служебные сообщения") # Функции главного окна # Функция выбора файла базы данных def on_db_path_btn_clicked(self): global db_path db_path, _filter = QFileDialog.getOpenFileName( None, "Open Data File", '.', "(*.sqlite)") self.db_path_lbl.setText(db_path) self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.ldw) self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, self.smdw) # Создаем все таблицы, которые нужны con = QtSql.QSqlDatabase.addDatabase('QSQLITE') con.setDatabaseName(db_path) con.open() if 'rules' not in con.tables(): query = QtSql.QSqlQuery() query.exec( "CREATE TABLE rules(rule STRING UNIQUE, description STRING)") r1 = "admin" d1 = "Доступны все опции" query.exec( "INSERT INTO rules(rule, description) VALUES ('%s','%s')" % (r1, d1)) r2 = "Кладовщик" d2 = "Доступны опции кладовщика" query.exec( "INSERT INTO rules(rule, description) VALUES ('%s','%s')" % (r2, d2)) if 'nomenclature' not in con.tables(): query = QtSql.QSqlQuery() query.exec( "CREATE TABLE nomenclature(item_numb INTEGER UNIQUE PRIMARY KEY NOT NULL, \ item_name STRING NOT NULL, item_unit STRING REFERENCES units (unit) NOT NULL, \ item_cat STRING REFERENCES categories (category) NOT NULL, item_img BLOB)") if 'units' not in con.tables(): query = QtSql.QSqlQuery() query.exec("CREATE TABLE units(unit STRING PRIMARY KEY \ UNIQUE NOT NULL)") if 'categories' not in con.tables(): query = QtSql.QSqlQuery() query.exec( "CREATE TABLE categories(category STRING PRIMARY KEY UNIQUE \ NOT NULL, description STRING NOT NULL)") # Создаем таблицу 'users', если не существует if 'users' not in con.tables(): query = QtSql.QSqlQuery() query.exec( "CREATE TABLE users(id_user INTEGER PRIMARY KEY AUTOINCREMENT \ unique NOT NULL, \ login STRING UNIQUE NOT NULL, password STRING NOT NULL, \ name TEXT NOT NULL, \ rules STRING REFERENCES rules (rule) NOT NULL)") if 'suppliers' not in con.tables(): query = QtSql.QSqlQuery() query.exec("CREATE TABLE suppliers( \ id_supplier INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT NOT NULL, \ supplier STRING UNIQUE NOT NULL, \ ownerchipform STRING NOT NULL, \ address STRING NOT NULL, \ phone STRING NOT NULL, \ email STRING NOT NULL \ )") if 'positions' not in con.tables(): query = QtSql.QSqlQuery() query.exec( "CREATE TABLE positions(position STRING PRIMARY KEY UNIQUE \ NOT NULL)") if 'employee' not in con.tables(): query = QtSql.QSqlQuery() query.exec( "CREATE TABLE employee(employee_id INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, \ fio STRING NOT NULL, \ position STRING REFERENCES positions (position) NOT NULL)") con.close() con = sqlite3.connect(db_path) cur = con.cursor() sql_cats_select = """\ SELECT DISTINCT item_cat FROM nomenclature """ cur.execute(sql_cats_select) arr = cur.fetchall() #print(arr) for cat in arr: sql_items_select = "SELECT item_name FROM nomenclature \ WHERE item_cat = ?" cur.execute(sql_items_select, [cat[0]]) items = cur.fetchall() #print(items) parent_item = QStandardItem(cat[0]) self.ldw_tree_model.appendRow(parent_item) j = 0 for item in items: child_item = QStandardItem(item[0]) parent_item.setChild(j, 0, child_item) j = j + 1 cur.close() con.close() self.gma_menu.setEnabled(True) self.r_menu.setEnabled(True) self.d_menu.setEnabled(True) self.ro_open_btn.triggered.connect( lambda: documents_class.on_ro_doc_btn( self, db_path)) self.wo_open_btn.triggered.connect( lambda: documents_class.on_wo_doc_btn( self, db_path)) self.gis_report_btn.triggered.connect( lambda: gis_report_class.on_gis_report_btn( self, db_path)) self.tws_report_btn.triggered.connect( lambda: tws_report_class.on_tws_report_btn( self, db_path)) self.u_catalog_btn.triggered.connect( lambda: directories_class.on_u_catalog_btn( self, db_path)) self.r_catalog_btn.triggered.connect( lambda: directories_class.on_r_catalog_btn( self, db_path)) self.c_catalog_btn.triggered.connect( lambda: directories_class.on_c_catalog_btn( self, db_path)) self.n_catalog_btn.triggered.connect( lambda: directories_class.on_n_catalog_btn( self, db_path)) self.un_catalog_btn.triggered.connect( lambda: directories_class.on_un_catalog_btn( self, db_path)) self.s_catalog_btn.triggered.connect( lambda: directories_class.on_s_catalog_btn( self, db_path)) self.p_catalog_btn.triggered.connect( lambda: directories_class.on_p_catalog_btn( self, db_path)) self.e_catalog_btn.triggered.connect( lambda: directories_class.on_e_catalog_btn( self, db_path)) # Функция выбора товара из каталога-дерева def on_ldw_tree_clicked(self): #print('вах') try: current_index = self.ldw_tree.currentIndex() file_name = self.ldw_tree.model().data(current_index) con = sqlite3.connect(db_path) cur = con.cursor() sql_item_select = "SELECT item_name FROM nomenclature \ WHERE item_name = ?" cur.execute(sql_item_select, [file_name]) item = cur.fetchone() if item: self.setCentralWidget(self.cdw) self.cdw.setWindowTitle("Карточка товара") item_card = item_card_class(self, db_path, file_name) self.cdw.setWidget(item_card) cur.close() con.close() except Exception as e: print('Ошибка:\n', traceback.format_exc())
class PlayerMainWindow(QMainWindow): def __init__(self, docid, parent=None): QMainWindow.__init__(self, parent=parent) self.docid = docid self._set_design(docid) QMetaObject.connectSlotsByName(self) # signals self.feature_tree.item_checked.connect(self.evaluate_checked_signal) # signals self.playback_frame.button_play.clicked.connect( self.player_frame.playback_play) self.playback_frame.button_pause.clicked.connect( self.player_frame.playback_pause) def _set_design(self, docid): self.resize(710, 550) self.central_widget = QWidget() layout = QVBoxLayout(self.central_widget) layout.setContentsMargins(2, 2, 2, 2) self.player_frame = PlayerFrame(recid=docid, parent=self) layout.addWidget(self.player_frame) self.setCentralWidget(self.central_widget) # dock widget for features self.dw_features = QDockWidget(self) self.dw_features.setTitleBarWidget(QWidget()) self.dw_features.setMinimumSize(QtCore.QSize(100, 130)) self.dw_features.setMaximumSize(QtCore.QSize(400, 524287)) self.dw_features.setFloating(False) self.dw_features.setFeatures( QtWidgets.QDockWidget.NoDockWidgetFeatures) self.dw_features.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea) self.dw_contents_features = QWidget() layout3 = QVBoxLayout(self.dw_contents_features) layout3.setContentsMargins(3, 3, 3, 3) layout2 = QVBoxLayout() self.feature_tree = FeatureTreeWidget(self.dw_contents_features) self.feature_tree.get_feature_list(docid=str(docid)) layout2.addWidget(self.feature_tree) layout3.addLayout(layout2) self.dw_features.setWidget(self.dw_contents_features) # dock widget for playlist self.dw_playlist = QDockWidget(self) self.dw_playlist.setTitleBarWidget(QWidget()) self.dw_playlist.setMinimumSize(QtCore.QSize(100, 130)) self.dw_playlist.setMaximumSize(QtCore.QSize(400, 524287)) self.dw_playlist.setFloating(False) self.dw_playlist.setFeatures( QtWidgets.QDockWidget.NoDockWidgetFeatures) self.dw_playlist.setAllowedAreas(QtCore.Qt.RightDockWidgetArea) self.dw_playlist_widgets = QWidget(self) layout5 = QVBoxLayout() self.playlist_table = TablePlaylist(self) collection = self.parent().dwc_left.listView_collections.currentItem() if collection: coll_name = collection.text() else: coll_name = 'MainCollection' self.coll_label = QLabel(coll_name, parent=self.dw_playlist_widgets) self._set_playlist_table(coll_name) layout5.addWidget(self.coll_label) layout5.addWidget(self.playlist_table) self.dw_playlist_widgets.setLayout(layout5) self.dw_playlist.setWidget(self.dw_playlist_widgets) # dock widget for playback self.dw_playback = QDockWidget(self.central_widget) self.dw_playback.setTitleBarWidget(QWidget()) self.dw_playback.setFixedHeight(90) self.dw_playback.setFloating(False) self.dw_playback.setAllowedAreas(QtCore.Qt.BottomDockWidgetArea) self.dw_playback.setFeatures( QtWidgets.QDockWidget.NoDockWidgetFeatures) dw_contents = QWidget() layout4 = QHBoxLayout(dw_contents) layout4.setContentsMargins(3, 3, 3, 3) self.playback_frame = PlaybackFrame(dw_contents) layout4.addWidget(self.playback_frame) self.dw_playback.setWidget(dw_contents) # add dock widgets to main window self.addDockWidget(Qt.LeftDockWidgetArea, self.dw_features) self.addDockWidget(Qt.RightDockWidgetArea, self.dw_playlist) self.addDockWidget(Qt.BottomDockWidgetArea, self.dw_playback) # signals self.playlist_table.item_changed.connect(self._item_changed) def _item_changed(self, mbid): print(mbid) def _set_playlist_table(self, coll_name): conn, c = database.connect() collection = database.fetch_collection(c, coll_name) self.playlist_table.add_recordings(collection) def __set_slider(self, len_audio): """ Sets the slider according to the given audio recording. :param len_audio: """ self.playback_frame.slider.setMinimum(0) self.playback_frame.slider.setMaximum(len_audio) self.playback_frame.slider.setTickInterval(10) self.playback_frame.slider.setSingleStep(1) def closeEvent(self, close_event): self.player_frame.closeEvent(close_event) def evaluate_checked_signal(self, type, item, is_checked): if item == 'pitch' or item == 'pitch_filtered': if is_checked: self.player_frame.plot_1d_data(type, item) else: self.player_frame.ts_widget.zoom_selection.clearPlots() self.player_frame.is_pitch_plotted = False self.player_frame.ts_widget.pitch_plot = None if hasattr(self.player_frame.ts_widget, 'hline_histogram'): self.player_frame.ts_widget.right_axis.removeItem( self.player_frame.ts_widget.hline_histogram) if item == 'tonic': if is_checked: self.player_frame.plot_1d_data(type, item) else: self.player_frame.ts_widget.remove_given_items( self.player_frame.ts_widget.zoom_selection, self.player_frame.ts_widget.tonic_lines) if item == 'notes': if is_checked: self.player_frame.add_1d_roi_items(type, item) self.player_frame.open_score_dialog(self.docid) else: self.player_frame.ts_widget.remove_given_items( self.player_frame.ts_widget.zoom_selection, self.player_frame.ts_widget.rois) self.player_frame.ts_widget.is_notes_added = False if item == 'metadata': if is_checked: m_path = self.get_feature_path(self.docid, type=type, item=item) metadata = json.load(open(m_path)) self.metadata_dialog = QDialog(self) layout = QVBoxLayout(self.metadata_dialog) mt = MetadataTreeMakam(metadata) layout.addWidget(mt) self.metadata_dialog.setLayout(layout) self.metadata_dialog.resize(500, 500) self.metadata_dialog.show() else: self.metadata_dialog.close() if item == 'sections': if is_checked: s_path = self.get_feature_path(self.docid, type=type, item=item) self.player_frame.add_sections_to_waveform(s_path) else: self.player_frame.waveform_widget.remove_sections() if item == 'pitch_distribution': if is_checked: s_path = self.get_feature_path(self.docid, type=type, item=item) vals, bins = load_pd(s_path) self.hist_dialog = HistogramDialog() self.hist_dialog.plot_histogram(bins, vals) self.hist_dialog.show() self.player_frame.hist_visible = True self.player_frame.update_histogram.connect( self.hist_dialog.update_histogram) else: self.hist_dialog.close() self.player_frame.hist_visible = False @staticmethod def get_feature_path(mbid, type, item): feature = type + '--' + item + '.json' path = os.path.join(DOCS_PATH, mbid, feature) return path