class MdiAplicacion(QMainWindow): contador = 0 def __init__(self): super().__init__() self.inicializarGui() def inicializarGui(self): self.setWindowTitle('Ventanas MDI - Multiple Document Interface') self.mdi = QMdiArea() self.setCentralWidget(self.mdi) mbr_principal = self.menuBar() mnu_archivo = mbr_principal.addMenu('Archivo') mni_agregar_ventana = QAction('Agregar ventana', self) mni_agregar_ventana.triggered.connect(self.agregar_ventana) mni_salir = QAction('Salir', self) mni_salir.setShortcut('Ctrl+Q') mni_salir.triggered.connect(self.close) mnu_archivo.addAction(mni_agregar_ventana) mnu_archivo.addAction(mni_salir) def agregar_ventana(self): MdiAplicacion.contador += 1 subventana = QMdiSubWindow() subventana.setWindowTitle(f'Subventana {MdiAplicacion.contador}') self.mdi.addSubWindow(subventana) subventana.show()
def finger_test(self): """DocString for finger_test""" #@todo: to be defined. dict_conf = self.conf.config_read() judge_test = int(dict_conf['Test']['test']) if not judge_test: return False try: if not self.window_graph_show.isClosed(): self.window_graph_show.close() except: pass try: if self.window_finger_test.isClosed(): judge = True else: judge = False except: judge = True finally: if judge: self.window_finger_test = WindowFingerTestLogic( self.conf, self.log) self.window_finger_test.startTimer(0) sub = QMdiSubWindow() sub.setWidget(self.window_finger_test) self.mdi = QMdiArea() self.setCentralWidget(self.mdi) self.mdi.addSubWindow(sub) self.signal_start_refresh.connect( self.window_finger_test.update_lcd) self.window_finger_test.show()
class App(QMainWindow): def __init__(self, parent=None): super(App, self).__init__(parent) self.title = "DndTool" self.width, self.height = 1280, 720 self.x, self.y = 100, 100 self.mdi = QMdiArea() self.menu = self.menuBar() self.status = self.statusBar() windows_menu = self.menu.addMenu('Windows') windows_menu.addAction("Players") windows_menu.addAction("Debug") windows_menu.triggered.connect(self.open_windows) self.setWindowTitle(self.title) self.setGeometry(self.x, self.y, self.width, self.height) self.setCentralWidget(self.mdi) self.show() def open_windows(self, action): if action.text() == "Players": sub = PlayersSubWindow() self.mdi.addSubWindow(sub) sub.show() elif action.text() == "Debug": print( [window.windowTitle() for window in self.mdi.subWindowList()])
def InitUI(self): ''' 界面初始设置 ''' self.setWindowTitle('关注微信公众号:学点编程吧--扑克牌模拟') self.mid = QMdiArea() self.setCentralWidget(self.mid) # 新建一个QMdiArea类的对象,并将其设置为主窗口的中央小部件 sendOnecardAct = QAction(QIcon('./res/sendOnecard.ico'), '发1张牌', self) sendOnecardAct.triggered.connect(self.sendOnecard) # 发1张牌命令 sendFivecardsAct = QAction(QIcon('./res/sendFivecard.ico'), '随机5张牌', self) sendFivecardsAct.triggered.connect(self.sendFivecards) # 随机5张牌命令 clearcardAct = QAction(QIcon('./res/clear.ico'), '清除牌', self) clearcardAct.triggered.connect(self.clearCards) # 清除牌命令 foldcardAct = QAction(QIcon('./res/fold.ico'), '收牌', self) foldcardAct.triggered.connect(self.foldCards) # 收牌 toolbar = self.addToolBar('工具栏') toolbar.addAction(sendOnecardAct) toolbar.addAction(sendFivecardsAct) toolbar.addAction(clearcardAct) toolbar.addAction(foldcardAct) #把上面的几个命令放到工具栏上 toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
def __init__(self): super(MainWindow, self).__init__() self.mdiArea = QMdiArea() self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setViewMode(QMdiArea.TabbedView) self.mdiArea.setDocumentMode(True) self.mdiArea.setTabsClosable(True) self.mdiArea.setTabsMovable(True) self.setCentralWidget(self.mdiArea) self.mdiArea.subWindowActivated.connect(self.updateMenus) self.windowMapper = QSignalMapper(self) self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow) self.createActions() self.createMenus() self.createToolBars() self.createStatusBar() self.updateMenus() self.readSettings() self.setWindowTitle("MDI")
def init_ui(self): self.setWindowTitle('MDI Application') self.setWindowIcon(QIcon('pyicon.png')) self.setGeometry(100, 100, 800, 600) # Create an instance of MDI. self.mdi = QMdiArea() self.setCentralWidget(self.mdi) # Menu bar. menu_bar = self.menuBar() file_menu = menu_bar.addMenu('File') file_menu.addAction('New') file_menu.addAction('Cascade') file_menu.addAction('Tiled') file_menu.triggered[QAction].connect(self.window_triggered) # Exit QAction. exit_action = QAction('Exit', self) exit_action.setShortcut(QKeySequence.Quit) exit_action.triggered.connect(self.close) file_menu.addAction(exit_action) # Status bar. status = self.statusBar() status.showMessage('Status bar')
def __init__(self): super(mainwindow, self).__init__() # 主界面的布局 layout = QHBoxLayout() w = QWidget() w.setLayout(layout) self.setCentralWidget(w) # 显示弹出的子窗口 self.new_subwindow_btn = QPushButton("新建") layout.addWidget(self.new_subwindow_btn) self.new_subwindow_btn.clicked.connect(self.count) # 读取子窗口数据 self.read_content_btn = QPushButton("读取") layout.addWidget(self.read_content_btn) self.read_content_btn.clicked.connect(self.get_content) # 创建多文档区域 self.mdi = QMdiArea() layout.addWidget(self.mdi) # 要被创建的子窗口 self.w = QWidget()
class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) # create sub windows self.mdi_area = QMdiArea() start_widget = StartWidget() start_widget.start_signal.connect(self.create_arithmetic_widget) self.start_window = self.mdi_area.addSubWindow(start_widget) self.start_window.setWindowFlags(Qt.FramelessWindowHint) self.start_window.showMaximized() self.arithmetic_widget = None self.setCentralWidget(self.mdi_area) def create_arithmetic_widget(self, operand_range: tuple, operators: tuple): arithmetic_widget = ArithmeticWidget(operand_range, operators) arithmetic_widget.stop_signal.connect(self.reshow_start_widget) self.arithmetic_widget = self.mdi_area.addSubWindow(arithmetic_widget) self.arithmetic_widget.setWindowFlags(Qt.FramelessWindowHint) self.start_window.hide() self.arithmetic_widget.showMaximized() def move_to_center(self): """Move window to center desktop""" point = QPoint(self.width() // 2, self.height() // 2 + 100) pos = QApplication.desktop().availableGeometry().center() self.move(pos - point) def reshow_start_widget(self): self.mdi_area.activeSubWindow().close() self.start_window.showMaximized()
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.seq_model = seq.SequentialModel() self.mdi = QMdiArea() self.setCentralWidget(self.mdi) bar = self.menuBar() file = bar.addMenu("File") file.addAction("New") file.addAction("Open...") file.addSeparator() file.addAction("Save") file.addAction("Save As...") file.triggered[QAction].connect(self.file_action) view = bar.addMenu("View") view.addAction("Table") view.addAction("Lens View") view.triggered[QAction].connect(self.view_action) wnd = bar.addMenu("Window") wnd.addAction("Cascade") wnd.addAction("Tiled") wnd.triggered[QAction].connect(self.window_action) self.setWindowTitle("Ray Optics") self.show() self.open_file( "/Users/Mike/Developer/PyProjects/ray-optics/codev/test/ag_dblgauss.seq" )
def setup_main_layout(self): self.mdi = QMdiArea() self.mdi.setActivationOrder(QMdiArea.ActivationHistoryOrder) self.mdi.setViewMode(QMdiArea.TabbedView) self.mdi.setDocumentMode(True) mdi_widget = QWidget() mdi_widget.setLayout(VLayout()) mdi_widget.layout().addWidget(self.mdi) self.devices_splitter.addWidget(mdi_widget) vl_console = VLayout() self.console_view = TableView() self.console_view.setModel(self.sorted_console_model) self.console_view.setupColumns(columns_console) self.console_view.setAlternatingRowColors(True) self.console_view.setSortingEnabled(True) self.console_view.sortByColumn(CnsMdl.TIMESTAMP, Qt.DescendingOrder) self.console_view.verticalHeader().setDefaultSectionSize(20) self.console_view.setMinimumHeight(200) self.console_view.setContextMenuPolicy(Qt.CustomContextMenu) vl_console.addWidget(self.console_view) console_widget = QWidget() console_widget.setLayout(vl_console) self.devices_splitter.addWidget(console_widget) self.main_splitter.insertWidget(0, self.devices_splitter) self.setCentralWidget(self.main_splitter) self.console_view.clicked.connect(self.select_cons_entry) self.console_view.doubleClicked.connect(self.view_payload) self.console_view.customContextMenuRequested.connect( self.show_cons_ctx_menu)
def InitUI(self): self.setWindowTitle('扑克牌模拟') self.mid = QMdiArea() self.setCentralWidget(self.mid) sendOnecardAct = QAction(QIcon('./res/sendOnecard.ico'), '发1张牌', self) sendOnecardAct.triggered.connect(self.sendOnecard) sendFivecardsAct = QAction(QIcon('./res/sendFivecard.ico'), '随机5张牌', self) sendFivecardsAct.triggered.connect(self.sendFivecards) clearcardAct = QAction(QIcon('./res/clear.ico'), '清除牌', self) clearcardAct.triggered.connect(self.clearCards) foldcardAct = QAction(QIcon('./res/fold.ico'), '收牌', self) foldcardAct.triggered.connect(self.foldCards) toolbar = self.addToolBar('工具栏') toolbar.addAction(sendOnecardAct) toolbar.addAction(sendFivecardsAct) toolbar.addAction(clearcardAct) toolbar.addAction(foldcardAct) toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
def __init__(self, simulation_window, simulation_file=None, parent=None): QMdiArea.__init__(self, parent) if simulation_file: self._configuration = Configuration(simulation_file) else: self._configuration = Configuration() self.worker = None self._model = None self._gantt = None self._logs = None self._editor = None self._metrics_window = None self._model_window = None self._progress_bar = None self._documentation = None self._simulation_window = simulation_window self._configuration.configurationChanged.connect( self.configuration_changed) self._configuration.configurationSaved.connect( self.configuration_saved) self.showModelWindow()
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.title = 'event annotation tool' self.left = 50 self.top = 50 self.v_width = 640-200 #1400# self.v_height = 480-200 #1000# self.set_input=0 self.setWindowTitle(self.title) self.mdi = QMdiArea() self.setCentralWidget(self.mdi) self.mdi.tileSubWindows() PATH_FILE = '/home/barbara/Desktop/demo'#'/home/barbara/Desktop/car_data/Normal/Nevsky prospect traffic surveillance video' video_feed=action_time_antation_tool.annotation_openCV(PATH_FILE) v_sub = SubWindow(video_feed) # QMdiSubWindow() v_sub.setWidget(video_feed) v_sub.resize(self.v_width+25, self.v_height+75) v_sub.setMaximumSize(self.v_width+25, self.v_height+75) v_sub.setWindowTitle("Feed " + str(len(self.label_v_list))) self.mdi.addSubWindow(v_sub) # self.mdi self.mdi.tileSubWindows() v_sub.show()
def setup(self): sub1=QMdiSubWindow() sub1.setWidget(self.region1_plot) sub1.setWindowTitle('Region 1 Plot') sub2=QMdiSubWindow() sub2.setWidget(self.region2_plot) sub2.setWindowTitle('Region 2 Plot') sub3=QMdiSubWindow() sub3.setWidget(self.total_plot) sub3.setWindowTitle('Total Plot') sub4=QMdiSubWindow() sub4.setWidget(self.time_plot) sub4.setWindowTitle('Time Plot') self.mdi=QMdiArea() self.mdi.addSubWindow(sub1) self.mdi.addSubWindow(sub2) self.mdi.addSubWindow(sub3) self.mdi.addSubWindow(sub4) self.mdi.tileSubWindows() self.setCentralWidget(self.mdi)
def __init__(self): super(Demo, self).__init__() self.mdi_area = QMdiArea(self) # 1 self.setCentralWidget(self.mdi_area) self.toolbar = self.addToolBar('Tool Bar') self.new_action = QAction(QIcon('images/new.ico'), 'New', self) # 2 self.close_action = QAction(QIcon('images/close.ico'), 'Close', self) self.close_all_action = QAction(QIcon('images/close_all.ico'), 'Close All', self) self.mode1_action = QAction(QIcon('cascade.ico'), 'Cascade', self) self.mode2_action = QAction(QIcon('tile.ico'), 'Tile', self) self.new_action.triggered.connect(self.new_func) # 3 self.close_action.triggered.connect(self.mdi_area.closeActiveSubWindow) self.close_all_action.triggered.connect( self.mdi_area.closeAllSubWindows) self.mode1_action.triggered.connect(self.mdi_area.cascadeSubWindows) self.mode2_action.triggered.connect(self.mdi_area.tileSubWindows) self.toolbar.addAction(self.new_action) # 4 self.toolbar.addAction(self.close_action) self.toolbar.addAction(self.close_all_action) self.toolbar.addAction(self.mode1_action) self.toolbar.addAction(self.mode2_action)
def __init__(self): """Creates the MDI container.""" super().__init__() self.showFullScreen() self.setWindowTitle("WEASEL") self.centralwidget = QWidget(self) self.setCentralWidget(self.centralwidget) self.centralwidget.setLayout(QVBoxLayout(self.centralwidget)) self.mdiArea = QMdiArea(self.centralwidget) self.mdiArea.tileSubWindows() self.centralwidget.layout().addWidget(self.mdiArea) self.statusBar = QStatusBar() self.centralwidget.layout().addWidget(self.statusBar) self.selectedStudy = '' self.selectedSeries = '' self.selectedImageName = '' self.currentImagePath = '' # XML reader object to process XML configuration file self.objConfigXMLReader = WeaselConfigXMLReader() menuXMLFile = self.objConfigXMLReader.getMenuFile() self.weaselDataFolder = self.objConfigXMLReader.getWeaselDataFolder() # XML reader object to process XML DICOM data file self.objXMLReader = WeaselXMLReader() menus.setupMenus(self, menuXMLFile) menus.buildContextMenu(self, menuXMLFile) #toolBar.setupToolBar(self) commented out to remove Ferret from Weasel self.setStyleSheet(styleSheet.TRISTAN_GREY) logger.info("WEASEL GUI created successfully.")
def __init__(self): super().__init__() uic.loadUi("mainwindow.ui", self) self.mdi = QMdiArea() self.setCentralWidget(self.mdi) self.menu_File.triggered[QAction].connect(self.WindowTrig)
class MainWindow(QMainWindow): count = 0 def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.mdi = QMdiArea() self.setCentralWidget(self.mdi) bar = self.menuBar() file = bar.addMenu("File") file.addAction("New") file.triggered[QAction].connect(self.windowaction) self.setWindowTitle("MDI demo") @pyqtSlot(str) def windowclosed(self, text): print(text) def windowaction(self, q): if q.text() == "New": MainWindow.count = MainWindow.count + 1 sub = MdiSubWindow() sub.setWidget(QTextEdit()) sub.setAttribute(Qt.WA_DeleteOnClose) sub.setWindowTitle("subwindow" + str(MainWindow.count)) sub.sigClosed.connect(self.windowclosed) self.mdi.addSubWindow(sub) sub.show()
def __init__(self): super(RDFNavigator, self).__init__() self.lastDir = '.' self.settingsManager = RDFNavigatorSettignsManager() self.resourceRefManager = RDFNavigatorResourceReferenceManager() self.childrenFactory = RDFNavigatorChildrenFactory(self) self.mdiArea = QMdiArea() self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setCentralWidget(self.mdiArea) self.mdiArea.subWindowActivated.connect(self.updateMenus) self.windowMapper = QSignalMapper(self) self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow) self.createActions() self.createMenus() self.createToolBars() self.createStatusBar() self.updateMenus() self.createDockWidgets() self.readSettings() self.setWindowTitle("RDF Navigator") self.global_data = {} self.analyzeSystemData()
def __init__(self, parent=None): super(KOWRaidEditor, self).__init__(parent) self.setWindowTitle("Raid Editor v0.1") self.setGeometry(100, 100, 1280, 960) #changed basic geom to 1280*960 self.center() self.mdi = QMdiArea() self.setCentralWidget(self.mdi) # todo: file import/export system 추가 필요 self.init_ui() self._methods = [] self._popup = QDialog() # test self.test_data() # self.__top_splitter = self.create_top_group_box() self.__top_splitter.setStretchFactor(1, 1) # main_layout = QVBoxLayout() main_layout.addWidget(self.__top_splitter) central_widget = QWidget() central_widget.setLayout(main_layout)
def initUi(self): self.initMenuBar() self.initToolBar() self.mdiArea = QMdiArea(self) self.setCentralWidget(self.mdiArea) self.newDocIndex = 1
def __init__(self): super().__init__() self.data_dict = {} self.mdi = QMdiArea() self.setCentralWidget(self.mdi) # self.mdi.resize(950,950) bar = self.menuBar() self.current_dir = None self.opened_wd_names = [] file = bar.addMenu("File") file.addAction("New") file.addAction("cascade") file.addAction("Tiled") file.triggered[QAction].connect(self.WindowTrig) load = bar.addMenu("Load") load.addAction("2D") load.addAction("3D") load.triggered[QAction].connect(self.dir_open) toolbar = QToolBar() self.addToolBar(toolbar) bw_button_action = QAction('base_wnd', self) bw_button_action.setStatusTip('base window button') bw_button_action.triggered.connect(self.onclicktb) toolbar.addAction(bw_button_action) self.setWindowTitle("MDI Application") self.base_wd = QMdiSubWindow() self.base_wd.setAttribute(Qt.WA_DeleteOnClose, False) self.base_wd.resize(400, 400) self.base_wd.plt_i = pg.PlotItem(labels={ 'left': ('slits', 'degrees'), 'bottom': ('Kin. Energy', 'eV') }) self.base_wd.plt_iv = pg.ImageView(view=self.base_wd.plt_i) self.base_wd.setWidget(self.base_wd.plt_iv) self.base_wd.setWindowTitle("plot window") self.mdi.addSubWindow(self.base_wd) self.base_wd.show() data_DockWidget = QDockWidget('data', self) data_DockWidget.setObjectName(('data window')) data_DockWidget.setAllowedAreas(Qt.RightDockWidgetArea) self.data_list = QListWidget() data_DockWidget.setWidget(self.data_list) self.addDockWidget(Qt.RightDockWidgetArea, data_DockWidget) self.data_list.itemClicked.connect(self.show_data) self.data_list.itemDoubleClicked.connect(self.get_data) self.mdi.subWindowActivated.connect(self.get_data)
def init_mdi(self): self.mdi = QMdiArea(self.widget) self.mdi.setViewMode(QMdiArea.TabbedView) self.mdi.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdi.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdi.setTabsMovable(True) self.mdi.setTabsClosable(True) self.mdi.setTabShape(QTabWidget.Rounded) self.widget.setCentralWidget(self.mdi)
def __init__(self, LOGIN, isRunningOnPi=False, parent=None): super(MainWindow, self).__init__() self.main_widget = QWidget() self.mdi = QMdiArea() self.setWindowTitle('Brew Monitoring System') bar = self.menuBar() filebar = bar.addMenu("File") filebar.addAction("New User") filebar.addAction("New Brew") filebar.triggered.connect(self.fileaction) viewbar = bar.addMenu("View") viewbar.addAction("Mash and Boil Vessels") viewbar.addAction("Fermentation Vessels") viewbar.addAction("Past Brew Data") viewbar.triggered.connect(self.viewaction) windowbar = bar.addMenu("Window") windowbar.addAction("Cascade") windowbar.addAction("Tiled") windowbar.triggered.connect(self.windowaction) systembar = bar.addMenu("System") systembar.addAction("Check For Faults") self.mainwindow = MdiMainWindow(LOGIN, isRunningOnPi=isRunningOnPi, parent=self) quitButton = QPushButton("Quit") quitButton.clicked.connect(lambda: self.close()) quitLayout = QHBoxLayout() quitLayout.addStretch(10) quitLayout.addWidget(quitButton) splitter = QSplitter() splitter.setOrientation(2) splitter.addWidget(self.mainwindow) splitter.addWidget(self.mdi) layout = QVBoxLayout() #layout.addWidget(self.mainwindow) #layout.addWidget(self.mdi) layout.addWidget(splitter) #layout.addLayout(quitLayout) #self.main_widget.setLayout(layout) # self.main_widget.showFullScreen() self.main_widget.setLayout(layout) self.setMinimumSize(700, 500) self.resize(0, 0) self.setCentralWidget(self.main_widget)
def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.num_ventanas = 0 self.setWindowTitle('Ejemplo de aplicacio MDI para getphones') self.setGeometry(0, 0, 800, 600) self.centraEnPantalla() self.mdi_area = QMdiArea() self.setCentralWidget(self.mdi_area)
def add_webview(self, webview): if self._mdi_area is None: self._mdi_area = QMdiArea() self._mdi_area.resize(1024, 768) # self._mdi_area.setWindowTitle() self._mdi_area.show() subwindow = self._mdi_area.addSubWindow(webview) webview.titleChanged.connect(subwindow.setWindowTitle) subwindow.show() self._mdi_area.tileSubWindows()
def initUI(self): parent = None super(Example, self).__init__(parent) self.mdiArea = QMdiArea(self) self.setCentralWidget(self.mdiArea) exitAction = QAction(QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(qApp.quit) addAction = QAction(QIcon('books.png'), '&Показать', self) addAction.setShortcut('Ctrl+Q') addAction.setStatusTip('Показать библиотеку') addAction.triggered.connect(self.m_showlibrary) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu('&Библиотека') # fileMenu.addAction("ss") fileMenu.addAction(exitAction) fileMenu.addAction(addAction) self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(exitAction) self.toolbar.addAction(addAction) self.setGeometry(100, 100, 800, 800) self.setWindowTitle('Home Books') model1 = QtSql.QSqlTableModel() model1.setTable('f_author') model1.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) model1.select() view1 = QTableView() view1.setModel(model1) view1.setWindowTitle("Авторы") view1.setShowGrid(0) self.treePanel = QDockWidget("Управление", self) w = QWidget(self.treePanel) self.treePanel.setWidget(w) lay = QVBoxLayout(w) lay.setSpacing(1) lay.setContentsMargins(1, 1, 1, 1) lay.addWidget(view1) self.addDockWidget(Qt.LeftDockWidgetArea, self.treePanel) w.setLayout(lay) w.setGeometry(10, 10, 50, 50) # w.show() self.show()
def initUI(self): self.resize(1100, 900) self.setWindowTitle('Main') myFolder = os.path.split(os.path.realpath(__file__))[0] self.path_resource = os.path.join(myFolder, os.pardir, 'resource') """# Action""" icon_filesave = os.path.join(self.path_resource, 'filesave') icon_picsave = os.path.join(self.path_resource, 'picsave') icon_option = os.path.join(self.path_resource, 'option') icon_graph = os.path.join(self.path_resource, 'graph') icon_start = os.path.join(self.path_resource, 'start') icon_help = os.path.join(self.path_resource, 'help') icon_info = os.path.join(self.path_resource, 'info') self.action_option = self.create_action('&Option', self.main_option, 'Ctrl + O', icon_option, None) self.action_graph = self.create_action('&Graph', self.graph_show, 'Ctrl + G', icon_graph, None) self.action_about = self.create_action('About', self.prog_about, None, icon_info, None) self.action_help = self.create_action('Help', self.prog_help, None, icon_help, None) self.action_start = self.create_action('Start/Restart', self.start_restart, None, icon_start, None) self.action_filesave = self.create_action('filesave', self.file_save, None, icon_filesave, None) self.action_picsave = self.create_action('picsave', self.pic_save, None, icon_picsave, None) """# Menu Bar""" menu_file = self.menuBar().addMenu('&File') menu_show = self.menuBar().addMenu('&Graph') menu_advanced = self.menuBar().addMenu('&Advanced') menu_help = self.menuBar().addMenu('&Help') self.add_actions(menu_file, [self.action_option]) self.add_actions(menu_show, [self.action_graph]) self.add_actions(menu_help, [self.action_about]) """# Tool Bar""" self.toolbar_main_option = self.addToolBar('Option') self.toolbar_main_option.addAction(self.action_option) self.toolbar_main_option.addAction(self.action_graph) self.toolbar_main_control = self.addToolBar('Control') self.toolbar_main_control.addAction(self.action_start) self.toolbar_main_control.addAction(self.action_filesave) self.toolbar_main_control.addAction(self.action_picsave) self.toolbar_tinker = self.addToolBar('Tinker') self.toolbar_tinker.addAction(self.action_help) self.toolbar_tinker.addAction(self.action_about) self.mdi = QMdiArea() self.setCentralWidget(self.mdi) self.statusBar().showMessage('Thanks to use Col')
def init_ui(self): self.central_widget = QMdiArea() self.setCentralWidget(self.central_widget) # -------- controls widget -------- # self.controls_dock = QDockWidget("Processing pipeline setup", self) self.controls_dock.setObjectName("Controls") self.controls_dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) self.controls_dock.visibilityChanged.connect( self._update_pipeline_tree_widget_action_text) self.addDockWidget(Qt.LeftDockWidgetArea, self.controls_dock) # self._controls.setMinimumWidth(800) # --------------------------------- # file_menu = self.menuBar().addMenu("&File") # file menu load_pipeline_action = self._createAction("&Load pipeline", self._load_pipeline) save_pipeline_action = self._createAction("&Save pipeline", self._save_pipeline) file_menu.addAction(load_pipeline_action) file_menu.addAction(save_pipeline_action) # -------- view menu & toolbar -------- # tile_windows_action = self._createAction( "&Tile windows", self.central_widget.tileSubWindows) view_menu = self.menuBar().addMenu("&View") view_menu.addAction(tile_windows_action) view_toolbar = self.addToolBar("View") view_toolbar.addAction(tile_windows_action) # ------------------------------------- # edit_menu = self.menuBar().addMenu("&Edit") self._toggle_pipeline_tree_widget_action = self._createAction( "&Hide pipeline settings", self._toggle_pipeline_tree_widget) edit_menu.addAction(self._toggle_pipeline_tree_widget_action) edit_toolbar = self.addToolBar("Edit") edit_toolbar.setObjectName("edit_toolbar") edit_toolbar.addAction(self._toggle_pipeline_tree_widget_action) # -------- run menu & toolbar -------- # self.run_toggle_action = self._createAction( "&Start", self._on_run_button_toggled) run_menu = self.menuBar().addMenu("&Run") self.initialize_pipeline = self._createAction("&Initialize pipeline", self.initialize) run_menu.addAction(self.run_toggle_action) run_menu.addAction(self.initialize_pipeline) run_toolbar = self.addToolBar("Run") run_toolbar.setObjectName("run_toolbar") run_toolbar.addAction(self.run_toggle_action) run_toolbar.addAction(self.initialize_pipeline)
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.mdi = QMdiArea() self.setCentralWidget(self.mdi) bar = self.menuBar() file = bar.addMenu("File") file.addAction("New") file.triggered[QAction].connect(self.windowaction) self.setWindowTitle("MDI demo")
def __init__(self): super(QMainWindow, self).__init__() self.mdi_area = QMdiArea() self.setCentralWidget(self.mdi_area) self.__init_menu()
class GuiMenu(Menu): def eventFilter(self, source, event): if event.type() == QtCore.QEvent.MouseMove: newClickPosition = source.mapTo(self.mdi, event.pos()) for s in self.mdi.subWindowList(): if source == s.widget() and self.moving: newWidgetX = self.prevWidgetPosition.x() + newClickPosition.x() - self.downPosition.x() newWidgetY = self.prevWidgetPosition.y() + newClickPosition.y() - self.downPosition.y() s.move(newWidgetX, newWidgetY) elif event.type() == QtCore.QEvent.MouseButtonPress: if (source.cursor().shape() == QtCore.Qt.SizeVerCursor or source.cursor().shape() == QtCore.Qt.SizeHorCursor): # resizing hack: resizing works as some mdi feature, just don't set moving parameters here. pass else: self.downPosition = source.mapTo(self.mdi, event.pos()) self.prevWidgetPosition = source.mapTo(self.mdi, source.pos()) self.moving = True elif event.type() == QtCore.QEvent.MouseButtonRelease: self.moving = False return QWidget.eventFilter(self, source, event) def __init__(self): a = QTextEdit('some gui settings') b = QTextEdit('some gui settings too') widgets = [a, b] self.mdi = QMdiArea() self.moving = False layout = QVBoxLayout() layout.addWidget(self.mdi) super().__init__('GUI', layout) for w in widgets: self.mdi.addSubWindow(w, QtCore.Qt.FramelessWindowHint) w.setEnabled(False) w.setMouseTracking(True) w.installEventFilter(self) # only called on subwindows -> no collision detection needed
def __init__(self): super(NetMainWindow, self).__init__() self.mdiArea = QMdiArea() self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setCentralWidget(self.mdiArea) self.windowMapper = QSignalMapper(self) self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow) self.createActions() self.createMenus() self.createStatusBar() self.readSettings() self.setWindowTitle('Net')
def eventFilter(self, obj, ev): """ Public method called to filter an event. @param obj object, that generated the event (QObject) @param ev the event, that was generated by object (QEvent) @return flag indicating if event was filtered out """ if obj in self.widgets and ev.type() == QEvent.Close: try: self.widgets.remove(obj) if len(self.widgets) == 0: self.lastWidgetClosed.emit() except ValueError: pass return QMdiArea.eventFilter(self, obj, ev)
class NetMainWindow(QMainWindow): def __init__(self): super(NetMainWindow, self).__init__() self.mdiArea = QMdiArea() self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setCentralWidget(self.mdiArea) self.windowMapper = QSignalMapper(self) self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow) self.createActions() self.createMenus() self.createStatusBar() self.readSettings() self.setWindowTitle('Net') def newScan(self): child = IpRangeScanGUI(self) self.mdiArea.addSubWindow(child) child.show() return child def createActions(self): self.newIPScanAct = QAction("&Start a Scan", self, shortcut=QKeySequence.New, statusTip="Start a Scan", triggered=self.newScan) def createMenus(self): self.serverMenu = self.menuBar().addMenu('&IP Scan') self.serverMenu.addAction(self.newIPScanAct) def createStatusBar(self): self.statusBar().showMessage("Ready") def readSettings(self): settings = QSettings('Trolltech', 'MDI Example') pos = settings.value('pos', QPoint(200, 200)) size = settings.value('size', QSize(500, 500)) self.move(pos) self.resize(size) def setActiveSubWindow(self, window): if window: self.mdiArea.setActiveSubWindow(window)
def __init__(self): a = QTextEdit('some gui settings') b = QTextEdit('some gui settings too') widgets = [a, b] self.mdi = QMdiArea() self.moving = False layout = QVBoxLayout() layout.addWidget(self.mdi) super().__init__('GUI', layout) for w in widgets: self.mdi.addSubWindow(w, QtCore.Qt.FramelessWindowHint) w.setEnabled(False) w.setMouseTracking(True) w.installEventFilter(self) # only called on subwindows -> no collision detection needed
def __init__(self): super(MainWindow, self).__init__() # remove close & maximize window buttons #self.setWindowFlags(Qt.CustomizeWindowHint|Qt.WindowMinimizeButtonHint) self.setMinimumSize(500, 666) #self.setMaximumSize(1000,666) self.mdiArea = QMdiArea() self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setCentralWidget(self.mdiArea) self.mdiArea.subWindowActivated.connect(self.updateMenus) self.mdiArea.setViewMode(QMdiArea.TabbedView) self.windowMapper = QSignalMapper(self) self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow) self.child = None self.createActions() self.createMenus() self.createStatusBar() self.updateMenus() self.readSettings() self.setWindowTitle("LEKTURE") mytoolbar = QToolBar() #self.toolbar = self.addToolBar() mytoolbar.addAction(self.newAct) mytoolbar.addAction(self.openAct) mytoolbar.addAction(self.saveAct) mytoolbar.addAction(self.saveAsAct) mytoolbar.addSeparator() mytoolbar.addAction(self.outputsAct) mytoolbar.addAction(self.scenarioAct) self.scenarioAct.setVisible(False) mytoolbar.setMovable(False) mytoolbar.setFixedWidth(60) self.addToolBar(Qt.LeftToolBarArea, mytoolbar)
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.mdiArea = QMdiArea() self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setCentralWidget(self.mdiArea) self.mdiArea.subWindowActivated.connect(self.updateMenus) self.windowMapper = QSignalMapper(self) self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow) self.createActions() self.createMenus() self.createToolBars() self.createStatusBar() self.updateMenus() self.readSettings() self.setWindowTitle("MDI") def closeEvent(self, event): self.mdiArea.closeAllSubWindows() if self.mdiArea.currentSubWindow(): event.ignore() else: self.writeSettings() event.accept() def newFile(self): child = self.createMdiChild() child.newFile() child.show() def open(self): fileName, _ = QFileDialog.getOpenFileName(self) if fileName: existing = self.findMdiChild(fileName) if existing: self.mdiArea.setActiveSubWindow(existing) return child = self.createMdiChild() if child.loadFile(fileName): self.statusBar().showMessage("File loaded", 2000) child.show() else: child.close() def save(self): if self.activeMdiChild() and self.activeMdiChild().save(): self.statusBar().showMessage("File saved", 2000) def saveAs(self): if self.activeMdiChild() and self.activeMdiChild().saveAs(): self.statusBar().showMessage("File saved", 2000) def cut(self): if self.activeMdiChild(): self.activeMdiChild().cut() def copy(self): if self.activeMdiChild(): self.activeMdiChild().copy() def paste(self): if self.activeMdiChild(): self.activeMdiChild().paste() def about(self): QMessageBox.about(self, "About MDI", "The <b>MDI</b> example demonstrates how to write multiple " "document interface applications using Qt.") def updateMenus(self): hasMdiChild = (self.activeMdiChild() is not None) self.saveAct.setEnabled(hasMdiChild) self.saveAsAct.setEnabled(hasMdiChild) self.pasteAct.setEnabled(hasMdiChild) self.closeAct.setEnabled(hasMdiChild) self.closeAllAct.setEnabled(hasMdiChild) self.tileAct.setEnabled(hasMdiChild) self.cascadeAct.setEnabled(hasMdiChild) self.nextAct.setEnabled(hasMdiChild) self.previousAct.setEnabled(hasMdiChild) self.separatorAct.setVisible(hasMdiChild) hasSelection = (self.activeMdiChild() is not None and self.activeMdiChild().textCursor().hasSelection()) self.cutAct.setEnabled(hasSelection) self.copyAct.setEnabled(hasSelection) def updateWindowMenu(self): self.windowMenu.clear() self.windowMenu.addAction(self.closeAct) self.windowMenu.addAction(self.closeAllAct) self.windowMenu.addSeparator() self.windowMenu.addAction(self.tileAct) self.windowMenu.addAction(self.cascadeAct) self.windowMenu.addSeparator() self.windowMenu.addAction(self.nextAct) self.windowMenu.addAction(self.previousAct) self.windowMenu.addAction(self.separatorAct) windows = self.mdiArea.subWindowList() self.separatorAct.setVisible(len(windows) != 0) for i, window in enumerate(windows): child = window.widget() text = "%d %s" % (i + 1, child.userFriendlyCurrentFile()) if i < 9: text = '&' + text action = self.windowMenu.addAction(text) action.setCheckable(True) action.setChecked(child is self.activeMdiChild()) action.triggered.connect(self.windowMapper.map) self.windowMapper.setMapping(action, window) def createMdiChild(self): child = MdiChild() self.mdiArea.addSubWindow(child) child.copyAvailable.connect(self.cutAct.setEnabled) child.copyAvailable.connect(self.copyAct.setEnabled) return child def createActions(self): self.newAct = QAction(QIcon(':/images/new.png'), "&New", self, shortcut=QKeySequence.New, statusTip="Create a new file", triggered=self.newFile) self.openAct = QAction(QIcon(':/images/open.png'), "&Open...", self, shortcut=QKeySequence.Open, statusTip="Open an existing file", triggered=self.open) self.saveAct = QAction(QIcon(':/images/save.png'), "&Save", self, shortcut=QKeySequence.Save, statusTip="Save the document to disk", triggered=self.save) self.saveAsAct = QAction("Save &As...", self, shortcut=QKeySequence.SaveAs, statusTip="Save the document under a new name", triggered=self.saveAs) self.exitAct = QAction("E&xit", self, shortcut=QKeySequence.Quit, statusTip="Exit the application", triggered=QApplication.instance().closeAllWindows) self.cutAct = QAction(QIcon(':/images/cut.png'), "Cu&t", self, shortcut=QKeySequence.Cut, statusTip="Cut the current selection's contents to the clipboard", triggered=self.cut) self.copyAct = QAction(QIcon(':/images/copy.png'), "&Copy", self, shortcut=QKeySequence.Copy, statusTip="Copy the current selection's contents to the clipboard", triggered=self.copy) self.pasteAct = QAction(QIcon(':/images/paste.png'), "&Paste", self, shortcut=QKeySequence.Paste, statusTip="Paste the clipboard's contents into the current selection", triggered=self.paste) self.closeAct = QAction("Cl&ose", self, statusTip="Close the active window", triggered=self.mdiArea.closeActiveSubWindow) self.closeAllAct = QAction("Close &All", self, statusTip="Close all the windows", triggered=self.mdiArea.closeAllSubWindows) self.tileAct = QAction("&Tile", self, statusTip="Tile the windows", triggered=self.mdiArea.tileSubWindows) self.cascadeAct = QAction("&Cascade", self, statusTip="Cascade the windows", triggered=self.mdiArea.cascadeSubWindows) self.nextAct = QAction("Ne&xt", self, shortcut=QKeySequence.NextChild, statusTip="Move the focus to the next window", triggered=self.mdiArea.activateNextSubWindow) self.previousAct = QAction("Pre&vious", self, shortcut=QKeySequence.PreviousChild, statusTip="Move the focus to the previous window", triggered=self.mdiArea.activatePreviousSubWindow) self.separatorAct = QAction(self) self.separatorAct.setSeparator(True) self.aboutAct = QAction("&About", self, statusTip="Show the application's About box", triggered=self.about) self.aboutQtAct = QAction("About &Qt", self, statusTip="Show the Qt library's About box", triggered=QApplication.instance().aboutQt) def createMenus(self): self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.addAction(self.newAct) self.fileMenu.addAction(self.openAct) self.fileMenu.addAction(self.saveAct) self.fileMenu.addAction(self.saveAsAct) self.fileMenu.addSeparator() action = self.fileMenu.addAction("Switch layout direction") action.triggered.connect(self.switchLayoutDirection) self.fileMenu.addAction(self.exitAct) self.editMenu = self.menuBar().addMenu("&Edit") self.editMenu.addAction(self.cutAct) self.editMenu.addAction(self.copyAct) self.editMenu.addAction(self.pasteAct) self.windowMenu = self.menuBar().addMenu("&Window") self.updateWindowMenu() self.windowMenu.aboutToShow.connect(self.updateWindowMenu) self.menuBar().addSeparator() self.helpMenu = self.menuBar().addMenu("&Help") self.helpMenu.addAction(self.aboutAct) self.helpMenu.addAction(self.aboutQtAct) def createToolBars(self): self.fileToolBar = self.addToolBar("File") self.fileToolBar.addAction(self.newAct) self.fileToolBar.addAction(self.openAct) self.fileToolBar.addAction(self.saveAct) self.editToolBar = self.addToolBar("Edit") self.editToolBar.addAction(self.cutAct) self.editToolBar.addAction(self.copyAct) self.editToolBar.addAction(self.pasteAct) def createStatusBar(self): self.statusBar().showMessage("Ready") def readSettings(self): settings = QSettings('Trolltech', 'MDI Example') pos = settings.value('pos', QPoint(200, 200)) size = settings.value('size', QSize(400, 400)) self.move(pos) self.resize(size) def writeSettings(self): settings = QSettings('Trolltech', 'MDI Example') settings.setValue('pos', self.pos()) settings.setValue('size', self.size()) def activeMdiChild(self): activeSubWindow = self.mdiArea.activeSubWindow() if activeSubWindow: return activeSubWindow.widget() return None def findMdiChild(self, fileName): canonicalFilePath = QFileInfo(fileName).canonicalFilePath() for window in self.mdiArea.subWindowList(): if window.widget().currentFile() == canonicalFilePath: return window return None def switchLayoutDirection(self): if self.layoutDirection() == Qt.LeftToRight: QApplication.setLayoutDirection(Qt.RightToLeft) else: QApplication.setLayoutDirection(Qt.LeftToRight) def setActiveSubWindow(self, window): if window: self.mdiArea.setActiveSubWindow(window)
class EditorMainWindow(object): def __init__(self): self.seq = 0 self.widget = loadUi(MAIN_UI_PATH) self.init_mdi() self.init_actions() self.init_instance() self.widget.closeEvent = self.close_handler self.widget.showMaximized() def get_seq(self): self.seq += 1 return self.seq def init_mdi(self): self.mdi = QMdiArea(self.widget) self.mdi.setViewMode(QMdiArea.TabbedView) self.mdi.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdi.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdi.setTabsMovable(True) self.mdi.setTabsClosable(True) self.mdi.setTabShape(QTabWidget.Rounded) self.widget.setCentralWidget(self.mdi) def init_actions(self): self.widget.actionNew.triggered.connect(self.action_new_handler) self.widget.actionOpen.triggered.connect(self.action_open_handler) self.widget.actionSave.triggered.connect(self.action_save_handler) self.widget.actionSave_As.triggered.connect(self.action_save_as_handler) self.widget.actionClose.triggered.connect(self.action_close_handler) self.widget.actionClose_All.triggered.connect(self.action_close_all_handler) self.widget.actionExport.triggered.connect(self.action_export_handler) self.widget.actionStates.triggered.connect(self.action_states_handler) self.widget.actionEvents.triggered.connect(self.action_events_handler) def close_handler(self, ev): l = self.mdi.subWindowList() if len(l) != 0: self.mdi.closeAllSubWindows() ev.ignore() def init_instance(self): self.instances = [] def remove_instance(self, ins): self.instances.remove(ins) def find_non_existing_name(self): while True: tmp_path = os.path.join( config.src_path, "NewFsm" + str(self.get_seq()) + FSM_FILE_EXT) if not os.path.exists(tmp_path): return tmp_path def action_new_handler(self): tmp_path = self.find_non_existing_name() m = FsmModel() m.default_init() vm = InstanceVM(m, self, tmp_path) vm.set_modified(True) def file_already_open(self, pth): for i in self.instances: pth = os.path.abspath(pth) if pth == i.file_path: return i return None def action_open_handler(self): p = QFileDialog() p.setViewMode(QFileDialog.List) p.setFileMode(QFileDialog.ExistingFiles) p.setDirectory(config.src_path) p.exec() paths = p.selectedFiles() for pth in paths: i = self.file_already_open(pth) if i: self.mdi.setActiveSubWindow(i.sub_window) else: m = FsmModel.load_file(pth) vm = InstanceVM(m, self, pth) def action_save_handler(self): w = self.mdi.activeSubWindow() if w is None: return model = w.instance.model model.dump_file(w.instance.file_path) w.instance.set_modified(False) def action_save_as_handler(self): w = self.mdi.activeSubWindow() if w is None: return p = QFileDialog() p.setViewMode(QFileDialog.List) p.setDirectory(config.src_path) p.exec() paths = p.selectedFiles() if len(paths) == 0: return w.instance.file_path = os.path.abspath(paths[0]) w.instance.update_title() model = w.instance.model model.dump_file(w.instance.file_path) w.instance.set_modified(False) def action_close_handler(self): w = self.mdi.activeSubWindow() if w is None: return w.close() def action_close_all_handler(self): self.mdi.closeAllSubWindows() def action_export_handler(self): fsm_files = os.listdir(config.src_path) for fn in fsm_files: full_name = os.path.join(config.src_path, fn) b, e = os.path.splitext(full_name) if e == FSM_FILE_EXT: f = open(full_name, "rb") basename, e = os.path.splitext(fn) model_object = pickle.load(f) f.close() exporter = FsmModelPythonExporter(model_object) exporter.export(os.path.join(config.export_path, basename + "_fsm.py")) def action_states_handler(self): cur = self.get_current_instance() if cur is None: return model = cur.model w = loadUi(STATE_LIST_DIALOG_PATH) list_vm = MultiColumnListModel( model.state, LIST_DIALOG_COLUMNS, STATE_DIALOG_HEADERS) add_item = functools.partial(model.add_item, StateItem, "state") remove_item = functools.partial(model.remove_item, "state") dialog = StateListPanelVM( list_vm, model.state, add_item, remove_item, w) dialog.run() cur.table_vm.refresh() def action_events_handler(self): cur = self.get_current_instance() if cur is None: return model = cur.model w = loadUi(EVENT_DIALOG_PATH) list_vm = MultiColumnListModel( model.event, LIST_DIALOG_COLUMNS, EVENT_DIALOG_HEADERS) add_item = functools.partial(model.add_item, EventItem, "event") remove_item = functools.partial(model.remove_item, "event") dialog = ListEditPanelVM( list_vm, model.event, add_item, remove_item, w) dialog.run() cur.table_vm.refresh() def get_current_instance(self): current = self.mdi.activeSubWindow() if not current: return None for i in self.instances: if i.sub_window == current: return i assert(False) # there is an active sub window but there's no matching instance
class MainWindow(QMainWindow): """This create the main window of the application""" def __init__(self): super(MainWindow, self).__init__() # remove close & maximize window buttons #self.setWindowFlags(Qt.CustomizeWindowHint|Qt.WindowMinimizeButtonHint) self.setMinimumSize(500, 666) #self.setMaximumSize(1000,666) self.mdiArea = QMdiArea() self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setCentralWidget(self.mdiArea) self.mdiArea.subWindowActivated.connect(self.updateMenus) self.mdiArea.setViewMode(QMdiArea.TabbedView) self.windowMapper = QSignalMapper(self) self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow) self.child = None self.createActions() self.createMenus() self.createStatusBar() self.updateMenus() self.readSettings() self.setWindowTitle("LEKTURE") mytoolbar = QToolBar() #self.toolbar = self.addToolBar() mytoolbar.addAction(self.newAct) mytoolbar.addAction(self.openAct) mytoolbar.addAction(self.saveAct) mytoolbar.addAction(self.saveAsAct) mytoolbar.addSeparator() mytoolbar.addAction(self.outputsAct) mytoolbar.addAction(self.scenarioAct) self.scenarioAct.setVisible(False) mytoolbar.setMovable(False) mytoolbar.setFixedWidth(60) self.addToolBar(Qt.LeftToolBarArea, mytoolbar) def closeEvent(self, scenario): """method called when the main window wants to be closed""" self.mdiArea.closeAllSubWindows() if self.mdiArea.currentSubWindow(): scenario.ignore() else: self.writeSettings() scenario.accept() def newFile(self): """creates a new project""" child = self.createProjekt() child.newFile() child.show() self.child = child def open(self): """open a project""" fileName, _ = QFileDialog.getOpenFileName(self) if fileName: existing = self.findProjekt(fileName) if existing: self.mdiArea.setActiveSubWindow(existing) return child = self.createProjekt() if child.loadFile(fileName): self.statusBar().showMessage("File loaded", 2000) child.show() else: child.close() def save(self): """called when user save a project""" if self.activeProjekt() and self.activeProjekt().save(): self.statusBar().showMessage("File saved", 2000) else: self.statusBar().showMessage("Error when trying to save the file") def saveAs(self): """called when user save AS a project""" if self.activeProjekt() and self.activeProjekt().saveAs(): self.statusBar().showMessage("File saved", 2000) else: self.statusBar().showMessage("Error when trying to save the file") def openFolder(self): """called when user calls 'reveal in finder' function""" if self.activeProjekt() and self.activeProjekt().openFolder(): self.statusBar().showMessage("File revealed in Finder", 2000) def about(self): """called when user wants to know a bit more on the app""" import sys python_version = str(sys.version_info[0]) python_version_temp = sys.version_info[1:5] for item in python_version_temp: python_version = python_version + "." + str(item) QMessageBox.about(self, "About Lekture", "pylekture build " + str(pylekture.__version__ + "\n" + \ "python version " + str(python_version))) def updateMenus(self): """update menus""" hasProjekt = (self.activeProjekt() is not None) self.saveAct.setEnabled(hasProjekt) self.saveAsAct.setEnabled(hasProjekt) self.outputsAct.setEnabled(hasProjekt) self.scenarioAct.setEnabled(hasProjekt) self.openFolderAct.setEnabled(hasProjekt) self.closeAct.setEnabled(hasProjekt) self.closeAllAct.setEnabled(hasProjekt) self.nextAct.setEnabled(hasProjekt) self.previousAct.setEnabled(hasProjekt) self.separatorAct.setVisible(hasProjekt) def updateWindowMenu(self): """unpates menus on the window toolbar""" self.windowMenu.clear() self.windowMenu.addAction(self.closeAct) self.windowMenu.addAction(self.closeAllAct) self.windowMenu.addSeparator() self.windowMenu.addAction(self.nextAct) self.windowMenu.addAction(self.previousAct) self.windowMenu.addAction(self.separatorAct) windows = self.mdiArea.subWindowList() self.separatorAct.setVisible(len(windows) != 0) for i, window in enumerate(windows): child = window.widget() text = "%d %s" % (i + 1, child.userFriendlyCurrentFile()) if i < 9: text = '&' + text action = self.windowMenu.addAction(text) action.setCheckable(True) action.setChecked(child is self.activeProjekt()) action.triggered.connect(self.windowMapper.map) self.windowMapper.setMapping(action, window) def createProjekt(self): """create a new project""" child = Projekt() self.mdiArea.addSubWindow(child) self.child = child return child def createActions(self): """create all actions""" self.newAct = QAction("&New", self, shortcut=QKeySequence.New, statusTip="Create a new file", triggered=self.newFile) self.openAct = QAction("&Open...", self, shortcut=QKeySequence.Open, statusTip="Open an existing file", triggered=self.open) self.saveAct = QAction("&Save", self, shortcut=QKeySequence.Save, statusTip="Save the document to disk", triggered=self.save) self.saveAsAct = QAction("Save &As...", self, shortcut=QKeySequence.SaveAs, statusTip="Save the document under a new name", triggered=self.saveAs) self.openFolderAct = QAction("Open Project Folder", self, statusTip="Reveal Project in Finder", triggered=self.openFolder) self.exitAct = QAction("E&xit", self, shortcut=QKeySequence.Quit, statusTip="Exit the application", triggered=QApplication.instance().closeAllWindows) self.closeAct = QAction("Cl&ose", self, statusTip="Close the active window", triggered=self.mdiArea.closeActiveSubWindow) self.outputsAct = QAction("Outputs", self, statusTip="Open the outputs panel", triggered=self.openOutputsPanel) self.scenarioAct = QAction("Scenario", self, statusTip="Open the scenario panel", triggered=self.openScenarioPanel) self.closeAllAct = QAction("Close &All", self, statusTip="Close all the windows", triggered=self.mdiArea.closeAllSubWindows) self.nextAct = QAction("Ne&xt", self, shortcut=QKeySequence.NextChild, statusTip="Move the focus to the next window", triggered=self.mdiArea.activateNextSubWindow) self.previousAct = QAction("Pre&vious", self, shortcut=QKeySequence.PreviousChild, statusTip="Move the focus to the previous window", triggered=self.mdiArea.activatePreviousSubWindow) self.separatorAct = QAction(self) self.separatorAct.setSeparator(True) self.aboutAct = QAction("&About", self, statusTip="Show the application's About box", triggered=self.about) def createMenus(self): """create all menus""" self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.addAction(self.newAct) self.fileMenu.addAction(self.openAct) self.fileMenu.addAction(self.saveAct) self.fileMenu.addAction(self.saveAsAct) self.fileMenu.addSeparator() self.fileMenu.addAction(self.openFolderAct) self.fileMenu.addAction(self.exitAct) self.viewMenu = self.menuBar().addMenu("&View") self.viewMenu.addAction(self.outputsAct) self.viewMenu.addAction(self.scenarioAct) self.windowMenu = self.menuBar().addMenu("&Window") self.updateWindowMenu() self.windowMenu.aboutToShow.connect(self.updateWindowMenu) self.menuBar().addSeparator() self.helpMenu = self.menuBar().addMenu("&Help") self.helpMenu.addAction(self.aboutAct) def createStatusBar(self): """create the status bar""" self.statusBar().showMessage("Ready") def readSettings(self): """read the settings""" settings = QSettings('Pixel Stereo', 'lekture') pos = settings.value('pos', QPoint(200, 200)) size = settings.value('size', QSize(1000, 650)) self.move(pos) self.resize(size) def writeSettings(self): """write settings""" settings = QSettings('Pixel Stereo', 'lekture') settings.setValue('pos', self.pos()) settings.setValue('size', self.size()) def activeProjekt(self): """return the active project object""" activeSubWindow = self.mdiArea.activeSubWindow() if activeSubWindow: return activeSubWindow.widget() else: return None def findProjekt(self, fileName): """return the project""" canonicalFilePath = QFileInfo(fileName).canonicalFilePath() for window in self.mdiArea.subWindowList(): if window.widget().currentFile() == canonicalFilePath: return window return None def setActiveSubWindow(self, window): """set the active sub window""" if window: self.mdiArea.setActiveSubWindow(window) def openOutputsPanel(self): """switch to the outputs editor""" if self.child: project = self.activeProjekt() project.scenario_events_group.setVisible(False) project.outputs_group.setVisible(True) self.scenarioAct.setVisible(True) self.outputsAct.setVisible(False) def openScenarioPanel(self): """switch to the scenario editors""" if self.child: project = self.activeProjekt() project.outputs_group.setVisible(False) project.scenario_events_group.setVisible(True) self.scenarioAct.setVisible(False) self.outputsAct.setVisible(True)
class MyMainWindow(QMainWindow): window_index = 1 def __init__(self): super(QMainWindow, self).__init__() self.mdi_area = QMdiArea() self.setCentralWidget(self.mdi_area) self.__init_menu() def __init_menu(self): menu_bar = self.menuBar() file_menu = menu_bar.addMenu('File') open_action = QAction('Open', self) open_action.setShortcut('Ctrl+O') open_action.triggered.connect(self.__on_open) file_menu.addAction(open_action) exit_action = QAction('Exit', self) exit_action.triggered.connect(self.close) file_menu.addAction(exit_action) window_menu = menu_bar.addMenu('Windows') close_current_action = QAction('Close Current Window', self) close_current_action.triggered.connect(self.mdi_area.closeActiveSubWindow) window_menu.addAction(close_current_action) close_all_action = QAction('Close All', self) close_all_action.triggered.connect(self.mdi_area.closeAllSubWindows) window_menu.addAction(close_all_action) cascade_action = QAction('Cascade Windows', self) cascade_action.triggered.connect(self.mdi_area.cascadeSubWindows) window_menu.addAction(cascade_action) tile_action = QAction('Title Windows', self) tile_action.triggered.connect(self.mdi_area.tileSubWindows) window_menu.addAction(tile_action) self.__window_list_menu = window_menu.addMenu('Window List') self.__window_list_menu.aboutToShow.connect(self.__window_list_menu_about_to_show) def __window_list_menu_about_to_show(self): self.__window_list_menu.clear() windows = self.mdi_area.subWindowList() index = 1 for window in windows: action = QAction(str(index) + '. ' + window.windowTitle(), self.__window_list_menu) action.setProperty('WindowObject', window) action.triggered.connect(self.__on_select_window) self.__window_list_menu.addAction(action) index += 1 def __on_select_window(self): action = self.sender() window = action.property('WindowObject') self.mdi_area.setActiveSubWindow(window) def __on_open(self): window = QMdiSubWindow() window.setAttribute(Qt.WA_DeleteOnClose, True) window.setWindowTitle('Sub Window ' + str(MyMainWindow.window_index)) window.resize(300, 200) self.mdi_area.addSubWindow(window) window.show() MyMainWindow.window_index += 1
def resizeEvent(self, QResizeEvent): QMdiArea.resizeEvent(self,QResizeEvent) if self.bg_pixmap is not None: qbrush_bg = QtGui.QBrush(QtGui.QColor() ,self.bg_pixmap.scaled(QResizeEvent.size())) self.setBackground(qbrush_bg)