class MainWindow(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) # Main Window Toolbar self.tool_bar = QToolBar() self.addToolBar(QtCore.Qt.TopToolBarArea, self.tool_bar) self.database_open = QAction(self) database_open_ico = self.style().standardIcon(QStyle.SP_DirOpenIcon) self.database_open.setIcon(database_open_ico) self.database_open.setToolTip('Выбрать базу данных') self.database_open.triggered.connect(self.on_database_open) self.tool_bar.addAction(self.database_open) # Central widget - query table self.tdw = QDockWidget() self.tdw.setFeatures(self.tdw.NoDockWidgetFeatures) self.tdw_grid = QGridLayout() self.tdw_grid.setColumnStretch(2, 1) 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) # Bottom widget self.serv_mes = QDockWidget() self.serv_mes.setFixedSize(1400, 80) self.serv_mes.setFeatures(self.serv_mes.NoDockWidgetFeatures) self.listWidget = QListWidget() # Function of form opening def on_database_open(self): db_choose_win = DBChooseClass(self) db_choose_win.setWindowTitle('Форма выбора режима работы с программой') db_choose_win.show() screen = QDesktopWidget().screenGeometry() x = int((screen.width() - db_choose_win.width()) / 2) y = int((screen.height() - db_choose_win.height()) / 2) db_choose_win.move(x, y)
class MainWindowClass(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.interface_lng_val = 'Russian' if self.interface_lng_val == 'Russian': self.setWindowTitle("Графический интерфейс программы OpenFOAM") elif self.interface_lng_val == 'English': self.setWindowTitle("OpenFOAM_decompose_GUI") # Базовые переменные self.full_dir = '' self.prj_name = '' self.con = '' self.lock_bool = False self.application = '' self.object_edit_txt = '' # ---------------------------Панель управления подготовкой задачи МСС----------------------------- # self.proj_open = QAction(self) self.proj_open.setEnabled(True) proj_ico = self.style().standardIcon(QStyle.SP_ArrowUp) self.proj_open.setIcon(proj_ico) if self.interface_lng_val == 'Russian': self.proj_open.setToolTip('Открыть проект') elif self.interface_lng_val == 'English': self.proj_open.setToolTip('Open the project') self.lng_chs = QAction(self) self.lng_chs.setEnabled(True) lng_chs_ico = self.style().standardIcon( QStyle.SP_FileDialogDetailedView) self.lng_chs.setIcon(lng_chs_ico) if self.interface_lng_val == 'Russian': self.lng_chs.setToolTip('Выбрать язык интерфейса программы') elif self.interface_lng_val == 'English': self.lng_chs.setToolTip('Select the interface language') self.file_open = QAction(self) self.file_open.setEnabled(False) file_open_ico = self.style().standardIcon(QStyle.SP_FileIcon) self.file_open.setIcon(file_open_ico) if self.interface_lng_val == 'Russian': self.file_open.setToolTip( 'Открыть форму создания служебного файла для директории 0') elif self.interface_lng_val == 'English': self.file_open.setToolTip( 'Open the form for creating the service file for the directory 0' ) self.toolBar_1 = QToolBar("MyToolBar") self.toolBar_1.addAction(self.proj_open) self.toolBar_1.addAction(self.lng_chs) self.toolBar_1.addAction(self.file_open) self.proj_open.triggered.connect( lambda: first_toolbar_functions_class.on_proj_open(self)) self.lng_chs.triggered.connect( lambda: first_toolbar_functions_class.on_lng_chs(self)) self.file_open.triggered.connect( lambda: first_toolbar_functions_class.on_0_files_window_chs(self)) self.addToolBar(self.toolBar_1) ###----------------------Панель управления подготовкой РС--------------------------### self.msh_open = QAction(self) self.msh_open.setEnabled(False) msh_ico = self.style().standardIcon(QStyle.SP_FileDialogNewFolder) self.msh_open.setIcon(msh_ico) if self.interface_lng_val == 'Russian': self.msh_open.setToolTip('Открыть форму выбора расчетной сетки') elif self.interface_lng_val == 'English': self.msh_open.setToolTip('Open the mesh selection form') self.msh_run = QAction(self) self.msh_run.setEnabled(False) msh_ico = self.style().standardIcon(QStyle.SP_ArrowRight) self.msh_run.setIcon(msh_ico) if self.interface_lng_val == 'Russian': self.msh_run.setToolTip('Выполнить генерацию расчетной сетки') elif self.interface_lng_val == 'English': self.msh_run.setToolTip('Make the mesh generation') self.msh_visual = QAction(self) self.msh_visual.setEnabled(False) msh_visual_ico = self.style().standardIcon(QStyle.SP_MediaSeekForward) self.msh_visual.setIcon(msh_visual_ico) if self.interface_lng_val == 'Russian': self.msh_visual.setToolTip( 'Выполнить визуализацию расчетной сетки') elif self.interface_lng_val == 'English': self.msh_visual.setToolTip('Make the mesh visualization') self.toolBar_2 = QToolBar() self.toolBar_2.addAction(self.msh_open) self.toolBar_2.addAction(self.msh_run) self.toolBar_2.addAction(self.msh_visual) self.msh_open.triggered.connect( lambda: second_toolbar_functions_class.on_msh_open(self)) self.msh_run.triggered.connect( lambda: second_toolbar_functions_class.on_msh_run( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.msh_visual.triggered.connect( lambda: second_toolbar_functions_class.on_visual_msh_run( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.addToolBar(self.toolBar_2) self.insertToolBarBreak(self.toolBar_2) ###----------------------Панель управления решением задачи МСС--------------------------### self.solv_run = QAction(self) self.solv_run.setEnabled(False) solv_run_ico = self.style().standardIcon(QStyle.SP_DialogNoButton) self.solv_run.setIcon(solv_run_ico) if self.interface_lng_val == 'Russian': self.solv_run.setToolTip('Выполнить решение') elif self.interface_lng_val == 'English': self.solv_run.setToolTip('Run solution') self.solv_stop = QAction(self) self.solv_stop.setEnabled(False) close_ico = self.style().standardIcon(QStyle.SP_DockWidgetCloseButton) self.solv_stop.setIcon(close_ico) if self.interface_lng_val == 'Russian': self.solv_stop.setToolTip('Остановить процесс решения') elif self.interface_lng_val == 'English': self.solv_stop.setToolTip('Stop the solution process') self.solv_run_vis = QAction(self) self.solv_run_vis.setEnabled(False) solv_run_vis_ico = self.style().standardIcon(QStyle.SP_CommandLink) self.solv_run_vis.setIcon(solv_run_vis_ico) if self.interface_lng_val == 'Russian': self.solv_run_vis.setToolTip( 'Выполнить визуализацию результатов решения') elif self.interface_lng_val == 'English': self.solv_run_vis.setToolTip('Visualize the solution results') self.toolBar_3 = QToolBar() self.toolBar_3.addAction(self.solv_run) self.toolBar_3.addAction(self.solv_stop) self.toolBar_3.addAction(self.solv_run_vis) self.solv_run.triggered.connect( lambda: second_toolbar_functions_class.on_solv_run( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.solv_stop.triggered.connect( lambda: second_toolbar_functions_class.on_solv_stop( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.solv_run_vis.triggered.connect( lambda: second_toolbar_functions_class.on_solv_vis( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.addToolBar(self.toolBar_3) self.insertToolBarBreak(self.toolBar_3) ###----------------Верхний виджет с полным путем до файла сетки----------------### self.tdw = QDockWidget() self.tdw.setFixedSize(1400, 65) self.tdw.setFeatures(self.tdw.NoDockWidgetFeatures) self.tdw_grid = QGridLayout() self.tdw_grid.setColumnStretch(2, 1) 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.fsw = QDockWidget() self.fsw.setFeatures(self.fsw.NoDockWidgetFeatures) self.fsw_label = QLabel() self.fsw_label.setAlignment(QtCore.Qt.AlignCenter) self.fsw_grid = QGridLayout() self.fsw_grid.addWidget(self.fsw_label, 0, 0) self.fsw_frame = QFrame() self.fsw_frame.setFixedSize(200, 35) self.fsw_frame.setStyleSheet("background-color: honeydew;" "border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;") self.fsw_frame.setLayout(self.fsw_grid) if self.interface_lng_val == 'Russian': fs_lbl = "Файловая Cтруктура Проекта" elif self.interface_lng_val == 'English': fs_lbl = "File Structure of the Project" self.fsw_label.setText("<font color='SeaGreen'>" + fs_lbl + "</font>") self.fsw_label.setStyleSheet("border-style: none;" "font-size: 10pt;") self.fsw.setTitleBarWidget(self.fsw_frame) self.treeview = QTreeView() self.treeview.setFixedSize(200, 520) self.treeview.model = QtGui.QStandardItemModel() self.treeview.setModel(self.treeview.model) self.treeview.setColumnWidth(0, 100) self.treeview.setColumnHidden(1, True) self.treeview.setColumnHidden(2, True) self.treeview.setColumnHidden(3, True) self.treeview.header().hide() self.treeview.setItemsExpandable(False) self.treeview.clicked.connect(self.on_treeview_clicked) self.fsw.setWidget(self.treeview) ###-----------Правый виджет с формой вывода результатов генерации файлов-----------### self.cdw = QDockWidget() self.cdw.setFeatures(self.cdw.NoDockWidgetFeatures) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.cdw) self.cdw_grid = QGridLayout() self.cdw_frame = QFrame() self.cdw_frame.setFixedSize(495, 35) self.cdw_frame.setStyleSheet("border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;" "background-color: honeydew;") self.cdw_frame.setLayout(self.cdw_grid) self.outf_lbl = QLabel() self.outf_lbl.setAlignment(QtCore.Qt.AlignCenter) self.outf_lbl.setStyleSheet("border-style: none;" "font-size: 9pt;") self.cdw_grid.addWidget(self.outf_lbl, 0, 0) self.outf_edit = QTextEdit() self.outf_scroll = QScrollArea() self.outf_scroll.setWidgetResizable(True) self.outf_scroll.setWidget(self.outf_edit) self.outf_scroll.setFixedSize(495, 520) ###-----------------Центральный виджет с формой параметров---------------------### self.ffw = QDockWidget() self.ffw.setFeatures(self.ffw.NoDockWidgetFeatures) self.ffw_label = QLabel() self.ffw_label.setAlignment(QtCore.Qt.AlignCenter) self.ffw_grid = QGridLayout() self.ffw_grid.addWidget(self.ffw_label, 0, 0) self.ffw_frame = QFrame() self.ffw_frame.setFixedSize(693, 44) self.ffw_frame.setStyleSheet("border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;" "background-color: honeydew;") self.ffw_frame.setLayout(self.ffw_grid) ###------------------Нижний виджет со служебными сообщениями------------------### if self.interface_lng_val == 'Russian': self.serv_mes = QDockWidget("Служебные сообщения") elif self.interface_lng_val == 'English': self.serv_mes = QDockWidget("Service messages") self.serv_mes.setFixedSize(1400, 160) self.serv_mes.setFeatures(self.serv_mes.NoDockWidgetFeatures) self.listWidget = QListWidget() self.serv_mes.setWidget(self.listWidget) ###---------------------Функции, связанные с работой главного окна------------------------### # ...........................Функция клика по файлу из дерева......................... ###........................Функция открытия окна выбора интерфейса программы...................### # ...........................Функция клика по файлу из дерева......................... def on_treeview_clicked(self, index): global fileName indexItem = self.treeview.model.index(index.row(), 0, index.parent()) self.lock_bool = True self.file_name = self.treeview.model.itemFromIndex(indexItem).text() file_form_class.inp_file_form_func(self, self.file_name, self.con) file_name_title = file_form_class.out_file_name_func() self.clear_label = QLabel() if file_name_title != None: if file_name_title != 'md': #self.cdw.setWidget(self.clear_label) #self.cdw.setTitleBarWidget if os.path.exists(self.full_dir + '/system/' + file_name_title): outf = open(self.full_dir + '/system/' + file_name_title) data = outf.read() self.outf_edit.setText(data) outf.close() elif os.path.exists(self.full_dir + '/constant/' + file_name_title): outf = open(self.full_dir + '/constant/' + file_name_title) data = outf.read() self.outf_edit.setText(data) outf.close() elif os.path.exists(self.full_dir + '/0/' + file_name_title): outf = open(self.full_dir + '/0/' + file_name_title) data = outf.read() self.outf_edit.setText(data) outf.close() self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.cdw) self.cdw.setWidget(self.outf_scroll) #data = outf.read() if self.interface_lng_val == 'Russian': self.outf_lbl.setText("Файл " + "<font color='peru'>" + file_name_title + "</font>") elif self.interface_lng_val == 'English': self.outf_lbl.setText("<font color='peru'>" + file_name_title + "</font>" + " file") #self.outf_edit.setText(data) self.cdw.setTitleBarWidget(self.cdw_frame) #outf.close() self.setCentralWidget(self.ffw) file_form = file_form_class.out_file_form_func() self.ffw.setWidget(file_form) self.ffw.setTitleBarWidget(self.ffw_frame) if self.interface_lng_val == 'Russian': self.ffw_label.setText("Форма параметров файла: " + "<font color='peru'>" + file_name_title + "</font>") elif self.interface_lng_val == 'English': self.ffw_label.setText("<font color='peru'>" + file_name_title + "</font>" + " file parameters form") self.ffw_label.setStyleSheet("border-style: none;" "font-size: 9pt;") elif file_name_title == 'md': if self.interface_lng_val == 'Russian': msg_lbl = QLabel( '<span style="color:blue">Для создания расчетной сетки воспользуйтесь панелью инструментов</span>' ) elif self.interface_lng_val == 'English': msg_lbl = QLabel( '<span style="color:blue">To create a mesh use the toolbar.</span>' ) self.listWidget.clear() self.item = QListWidgetItem() self.listWidget.addItem(self.item) self.listWidget.setItemWidget(self.item, msg_lbl) else: self.ffw.setTitleBarWidget(self.clear_label) self.ffw.setWidget(self.clear_label) self.cdw.setWidget(self.clear_label) self.cdw.setTitleBarWidget(self.clear_label) # .........................Функция получения языка интерфейса.......................... def on_lng_get(self, interface_lng): global interface_lng_val self.interface_lng_val = interface_lng if self.interface_lng_val == 'Russian': self.setWindowTitle("Графический интерфейс программы OpenFOAM") self.proj_open.setToolTip('Открыть проект') self.msh_run.setToolTip('Выполнить генерацию расчетной сетки') self.msh_visual.setToolTip( 'Выполнить визуализацию расчетной сетки') self.lng_chs.setToolTip('Выбрать язык интерфейса программы') self.file_open.setToolTip( 'Открыть форму создания служебного файла для директории 0') self.msh_open.setToolTip('Открыть форму выбора расчетной сетки') self.solv_run.setToolTip('Выполнить решение') self.solv_stop.setToolTip('Остановить процесс решения') self.solv_run_vis.setToolTip( 'Выполнить визуализацию результатов решения') elif self.interface_lng_val == 'English': self.setWindowTitle("OpenFOAM_decompose_GUI") self.proj_open.setToolTip('Open the project') self.msh_run.setToolTip('Run mesh generation') self.msh_visual.setToolTip('Run mesh visualization') self.lng_chs.setToolTip( 'Select the interface language for the program') self.file_open.setToolTip( 'Open the form for creating the service file for the directory 0' ) self.msh_open.setToolTip('Open the mesh selection form') self.solv_run.setToolTip('Run solution') self.solv_stop.setToolTip('Stop the solution process') self.solv_run_vis.setToolTip('Visualize the solution results') # .........................Функция получения пути до директории.......................... def on_prj_path_get(self, prj_path, mesh_name_txt): global prj_path_val global mesh_name_txt_val global pp_dir prj_path_val = prj_path mesh_name_txt_val = mesh_name_txt pp_dir, pp_sys = os.path.split(prj_path_val) # .............................Функция получения типа сетки.............................. def on_mesh_type_get(self, pd_2): global msh_type msh_type = pd_2
class MainWindow(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) # Создаем панель инструментов tool_bar = QToolBar() # Добавляем панель инструментов в окно self.addToolBar(QtCore.Qt.TopToolBarArea, tool_bar) # Создаем кнопку для панели инструментов database_open = QAction(self) # Создаем иконку для кнопки database_open_ico = self.style().standardIcon(QStyle.SP_DirOpenIcon) # Устанавливаем иконку на кнопку database_open.setIcon(database_open_ico) # Устанавливаем подсказку на кнопку database_open.setToolTip('Выбрать базу данных') # Устанавливаем обработчик события нажатия на кнопку database_open.triggered.connect(self.on_database_open) # Добавляем кнопку на панель инструментов tool_bar.addAction(database_open) # Создаем верхний виджет главного окна # для выбора базы данных self.tdw = QDockWidget() # Отключаем свойства верхнего виджета (разворот, закрытие) self.tdw.setFeatures(self.tdw.NoDockWidgetFeatures) # Создаем сетку для элементов вернего виджета self.tdw_grid = QGridLayout() # Устанавливаем фактор растяжения для выравнивания содержимого виджета # по левому краю self.tdw_grid.setColumnStretch(2, 1) # Создаем фрейм для размещения сетки с элементами tdw_frame = QFrame() # Вызываем метод установки менеджера расположения # помещаем сетку во фрейм tdw_frame.setLayout(self.tdw_grid) # Помещаем фрейм в виджет self.tdw.setWidget(tdw_frame) # Создаем нижний виджет главного окна # для вывода служебных сообщений self.smdw = QDockWidget() # Устанавливаем размеры нижнего виджета self.smdw.setFixedSize(1400, 80) # Отключаем свойства нижнего виджета (разворот, закрытие) self.smdw.setFeatures(self.smdw.NoDockWidgetFeatures) # Создаем виджет-список self.smdw_lw = QListWidget() # Функция загрузки модального окна выбора базы данных def on_database_open(self): # Создаем экземпляр класса модального окна db_choose_win = db_choose_class(self) # Устанавливаем заголовок модального окна db_choose_win.setWindowTitle('Форма выбора базы данных') # Центрируем модальное окно # сначала отображаем окно print(db_choose_win) db_choose_win.show() # определяем геометрию экрана screen = QDesktopWidget().screenGeometry() # определяем координату x x = int((screen.width() - db_choose_win.width()) / 2) # определяем координату y y = int((screen.height() - db_choose_win.height()) / 2) # перемещаем окно (его левый верхний край в точку с координатами x,y) db_choose_win.move(x, y)
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 MainWindowClass(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.interface_lng_val = 'Russian' self.setWindowTitle("Графический интерфейс программы OpenFOAM") self.full_dir = '' self.prj_name = '' self.con = '' # ---------------------------Панель управления решением задачи МСС----------------------------- # self.proj_open = QAction(self) self.proj_open.setEnabled(True) proj_ico = self.style().standardIcon(QStyle.SP_ArrowUp) self.proj_open.setIcon(proj_ico) self.proj_open.setToolTip('Открыть проект') self.lng_chs = QAction(self) self.lng_chs.setEnabled(True) lng_chs_ico = self.style().standardIcon( QStyle.SP_FileDialogDetailedView) self.lng_chs.setIcon(lng_chs_ico) self.lng_chs.setToolTip('Выбрать язык интерфейса программы') self.toolBar_1 = QToolBar("MyToolBar") self.toolBar_1.addAction(self.proj_open) self.toolBar_1.addAction(self.lng_chs) self.proj_open.triggered.connect( lambda: first_toolbar_functions_class.on_proj_open(self)) self.addToolBar(self.toolBar_1) ###----------------------Панель управления подготовкой РС--------------------------### self.msh_open = QAction(self) self.msh_open.setEnabled(False) msh_ico = self.style().standardIcon(QStyle.SP_FileDialogNewFolder) self.msh_open.setIcon(msh_ico) self.msh_open.setToolTip('Открыть форму выбора расчетной сетки') self.msh_run = QAction(self) self.msh_run.setEnabled(False) msh_ico = self.style().standardIcon(QStyle.SP_ArrowRight) self.msh_run.setIcon(msh_ico) self.msh_run.setToolTip('Выполнить генерацию расчетной сетки') self.msh_visual = QAction(self) self.msh_visual.setEnabled(False) msh_visual_ico = self.style().standardIcon(QStyle.SP_MediaSeekForward) self.msh_visual.setIcon(msh_visual_ico) self.msh_visual.setToolTip('Выполнить визуализацию расчетной сетки') self.toolBar_2 = QToolBar() self.toolBar_2.addAction(self.msh_open) self.toolBar_2.addAction(self.msh_run) self.toolBar_2.addAction(self.msh_visual) self.msh_open.triggered.connect( lambda: second_toolbar_functions_class.on_msh_open(self)) self.msh_run.triggered.connect( lambda: second_toolbar_functions_class.on_msh_run( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.msh_visual.triggered.connect( lambda: second_toolbar_functions_class.on_visual_msh_run( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.addToolBar(self.toolBar_2) self.insertToolBarBreak(self.toolBar_2) ###----------------------Панель управления проведением стресс-анализа--------------------------### self.str_an_run = QAction(self) self.str_an_run.setEnabled(False) str_an_ico = self.style().standardIcon(QStyle.SP_CommandLink) self.str_an_run.setIcon(str_an_ico) self.str_an_run.setToolTip('Выполнить стресс-анализ') self.str_an_vis_run = QAction(self) self.str_an_vis_run.setEnabled(False) str_an_vis_ico = self.style().standardIcon(QStyle.SP_MediaPlay) self.str_an_vis_run.setIcon(str_an_vis_ico) self.str_an_vis_run.setToolTip( 'Выполнить визуализацию результатов стресс-анализ') self.toolBar_3 = QToolBar() self.toolBar_3.addAction(self.str_an_run) self.toolBar_3.addAction(self.str_an_vis_run) self.str_an_run.triggered.connect( lambda: second_toolbar_functions_class.on_str_an_run( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.str_an_vis_run.triggered.connect( lambda: second_toolbar_functions_class.on_visual_on_str_an_run( prj_path_val, mesh_name_txt_val, pp_dir, self, self. interface_lng_val, msh_type)) self.addToolBar(self.toolBar_3) self.insertToolBarBreak(self.toolBar_3) ###----------------Верхний виджет с полным путем до файла сетки----------------### self.tdw = QDockWidget() self.tdw.setFixedSize(1400, 65) self.tdw.setFeatures(self.tdw.NoDockWidgetFeatures) self.tdw_grid = QGridLayout() self.tdw_grid.setColumnStretch(2, 1) 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.fsw = QDockWidget() self.fsw.setFeatures(self.fsw.NoDockWidgetFeatures) self.fsw_label = QLabel() self.fsw_label.setAlignment(QtCore.Qt.AlignCenter) self.fsw_grid = QGridLayout() self.fsw_grid.addWidget(self.fsw_label, 0, 0) self.fsw_frame = QFrame() self.fsw_frame.setFixedSize(200, 35) self.fsw_frame.setStyleSheet("background-color: honeydew;" "border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;") self.fsw_frame.setLayout(self.fsw_grid) fs_lbl = "Файловая структура проекта" self.fsw_label.setText("<font color='SeaGreen'>" + fs_lbl + "</font>") self.fsw_label.setStyleSheet("border-style: none;" "font-size: 10pt;") self.fsw.setTitleBarWidget(self.fsw_frame) self.treeview = QTreeView() self.treeview.setFixedSize(200, 520) self.treeview.model = QtGui.QStandardItemModel() self.treeview.setModel(self.treeview.model) self.treeview.setColumnWidth(0, 100) self.treeview.setColumnHidden(1, True) self.treeview.setColumnHidden(2, True) self.treeview.setColumnHidden(3, True) self.treeview.header().hide() self.treeview.setItemsExpandable(False) self.treeview.clicked.connect(self.on_treeview_clicked) self.fsw.setWidget(self.treeview) ###-----------Правый виджет с формой вывода результатов генерации файлов-----------### self.cdw = QDockWidget() self.cdw.setFeatures(self.cdw.NoDockWidgetFeatures) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.cdw) self.cdw_grid = QGridLayout() self.cdw_frame = QFrame() self.cdw_frame.setFixedSize(495, 35) self.cdw_frame.setStyleSheet("border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;" "background-color: honeydew;") self.cdw_frame.setLayout(self.cdw_grid) self.outf_lbl = QLabel() self.outf_lbl.setAlignment(QtCore.Qt.AlignCenter) self.outf_lbl.setStyleSheet("border-style: none;" "font-size: 9pt;") self.cdw_grid.addWidget(self.outf_lbl, 0, 0) self.outf_edit = QTextEdit() self.outf_scroll = QScrollArea() self.outf_scroll.setWidgetResizable(True) self.outf_scroll.setWidget(self.outf_edit) self.outf_scroll.setFixedSize(495, 520) ###-----------------Центральный виджет с формой параметров---------------------### self.ffw = QDockWidget() self.ffw.setFeatures(self.ffw.NoDockWidgetFeatures) self.ffw_label = QLabel() self.ffw_label.setAlignment(QtCore.Qt.AlignCenter) self.ffw_grid = QGridLayout() self.ffw_grid.addWidget(self.ffw_label, 0, 0) self.ffw_frame = QFrame() self.ffw_frame.setFixedSize(693, 44) self.ffw_frame.setStyleSheet("border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;" "background-color: honeydew;") self.ffw_frame.setLayout(self.ffw_grid) ###------------------Нижний виджет со служебными сообщениями------------------### self.serv_mes = QDockWidget("Служебные сообщения") self.serv_mes.setFixedSize(1400, 160) self.serv_mes.setFeatures(self.serv_mes.NoDockWidgetFeatures) self.listWidget = QListWidget() self.serv_mes.setWidget(self.listWidget) ###---------------------Функции, связанные с работой главного окна------------------------### # ...........................Функция клика по файлу из дерева......................... ###........................Функция открытия окна выбора интерфейса программы...................### # ...........................Функция клика по файлу из дерева......................... def on_treeview_clicked(self, index): global fileName indexItem = self.treeview.model.index(index.row(), 0, index.parent()) file_name = self.treeview.model.itemFromIndex(indexItem).text() file_form_class.inp_file_form_func(self, file_name, self.con) file_name_title = file_form_class.out_file_name_func() self.clear_label = QLabel() if file_name_title != None: self.cdw.setWidget(self.clear_label) self.cdw.setTitleBarWidget(self.clear_label) self.setCentralWidget(self.ffw) file_form = file_form_class.out_file_form_func() self.ffw.setWidget(file_form) self.ffw.setTitleBarWidget(self.ffw_frame) self.ffw_label.setText("Форма параметров файла: " + "<font color='peru'>" + file_name_title + "</font>") self.ffw_label.setStyleSheet("border-style: none;" "font-size: 9pt;") else: self.ffw.setTitleBarWidget(self.clear_label) self.ffw.setWidget(self.clear_label) self.cdw.setWidget(self.clear_label) self.cdw.setTitleBarWidget(self.clear_label) if file_name_title == 'blockMeshDict' or file_name_title == 'snappyHexMeshDict': if self.interface_lng_val == 'Russian': msg_lbl = QLabel( '<span style="color:blue">Для создания расчетной сетки воспользуйтесь панелью инструментов</span>' ) elif self.interface_lng_val == 'English': msg_lbl = QLabel( '<span style="color:blue">For computational mesh generation use the toolbar</span>' ) self.listWidget.clear() self.item = QListWidgetItem() self.listWidget.addItem(self.item) self.listWidget.setItemWidget(self.item, msg_lbl) # .........................Функция получения языка интерфейса.......................... def on_lng_get(self, interface_lng): global interface_lng_val self.interface_lng_val = interface_lng if self.interface_lng_val == 'Russian': self.setWindowTitle("Генератор расчетных сеток") self.prj_open.setToolTip('Открыть проект') self.msh_run.setToolTip('Выполнить генерацию расчетной сетки') self.msh_visual.setToolTip( 'Выполнить визуализацию расчетной сетки') self.lng_chs.setToolTip('Выбрать язык интерфейса программы') elif self.interface_lng_val == 'English': self.setWindowTitle("Mesh generator") self.prj_open.setToolTip('Open project') self.msh_run.setToolTip('Run mesh generation') self.msh_visual.setToolTip('Run mesh vizualization') self.lng_chs.setToolTip( 'Select the interface language for the program') # .........................Функция получения пути до директории.......................... def on_prj_path_get(self, prj_path, mesh_name_txt): global prj_path_val global mesh_name_txt_val global pp_dir prj_path_val = prj_path mesh_name_txt_val = mesh_name_txt pp_dir, pp_sys = os.path.split(prj_path_val) # .............................Функция получения типа сетки.............................. def on_mesh_type_get(self, pd_2): global msh_type msh_type = pd_2