def createToolBox(self): self.buttonGroup = QButtonGroup() self.buttonGroup.setExclusive(False) self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked) layout = QGridLayout() layout.addWidget(self.createCellWidget("Diamond", ITGItem.Diamond), 0, 0) layout.addWidget(self.createCellWidget("Square", ITGItem.Square), 0, 1) layout.addWidget( self.createCellWidget("Parallelogram", ITGItem.Parallelogram), 1, 0) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) itemWidget = QWidget() itemWidget.setLayout(layout) self.backgroundButtonGroup = QButtonGroup() self.toolBox = QToolBox() self.toolBox.setSizePolicy( QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)) self.toolBox.setMinimumWidth(itemWidget.sizeHint().width()) self.toolBox.addItem(itemWidget, "Basic Components")
def create_framework_toolbox(self): framework_layers = frameworks_utils.get_framework_layers( self.get_selected_framework()) self.framework_layers_button_group = QButtonGroup() self.framework_layers_button_group.setExclusive(False) self.framework_layers_button_group.buttonClicked[int].connect( self.framework_layers_button_group_clicked) layout = QGridLayout() for framework_layer in framework_layers: layout.addWidget( self.create_framework_layer_widget(framework_layer())) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) item_widget = QWidget() item_widget.setLayout(layout) self.framework_toolbox = QToolBox() self.framework_toolbox.setSizePolicy( QSizePolicy( QSizePolicy.Maximum, QSizePolicy.Ignored, ), ) self.framework_toolbox.setMinimumWidth(item_widget.sizeHint().width()) self.framework_toolbox.addItem(item_widget, main_window_constants.LAYERS)
def __init__(self, parent: QWidget = None, scene: 'PMGraphicsScene' = None): super().__init__(parent) self.groups = ['simple_calc', 'logic', 'matrix', 'plot', 'io'] self.node_info_dic: Dict[str, List[Dict[str, object]]] = { key: [] for key in self.groups } self.setLayout(QVBoxLayout()) self.top_layout = QHBoxLayout() self.layout().addLayout(self.top_layout) self.button_edit = QPushButton('Edit') self.button_add = QPushButton('Add') self.top_layout.addWidget(self.button_edit) self.top_layout.addWidget(self.button_add) self.button_edit.clicked.connect(self.on_edit) self.button_add.clicked.connect(self.on_add) self.toolbox = QToolBox() self.list_widgets: Dict[str, QListWidget] = {} for text in self.groups: list_widget = QListWidget() list_widget.doubleClicked.connect(self.on_item_double_clicked) self.layout().addWidget(self.toolbox) self.toolbox.addItem(list_widget, text) self.list_widgets[text] = list_widget self.scene: 'PMGraphicsScene' = scene self.load_nodes()
class One(QObject): def __init__(self, parent): super().__init__() self._parent = parent self._board = QWidget(self._parent) self._board.resize(300, 300) self._board.setStyleSheet( 'QWidget {background-color: rgb(60, 60, 60)}') self._board.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.NoDropShadowWindowHint) # BUTTON self._button = QPushButton(self._parent) self._button.resize(30, 30) self._button.move(50, 50) self._button.setText('ok') self._button.setStyleSheet( 'QPushButton {background: rgb(255, 255, 255)}') self._button.pressed.connect(self._pressed) self._button.released.connect(self._released) # TEST_WIDGET self._test_widget1 = QToolBox(self._parent) self._test_widget1.resize(100, 100) self._button.show() self._test_widget1.show() self._board.show() def _pressed(self): self._test_widget1.setStyleSheet( 'QToolBox {background-color: rgb(255, 0, 0)}') self._test_widget1.setVisible(True) self._button.setText('Pressed') def _released(self): self._test_widget1.setVisible(False) self._button.setText('Released')
def __init__(self): QWidget.__init__(self) # Add a toolbox to the sidebar: self.toolbox = QToolBox() # Each tab of the toolbox contains a widget: self.hdfViewerTab = kstHDFViewer() # Configure the alignment tab: self.preprocessingTab = kstPreprocessingPanel() # Configure the refocusing tab: self.reconstructionTab = kstReconstructionPanel() # Configure the whole widget: self.toolbox.addItem(self.hdfViewerTab, KST_SIDEBAR_HDFVIEW) self.toolbox.addItem(self.preprocessingTab, KST_SIDEBAR_PREPROC) self.toolbox.addItem(self.reconstructionTab, KST_SIDEBAR_RECON) # Define layout: layout = QVBoxLayout() layout.addWidget(self.toolbox) layout.setContentsMargins(10, 10, 2, 10) #left,top,right,bottom self.setLayout(layout)
def __init__(self): self.__widget = QWidget() self.__grid = QGridLayout() self.__widget.setLayout(self.__grid) self.__label = QLabel(self.__widget) self.__label.setText('Enter country name: ') self.__grid.addWidget(self.__label, 0, 0) self.__entry = QLineEdit(self.__widget) self.__entry.setPlaceholderText('Type country...') self.__grid.addWidget(self.__entry, 0, 1) self.__button = QPushButton(self.__widget) self.__button.setText('Search') self.__button.clicked.connect(self.__make_request) self.__grid.addWidget(self.__button, 0, 2) self.__toolbox = QToolBox() self.__grid.addWidget(self.__toolbox) self.__data_label = QLabel() self.__toolbox.addItem(self.__data_label, 'Data:') self.__widget.setWindowTitle('Covid App') self.__widget.show()
def init_window(self): self.setWindowIcon(QtGui.QIcon(self.iconName)) self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.setStyleSheet("background-color:orange") vbox = QVBoxLayout() toolbox = QToolBox() toolbox.setStyleSheet("background-color:grey") vbox.addWidget(toolbox) label = QLabel() toolbox.addItem(label, "Python") label1 = QLabel() toolbox.addItem(label1, "Java") label2 = QLabel() toolbox.addItem(label2, "C++") self.setLayout(vbox) self.show()
def createToolBox(self): self.buttonGroup = QButtonGroup() self.buttonGroup.setExclusive(False) self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked) layout = QGridLayout() layout.addWidget(self.createCellWidget("Conditional", DiagramItem.Conditional), 0, 0) layout.addWidget(self.createCellWidget("Process", DiagramItem.Step), 0, 1) layout.addWidget(self.createCellWidget("Input/Output", DiagramItem.Io), 1, 0) textButton = QToolButton() textButton.setCheckable(True) self.buttonGroup.addButton(textButton, self.InsertTextButton) textButton.setIcon(QIcon(QPixmap(':/images/textpointer.png').scaled(30, 30))) textButton.setIconSize(QSize(50, 50)) textLayout = QGridLayout() textLayout.addWidget(textButton, 0, 0, Qt.AlignHCenter) textLayout.addWidget(QLabel("Text"), 1, 0, Qt.AlignCenter) textWidget = QWidget() textWidget.setLayout(textLayout) layout.addWidget(textWidget, 1, 1) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) itemWidget = QWidget() itemWidget.setLayout(layout) self.backgroundButtonGroup = QButtonGroup() self.backgroundButtonGroup.buttonClicked.connect(self.backgroundButtonGroupClicked) backgroundLayout = QGridLayout() backgroundLayout.addWidget(self.createBackgroundCellWidget("Blue Grid", ':/images/background1.png'), 0, 0) backgroundLayout.addWidget(self.createBackgroundCellWidget("White Grid", ':/images/background2.png'), 0, 1) backgroundLayout.addWidget(self.createBackgroundCellWidget("Gray Grid", ':/images/background3.png'), 1, 0) backgroundLayout.addWidget(self.createBackgroundCellWidget("No Grid", ':/images/background4.png'), 1, 1) backgroundLayout.setRowStretch(2, 10) backgroundLayout.setColumnStretch(2, 10) backgroundWidget = QWidget() backgroundWidget.setLayout(backgroundLayout) self.toolBox = QToolBox() self.toolBox.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)) self.toolBox.setMinimumWidth(itemWidget.sizeHint().width()) self.toolBox.addItem(itemWidget, "Basic Flowchart Shapes") self.toolBox.addItem(backgroundWidget, "Backgrounds")
def __init__(self): super().__init__() signal.signal(signal.SIGINT, self.exit) # WIDGET self._widget = QWidget(self) self.setCentralWidget(self._widget) self.resize(900, 900) self._widget.event = types.MethodType(self._handle_event, self._widget) self._widget.setAttribute(Qt.WA_AcceptTouchEvents | Qt.WA_TranslucentBackground) self._widget.setWindowFlags(Qt.NoDropShadowWindowHint) # VTK self._vtk_widget = QVTKRenderWindowInteractor(self._widget) self._vtk_widget.resize(900, 900) self._ren_win = self._vtk_widget.GetRenderWindow() self._interactor = self._ren_win.GetInteractor() self._vtk_widget.SetInteractorStyle(InteractorStyle()) # # TEST_WIDGET self._test_widget = QWidget(self) self._test_widget.resize(300, 300) self._test_widget.setStyleSheet( 'QWidget {background: rgb(60, 60, 60)}') # TEST_BTN self._button = QPushButton(self._test_widget) self._button.setText('test') self._button.setStyleSheet( 'QPushButton {background: rgb(255, 255, 255)}') self._button.pressed.connect(self._pressed) self._button.released.connect(self._released) self._button.resize(100, 30) self._button.move(100, 200) self._test_widget1 = QToolBox(self._test_widget) self._test_widget1.resize(100, 100) self._test_widget1.show() self._button.show() self._test_widget.show() # RENDER self._renderer = vtk.vtkOpenGLRenderer() self._renderer.SetBackground((0, 0, 0)) self._renderer.AddActor(self._axis_actor()) for actor in self._stl_actor().values(): self._renderer.AddActor(actor) self._camera = self._renderer.GetActiveCamera() self._ren_win.AddRenderer(self._renderer) self._ren_win.Render() # CAMERA self._camera = self._renderer.GetActiveCamera() self._camera.SetPosition(13, 0, 0) self._vtk_widget.Start() # TIMER self._timer = QTimer() self._timer.setInterval(int(1000 / 60)) self._timer.timeout.connect(self._render_once) self._timer.start()
def initUI(self): vbox = QVBoxLayout() toolbox = QToolBox() toolbox.setStyleSheet('background-color:green') toolbox.addItem(QLabel(), "Python") toolbox.addItem(QLabel(), "Java") toolbox.addItem(QLabel(), "C++") vbox.addWidget(toolbox) self.setLayout(vbox)
def __init__(self, gWindow, hashRef, maxItems=16, parent=None): super(IPFSHashExplorerToolBox, self).__init__(gWindow) self.rootHash = hashRef self.maxItems = maxItems self.toolbox = QToolBox() self.exLayout = QVBoxLayout() self.exLayout.addWidget(self.toolbox) self.vLayout.addLayout(self.exLayout) if self.rootHash: self.viewHash(self.rootHash)
def __init__(self, dockwidget): super(QuickInsert, self).__init__(dockwidget) self._dockwidget = weakref.ref(dockwidget) # filled in by ButtonGroup subclasses self.actionDict = {} layout = QVBoxLayout() self.setLayout(layout) layout.setContentsMargins(0, 0, 0, 0) self.helpButton = QToolButton( icon=icons.get("help-contents"), autoRaise=True, clicked=lambda: userguide.show("quickinsert")) self.directionLabel = QLabel() self.direction = QComboBox() self.direction.addItems(['', '', '']) self.direction.setItemIcon(0, icons.get("go-up")) self.direction.setItemIcon(2, icons.get("go-down")) self.direction.setCurrentIndex(1) hor = QHBoxLayout() hor.setContentsMargins(0, 0, 0, 0) hor.addWidget(self.helpButton) hor.addWidget(self.directionLabel) hor.addWidget(self.direction) layout.addLayout(hor) self.toolbox = QToolBox(self) gadgets.toolboxwheeler.ToolBoxWheeler(self.toolbox) layout.addWidget(self.toolbox) for cls in ( articulations.Articulations, dynamics.Dynamics, spanners.Spanners, barlines.BarLines, ): widget = cls(self) self.toolbox.addItem(widget, widget.icon(), '') app.translateUI(self) userguide.openWhatsThis(self) # restore remembered current page name = QSettings().value("quickinsert/current_tool", "", str) if name: for i in range(self.toolbox.count()): if name == self.toolbox.widget(i).__class__.__name__.lower(): self.toolbox.setCurrentIndex(i) break self.toolbox.currentChanged.connect(self.slotCurrentChanged)
def __init__(self, parent=None): super(Window, self).__init__(parent) # tool box tool_box = QToolBox() # items tool_box.addItem(QPlainTextEdit('Text 1'), 'Page 1') tool_box.addItem(QPlainTextEdit('Text 2'), 'Page 2') # vertical box layout vlayout = QVBoxLayout() vlayout.addWidget(tool_box) self.setLayout(vlayout)
class Window: def __init__(self): self.__widget = QWidget() self.__grid = QGridLayout() self.__widget.setLayout(self.__grid) self.__label = QLabel(self.__widget) self.__label.setText('Enter country name: ') self.__grid.addWidget(self.__label, 0, 0) self.__entry = QLineEdit(self.__widget) self.__entry.setPlaceholderText('Type country...') self.__grid.addWidget(self.__entry, 0, 1) self.__button = QPushButton(self.__widget) self.__button.setText('Search') self.__button.clicked.connect(self.__make_request) self.__grid.addWidget(self.__button, 0, 2) self.__toolbox = QToolBox() self.__grid.addWidget(self.__toolbox) self.__data_label = QLabel() self.__toolbox.addItem(self.__data_label, 'Data:') self.__widget.setWindowTitle('Covid App') self.__widget.show() def __make_request(self): if self.__entry.text(): req = Request("GET", self.__entry.text()) res = req.get_api() if res: return self.__set_data(res) else: return else: Error('Enter country name') self.__data_label.setText("") def __set_data(self, data_item): if data_item['Country_text'].lower() == 'world': Error('Type valid country name') else: self.__data_label.setText( f"Cases: {data_item['Total Cases_text']}\n" f"Deaths: {data_item['Total Deaths_text']}\n" f"Recovered: {data_item['Total Recovered_text']}")
class LicenseDialog(QDialog, license_dialog.Ui_Dialog): accepted = pyqtSignal() rejected = pyqtSignal() def __init__(self, parent=None, allow_close=False): super().__init__(parent) self.setupUi(self) if parent: self.setModal(True) if allow_close: self.accept_button.hide() self.decline_button.hide() else: self.close_button.hide() self.licenses = QToolBox() self.lic_layout.addWidget(self.licenses) self.__allow_close = allow_close self.__accepted = False self._init_licenses() def _init_licenses(self): for lic in self._load_licenses(): box = QTextEdit() box.setReadOnly(True) box.setPlainText(lic[1]) self.licenses.addItem(box, lic[0]) def _load_licenses(self): yield ("fluedit", "All rights reserved") yield ("other", "TODO") # TODO: load licenses def on_rejected(self): self.rejected.emit() self.close() def on_accepted(self): self.accepted.emit() self.__accepted = True self.close() def closeEvent(self, _ev): if not self.__allow_close and not self.__accepted: self.rejected.emit()
def create_tool_box(self): self.button_group = QButtonGroup() self.button_group.setExclusive(False) self.button_group.buttonClicked[int].connect(self.button_group_clicked) layout = QGridLayout() layout.addWidget(self.create_cell_widget("Source", "source"), 0, 0) layout.addWidget(self.create_cell_widget("Channel", "channel"), 0, 1) layout.addWidget(self.create_cell_widget("Sink", "sink"), 1, 0) text_button = QToolButton() text_button.setCheckable(True) self.button_group.addButton(text_button, self.InsertTextButton) text_button.setIcon(QIcon(QPixmap(':/images/textpointer.png').scaled(30, 30))) text_button.setIconSize(QSize(50, 50)) text_layout = QGridLayout() text_layout.addWidget(text_button, 0, 0, Qt.AlignHCenter) text_layout.addWidget(QLabel("Text"), 1, 0, Qt.AlignCenter) text_widget = QWidget() text_widget.setLayout(text_layout) layout.addWidget(text_widget, 1, 1) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) item_widget = QWidget() item_widget.setLayout(layout) self.tool_box = QToolBox() self.tool_box.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)) self.tool_box.setMinimumWidth(item_widget.sizeHint().width()) self.tool_box.addItem(item_widget, "Basic Flume Items")
def init_widgets(self): self.janus.widgets["mainwindow"] = QMainWindow() self.janus.widgets["mainwindow"].setWindowTitle(self.applicationName()) central_widget = QWidget(self.janus.widgets["mainwindow"]) self.janus.widgets["mainwindowlayout"] = QHBoxLayout(central_widget) self.janus.widgets["mainwindow"].resize(1368, 768) self.janus.widgets["mainwindow"].setCentralWidget(central_widget) #plot plot_row_widget = QWidget(central_widget) self.janus.widgets["plotlayout"] = QVBoxLayout(plot_row_widget) self.janus.widgets["plot"] = Plot(central_widget) self.janus.widgets["plot"].widget.setSizePolicy(QSizePolicy( QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding)) self.janus.widgets["plot"].widget.setLabels(left="events [arbitrary unit]", bottom="energy [eV]") self.janus.widgets["plot"].add_line_item(1, pos=6930.3, label="Co Kα1") self.janus.widgets["plotlayout"].addWidget(self.janus.widgets["plot"].widget, 3) self.janus.widgets["elementtable"] = AcqXrfElementsTable(plot_row_widget) self.janus.widgets["plotlayout"].addWidget(self.janus.widgets["elementtable"].widget, 1) self.janus.widgets["mainwindowlayout"].addWidget(plot_row_widget, 3) #acquisition methods methods_row_widget = QWidget(central_widget) self.janus.widgets["methodrowlayout"] = QVBoxLayout(methods_row_widget) self.janus.widgets["acqmethods"] = QToolBox(central_widget) self.janus.widgets["acqxrf"] = AcqXrfParameters(self.janus.widgets["acqmethods"]) self.janus.widgets["acqmethods"].addItem(self.janus.widgets["acqxrf"].widget, "XRF Spectrum") self.janus.widgets["acqxanes"] = AcqXanesParameters(self.janus.widgets["acqmethods"]) self.janus.widgets["acqmethods"].addItem(self.janus.widgets["acqxanes"].widget, "XANES Scan") self.janus.widgets["acqrun"] = AcqRunParameters(central_widget) self.janus.widgets["methodrowlayout"].addWidget(self.janus.widgets["acqmethods"], 3) self.janus.widgets["methodrowlayout"].addWidget(self.janus.widgets["acqrun"].widget, 1) self.janus.widgets["mainwindowlayout"].addWidget(methods_row_widget, 1) self.janus.widgets["acqprogressdialog"] = AcqProgressDialog(self.janus.widgets["mainwindow"])
def init_ui(self): vbox = QVBoxLayout() toolbox = QToolBox() toolbox.setStyleSheet("background-color:green") vbox.addWidget(toolbox) label = QLabel() toolbox.addItem(label, "Python") label = QLabel() toolbox.addItem(label, "Java") label = QLabel() toolbox.addItem(label, "C++") self.setLayout(vbox)
def createToolBox(self): self.buttonGroup = QButtonGroup() self.buttonGroup.setExclusive(False) self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked) layout = QGridLayout() layout.addWidget(self.createCellWidget("Diamond", ITGItem.Diamond), 0, 0) layout.addWidget(self.createCellWidget("Square", ITGItem.Square), 0, 1) layout.addWidget(self.createCellWidget("Parallelogram", ITGItem.Parallelogram), 1, 0) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) itemWidget = QWidget() itemWidget.setLayout(layout) self.backgroundButtonGroup = QButtonGroup() self.toolBox = QToolBox() self.toolBox.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)) self.toolBox.setMinimumWidth(itemWidget.sizeHint().width()) self.toolBox.addItem(itemWidget, "Basic Components")
def InitWindow(self): self.setWindowIcon(QtGui.QIcon("icon.png")) self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.setStyleSheet("background-color:yellow") vbox = QVBoxLayout() toolbox = QToolBox() vbox.addWidget(toolbox) label = QLabel() toolbox.addItem(label, "Python") toolbox.setFont(QtGui.QFont("Sanserif", 15)) label = QLabel() toolbox.addItem(label, "Java") label = QLabel() toolbox.addItem(label, "C++") self.setLayout(vbox) self.show()
def __initUI(self): vlayout = QVBoxLayout(self) self.__toolBox_ = QToolBox() vlayout.addWidget(self.__toolBox_) # 设置左侧导航栏 toolBox 初始化时的宽度 self.__toolBox_.setStyleSheet("QToolBoxButton { min-width:180px}") # 设置左侧导航栏 toolBox 在左右拉拽时的最小宽度 self.__toolBox_.setMinimumWidth(100) # 设置软件启动时默认打开导航栏的第几个 Item;这里设置的是打开第1个 Item。 self.__toolBox_.setCurrentIndex(0) # self.__toolBox_.setFrameShape(QToolBox.Shape.StyledPanel) # 为toolbox增加边框 # self.__toolBox_.set self.setFileInfoText(info) self.setTlvSdpText(sdp) self.setTlvCodecText('')
def createLeft(self): leftBox = QToolBox() leftSys = self.createLeftSys() leftBind = self.createLeftBind() leftBox.setSizePolicy( QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum)) leftBox.addItem(leftSys, "系统信息") leftBox.addItem(leftBind, "BIND调整") return leftBox
def set_combobox_index(combo_box: QtWidgets.QToolBox): try: if (int(configs.load_state_value(combo_box.objectName(), INDEX)) < combo_box.count()): combo_box.setCurrentIndex( int(configs.load_state_value(combo_box.objectName(), INDEX))) except ValueError: configs.save_state_value(combo_box.objectName(), INDEX, str(combo_box.currentIndex()))
def InitWindow(self): self.setWindowIcon(QtGui.QIcon(self.IconName)) self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) #self.setStyleSheet('background-color:green') vbox = QVBoxLayout() toolbox = QToolBox() toolbox.setStyleSheet('background-color:green') self.label = QLabel() self.label2 = QLabel() self.label3 = QLabel() toolbox.addItem(self.label, "Python") toolbox.addItem(self.label2, "Java") toolbox.addItem(self.label3, "C++") vbox.addWidget(toolbox) self.setLayout(vbox) self.show()
def __init__(self, parent=None, allow_close=False): super().__init__(parent) self.setupUi(self) if parent: self.setModal(True) if allow_close: self.accept_button.hide() self.decline_button.hide() else: self.close_button.hide() self.licenses = QToolBox() self.lic_layout.addWidget(self.licenses) self.__allow_close = allow_close self.__accepted = False self._init_licenses()
def _create_image_processes_boxes(self): tool_box = QToolBox() for page in TYPES: qwidget = QWidget() vbox = QVBoxLayout() for image_process in self.model.transformations + self.model.splits: if image_process.process_type == page: vbox.addWidget(image_process.gui(self.image_widget)) vbox.addStretch() apply_button = QPushButton("Apply") apply_button.setToolTip("Apply changes and redraw image") apply_button.clicked.connect(self._apply_clicked_handler) hbox = QHBoxLayout() hbox.addStretch() hbox.addWidget(apply_button) vbox.addLayout(hbox) qwidget.setLayout(vbox) tool_box.addItem(qwidget, page[1]) return tool_box
def initUi(self): layout = QGridLayout() tool_box = QToolBox() linux_button = QPushButton('Linux') tool_box.addItem(linux_button, 'Linux') windows_button = QPushButton('Windows') tool_box.addItem(windows_button, 'Windows') mac_button = QPushButton('Mac') tool_box.addItem(mac_button, 'Mac') android_button = QPushButton('Android') tool_box.addItem(android_button, 'Android') layout.addWidget(tool_box, 0, 0) self.setLayout(layout)
def __init__(self, dockwidget): super(QuickInsert, self).__init__(dockwidget) self._dockwidget = weakref.ref(dockwidget) # filled in by ButtonGroup subclasses self.actionDict = {} layout = QVBoxLayout() self.setLayout(layout) layout.setContentsMargins(0, 0, 0, 0) self.helpButton = QToolButton( icon = icons.get("help-contents"), autoRaise = True, clicked = lambda: userguide.show("quickinsert")) self.directionLabel = QLabel() self.direction = QComboBox() self.direction.addItems(['', '', '']) self.direction.setItemIcon(0, icons.get("go-up")) self.direction.setItemIcon(2, icons.get("go-down")) self.direction.setCurrentIndex(1) hor = QHBoxLayout() hor.setContentsMargins(0, 0, 0, 0) hor.addWidget(self.helpButton) hor.addWidget(self.directionLabel) hor.addWidget(self.direction) layout.addLayout(hor) self.toolbox = QToolBox(self) gadgets.toolboxwheeler.ToolBoxWheeler(self.toolbox) layout.addWidget(self.toolbox) for cls in ( articulations.Articulations, dynamics.Dynamics, spanners.Spanners, barlines.BarLines, ): widget = cls(self) self.toolbox.addItem(widget, widget.icon(), '') app.translateUI(self) userguide.openWhatsThis(self) # restore remembered current page name = QSettings().value("quickinsert/current_tool", "", str) if name: for i in range(self.toolbox.count()): if name == self.toolbox.widget(i).__class__.__name__.lower(): self.toolbox.setCurrentIndex(i) break self.toolbox.currentChanged.connect(self.slotCurrentChanged)
def InitUI(self): vbox = QVBoxLayout() toolbox = QToolBox() # toolbox.setStyleSheet('background-color:white') vbox.addWidget(toolbox) label = QLabel() toolbox.addItem(label, "Python") label = QLabel() toolbox.addItem(label, "Java") label = QLabel() toolbox.addItem(label, "C++") self.setLayout(vbox)
def initUI(self): self.layout = QVBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) self.requestAreaWidget = QToolBox() self.requestAreaWidget.layout().setSpacing(1) self.requestTabs = QTabWidget() self.requestTabs.setUsesScrollButtons(True) self.requestTabs.currentChanged.connect(self.__updateTabSizes__) self.requestAreaWidget.addItem(self.requestTabs, "Requests") self.requestOps = RequestsOperations(self) self.requestAreaWidget.addItem(self.requestOps, "Operations") self.generalConfig = GlobalOverpassSettingUI(self) self.requestAreaWidget.addItem(self.generalConfig, "General") self.disambiguationWidget = DisambiguationWidget( self.__getRequestByName__, self.__applyTableRow__, self) self.requestAreaWidget.addItem(self.disambiguationWidget, "Disambiguation") self.headers = self.requestAreaWidget.findChildren( QAbstractButton, "qt_toolbox_toolboxbutton") self.requestAreaWidget.currentChanged.connect( self.__onToolTabChanged__) self.headers[0].setIcon(QIcon(os.path.join(picturesDir, "arrowUp.png"))) for i in range(1, len(self.headers)): self.headers[i].setIcon( QIcon(os.path.join(picturesDir, "arrowDown.png"))) self.layout.addWidget(self.requestAreaWidget) self.setLayout(self.layout)
def __init__(self, parent=None): super().__init__(parent) self.layer_nodes = QToolBox(self) self.common_nodes = QToolBox(self) self.units_nodes = QToolBox(self) # custom pin tab self.pin_nodes = QToolBox(self) self.set_toolbox() self.set_pin_box() self.addTab(self.pin_nodes, "Pins") self.addTab(self.layer_nodes, "Layers") self.addTab(self.common_nodes, "Common") self.addTab(self.units_nodes, "Units") self.setTabIcon(0, QIcon(icon['PIN_TAB'])) self.setCurrentWidget(self.layer_nodes) self.setMinimumWidth(290) self.setMaximumWidth(500)
def gui_configuration(subwindow,parent): frame = QFrame() layout = QVBoxLayout() pushButton1 = QPushButton('Sistemas Lineares') toolbox = QToolBox() label = QLabel('Sistemas de primeira ordem') label2= QLabel('Sistemas de segunda ordem') toolbox.addItem(label,'Sistemas 1 ordem') toolbox.addItem(label2,'Sistemas 2 ordem') layout.addWidget(pushButton1) layout.addWidget(toolbox) frame.setLayout(layout) subwindow.setWidget(frame) return subwindow
class QueryUI(QWidget): def __init__(self): super().__init__() try: self.keyValues = getOfficialKeys() except RequestException: logging.warning( "There was a problem with the internet connection. You will not be able to see the existing keys." ) self.onClearPolygonF = lambda: None self.onPolygonEnabledF = lambda: None self.onPolygonDisabledF = lambda: None self.currentHtml = EMPTY_HTML self.initUI() def initUI(self): self.layout = QVBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) self.requestAreaWidget = QToolBox() self.requestAreaWidget.layout().setSpacing(1) self.requestTabs = QTabWidget() self.requestTabs.setUsesScrollButtons(True) self.requestTabs.currentChanged.connect(self.__updateTabSizes__) self.requestAreaWidget.addItem(self.requestTabs, "Requests") self.requestOps = RequestsOperations(self) self.requestAreaWidget.addItem(self.requestOps, "Operations") self.generalConfig = GlobalOverpassSettingUI(self) self.requestAreaWidget.addItem(self.generalConfig, "General") self.disambiguationWidget = DisambiguationWidget( self.__getRequestByName__, self.__applyTableRow__, self) self.requestAreaWidget.addItem(self.disambiguationWidget, "Disambiguation") self.headers = self.requestAreaWidget.findChildren( QAbstractButton, "qt_toolbox_toolboxbutton") self.requestAreaWidget.currentChanged.connect( self.__onToolTabChanged__) self.headers[0].setIcon(QIcon(os.path.join(picturesDir, "arrowUp.png"))) for i in range(1, len(self.headers)): self.headers[i].setIcon( QIcon(os.path.join(picturesDir, "arrowDown.png"))) self.layout.addWidget(self.requestAreaWidget) self.setLayout(self.layout) def __getRequestByName__(self, requestName): for requestWidget in self.findChildren(RequestWidget): if requestWidget.getName() == requestName: return requestWidget.getRequest() return None def __applyTableRow__(self, name, data): filters, ids = data for requestWidget in self.findChildren(RequestWidget): if requestWidget.getName() == name: for newFilter in filters: requestWidget.addFilter(newFilter) break if len(ids) > 0: idsRequestName = SetNameManagement.getUniqueSetName() request = OverpassRequest(OsmType.WAYS, Surround.NONE, idsRequestName) request.setIds(ids) self.addRequest(request) differenceOpName = SetNameManagement.getUniqueSetName() self.requestOps.addOp(OverpassDiff(name, differenceOpName), [idsRequestName]) self.requestOps.setOutputSet(differenceOpName) logging.info("Configuration from the table row has been applied.") def __onToolTabChanged__(self, i): for h in range(len(self.headers)): if h == i: self.headers[h].setIcon( QIcon(os.path.join(picturesDir, "arrowUp.png"))) else: self.headers[h].setIcon( QIcon(os.path.join(picturesDir, "arrowDown.png"))) def __updateTabSizes__(self, index): for i in range(self.requestTabs.count()): if i != index: self.requestTabs.widget(i).setSizePolicy( QSizePolicy.Ignored, QSizePolicy.Ignored) if index >= 0: self.requestTabs.widget(index).setSizePolicy( QSizePolicy.Preferred, QSizePolicy.Preferred) self.requestTabs.widget(index).resize( self.requestTabs.widget(index).minimumSizeHint()) self.requestTabs.widget(index).adjustSize() def setOnRequestChanged(self, f): self.requestTabs.currentChanged.connect(f) def addRequestByFilters(self, filters=None): requestWidget = RequestWidget(self, self.keyValues) setName = requestWidget.requestName requestWidget.changePage(self.currentHtml) self.requestTabs.addTab(requestWidget, setName) self.requestOps.addRequest(setName) self.disambiguationWidget.addSet(setName) if filters is not None: for filter in filters: requestWidget.addFilter(filter) def addRequest(self, request): if not SetNameManagement.isAvailable(request.name): raise ValueError("There is another request with the same name.") else: SetNameManagement.assign(request.name) requestWidget = RequestWidget(self, self.keyValues, request) requestWidget.changePage(self.currentHtml) self.requestTabs.addTab(requestWidget, request.name) self.requestOps.addRequest(request.name) self.disambiguationWidget.addSet(request.name) def removeRequest(self): requestName = self.requestTabs.currentWidget().getName() self.requestOps.removeSetAndDependencies(requestName) self.disambiguationWidget.removeSet(requestName) currentRequestWidget = self.requestTabs.currentWidget() SetNameManagement.releaseName(currentRequestWidget.requestName) self.requestTabs.removeTab(self.requestTabs.currentIndex()) currentRequestWidget.deleteLater() def requestsCount(self): return self.requestTabs.count() def getQuery(self): query = OverpassQuery(self.requestOps.outputSet()) query.addDate(self.generalConfig.getDate()) for i in range(self.requestTabs.count()): query.addRequest(self.requestTabs.widget(i).getRequest()) for op in self.requestOps.ops: query.addSetsOp(op) return query def setQuery(self, query): self.reset() for request in query.requests: self.addRequest(request) for op in query.ops: self.requestOps.addOp(op) if query.config.get("date") is not None: self.generalConfig.setDate( datetime.strptime(query.config["date"], "%Y-%m-%dT00:00:00Z")) else: self.generalConfig.setDate() self.requestOps.setOutputSet(query.outputSet) def reset(self): while self.requestTabs.count() > 0: self.removeRequest() self.generalConfig.setDate() def updateMaps(self, html): self.currentHtml = html for requestWidget in self.findChildren(RequestWidget): requestWidget.changePage(html) return self.getCurrentMap() def updateMapFromRow(self): return self.updateMaps( self.disambiguationWidget.getHtmlFromSelectedRow()) def getCurrentMap(self): if self.requestTabs.currentWidget() is None: return None else: return self.requestTabs.currentWidget().getMap()
def makeControlWindow(self): tb = QToolBox() tb.addItem(self.makeIpContainer(), "Connection and Run-State") tb.addItem(self.makeDisplayedParameterControl(), "Displayed Parameters") tb.addItem(self.makeSweepControl(), "Sweep Parameters") tb.addItem(self.makeCallButtonCtrl(), "Calibration") tb.setMinimumWidth(220) tb.setMaximumWidth(220) layout = QVBoxLayout() layout.addWidget(tb) layout.addStretch(1) return layout
class QuickInsert(QWidget): def __init__(self, dockwidget): super(QuickInsert, self).__init__(dockwidget) self._dockwidget = weakref.ref(dockwidget) # filled in by ButtonGroup subclasses self.actionDict = {} layout = QVBoxLayout() self.setLayout(layout) layout.setContentsMargins(0, 0, 0, 0) self.helpButton = QToolButton( icon = icons.get("help-contents"), autoRaise = True, clicked = lambda: userguide.show("quickinsert")) self.directionLabel = QLabel() self.direction = QComboBox() self.direction.addItems(['', '', '']) self.direction.setItemIcon(0, icons.get("go-up")) self.direction.setItemIcon(2, icons.get("go-down")) self.direction.setCurrentIndex(1) hor = QHBoxLayout() hor.setContentsMargins(0, 0, 0, 0) hor.addWidget(self.helpButton) hor.addWidget(self.directionLabel) hor.addWidget(self.direction) layout.addLayout(hor) self.toolbox = QToolBox(self) gadgets.toolboxwheeler.ToolBoxWheeler(self.toolbox) layout.addWidget(self.toolbox) for cls in ( articulations.Articulations, dynamics.Dynamics, spanners.Spanners, barlines.BarLines, ): widget = cls(self) self.toolbox.addItem(widget, widget.icon(), '') app.translateUI(self) userguide.openWhatsThis(self) # restore remembered current page name = QSettings().value("quickinsert/current_tool", "", str) if name: for i in range(self.toolbox.count()): if name == self.toolbox.widget(i).__class__.__name__.lower(): self.toolbox.setCurrentIndex(i) break self.toolbox.currentChanged.connect(self.slotCurrentChanged) def slotCurrentChanged(self, index): name = self.toolbox.widget(index).__class__.__name__.lower() QSettings().setValue("quickinsert/current_tool", name) def translateUI(self): self.setWhatsThis(_( "<p>With the Quick Insert Panel you can add various music " "elements to the current note or selected music.</p>\n" "<p>See {link} for more information.</p>").format(link= userguide.util.format_link("quickinsert"))) self.helpButton.setToolTip(_("Help")) self.directionLabel.setText(_("Direction:")) for item, text in enumerate((_("Up"), _("Neutral"), _("Down"))): self.direction.setItemText(item, text) for i in range(self.toolbox.count()): self.toolbox.setItemText(i, self.toolbox.widget(i).title()) self.toolbox.setItemToolTip(i, self.toolbox.widget(i).tooltip()) def actionForName(self, name): """This is called by the ShortcutCollection of our dockwidget, e.g. if the user presses a key.""" try: return self.actionDict[name] except KeyError: pass def dockwidget(self): return self._dockwidget()
class MainWindow(QMainWindow): InsertTextButton = 10 def __init__(self): super(MainWindow, self).__init__() self.createActions() self.createMenus() self.createToolBox() self.scene = DiagramScene(self.itemMenu) self.scene.setSceneRect(QRectF(0, 0, 5000, 5000)) self.scene.itemInserted.connect(self.itemInserted) self.scene.textInserted.connect(self.textInserted) self.scene.itemSelected.connect(self.itemSelected) self.createToolbars() layout = QHBoxLayout() layout.addWidget(self.toolBox) self.view = QGraphicsView(self.scene) layout.addWidget(self.view) self.widget = QWidget() self.widget.setLayout(layout) self.setCentralWidget(self.widget) self.setWindowTitle("Diagramscene") def backgroundButtonGroupClicked(self, button): buttons = self.backgroundButtonGroup.buttons() for myButton in buttons: if myButton != button: button.setChecked(False) text = button.text() if text == "Blue Grid": self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background1.png'))) elif text == "White Grid": self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background2.png'))) elif text == "Gray Grid": self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background3.png'))) else: self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background4.png'))) self.scene.update() self.view.update() def buttonGroupClicked(self, id): buttons = self.buttonGroup.buttons() for button in buttons: if self.buttonGroup.button(id) != button: button.setChecked(False) if id == self.InsertTextButton: self.scene.setMode(DiagramScene.InsertText) else: self.scene.setItemType(id) self.scene.setMode(DiagramScene.InsertItem) def deleteItem(self): for item in self.scene.selectedItems(): if isinstance(item, DiagramItem): item.removeArrows() self.scene.removeItem(item) def pointerGroupClicked(self, i): self.scene.setMode(self.pointerTypeGroup.checkedId()) def bringToFront(self): if not self.scene.selectedItems(): return selectedItem = self.scene.selectedItems()[0] overlapItems = selectedItem.collidingItems() zValue = 0 for item in overlapItems: if (item.zValue() >= zValue and isinstance(item, DiagramItem)): zValue = item.zValue() + 0.1 selectedItem.setZValue(zValue) def sendToBack(self): if not self.scene.selectedItems(): return selectedItem = self.scene.selectedItems()[0] overlapItems = selectedItem.collidingItems() zValue = 0 for item in overlapItems: if (item.zValue() <= zValue and isinstance(item, DiagramItem)): zValue = item.zValue() - 0.1 selectedItem.setZValue(zValue) def itemInserted(self, item): self.pointerTypeGroup.button(DiagramScene.MoveItem).setChecked(True) self.scene.setMode(self.pointerTypeGroup.checkedId()) self.buttonGroup.button(item.diagramType).setChecked(False) def textInserted(self, item): self.buttonGroup.button(self.InsertTextButton).setChecked(False) self.scene.setMode(self.pointerTypeGroup.checkedId()) def currentFontChanged(self, font): self.handleFontChange() def fontSizeChanged(self, font): self.handleFontChange() def sceneScaleChanged(self, scale): newScale = scale.left(scale.indexOf("%")).toDouble()[0] / 100.0 oldMatrix = self.view.matrix() self.view.resetMatrix() self.view.translate(oldMatrix.dx(), oldMatrix.dy()) self.view.scale(newScale, newScale) def textColorChanged(self): self.textAction = self.sender() self.fontColorToolButton.setIcon( self.createColorToolButtonIcon(':/images/textpointer.png', QColor(self.textAction.data()))) self.textButtonTriggered() def itemColorChanged(self): self.fillAction = self.sender() self.fillColorToolButton.setIcon( self.createColorToolButtonIcon( ':/images/floodfill.png', QColor(self.fillAction.data()))) self.fillButtonTriggered() def lineColorChanged(self): self.lineAction = self.sender() self.lineColorToolButton.setIcon( self.createColorToolButtonIcon(':/images/linecolor.png', QColor(self.lineAction.data()))) self.lineButtonTriggered() def textButtonTriggered(self): self.scene.setTextColor(QColor(self.textAction.data())) def fillButtonTriggered(self): self.scene.setItemColor(QColor(self.fillAction.data())) def lineButtonTriggered(self): self.scene.setLineColor(QColor(self.lineAction.data())) def handleFontChange(self): font = self.fontCombo.currentFont() font.setPointSize(self.fontSizeCombo.currentText().toInt()[0]) if self.boldAction.isChecked(): font.setWeight(QFont.Bold) else: font.setWeight(QFont.Normal) font.setItalic(self.italicAction.isChecked()) font.setUnderline(self.underlineAction.isChecked()) self.scene.setFont(font) def itemSelected(self, item): font = item.font() color = item.defaultTextColor() self.fontCombo.setCurrentFont(font) self.fontSizeCombo.setEditText(str(font.pointSize())) self.boldAction.setChecked(font.weight() == QFont.Bold) self.italicAction.setChecked(font.italic()) self.underlineAction.setChecked(font.underline()) def about(self): QMessageBox.about(self, "About Diagram Scene", "The <b>Diagram Scene</b> example shows use of the graphics framework.") def createToolBox(self): self.buttonGroup = QButtonGroup() self.buttonGroup.setExclusive(False) self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked) layout = QGridLayout() layout.addWidget(self.createCellWidget("Conditional", DiagramItem.Conditional), 0, 0) layout.addWidget(self.createCellWidget("Process", DiagramItem.Step), 0, 1) layout.addWidget(self.createCellWidget("Input/Output", DiagramItem.Io), 1, 0) textButton = QToolButton() textButton.setCheckable(True) self.buttonGroup.addButton(textButton, self.InsertTextButton) textButton.setIcon(QIcon(QPixmap(':/images/textpointer.png').scaled(30, 30))) textButton.setIconSize(QSize(50, 50)) textLayout = QGridLayout() textLayout.addWidget(textButton, 0, 0, Qt.AlignHCenter) textLayout.addWidget(QLabel("Text"), 1, 0, Qt.AlignCenter) textWidget = QWidget() textWidget.setLayout(textLayout) layout.addWidget(textWidget, 1, 1) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) itemWidget = QWidget() itemWidget.setLayout(layout) self.backgroundButtonGroup = QButtonGroup() self.backgroundButtonGroup.buttonClicked.connect(self.backgroundButtonGroupClicked) backgroundLayout = QGridLayout() backgroundLayout.addWidget(self.createBackgroundCellWidget("Blue Grid", ':/images/background1.png'), 0, 0) backgroundLayout.addWidget(self.createBackgroundCellWidget("White Grid", ':/images/background2.png'), 0, 1) backgroundLayout.addWidget(self.createBackgroundCellWidget("Gray Grid", ':/images/background3.png'), 1, 0) backgroundLayout.addWidget(self.createBackgroundCellWidget("No Grid", ':/images/background4.png'), 1, 1) backgroundLayout.setRowStretch(2, 10) backgroundLayout.setColumnStretch(2, 10) backgroundWidget = QWidget() backgroundWidget.setLayout(backgroundLayout) self.toolBox = QToolBox() self.toolBox.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)) self.toolBox.setMinimumWidth(itemWidget.sizeHint().width()) self.toolBox.addItem(itemWidget, "Basic Flowchart Shapes") self.toolBox.addItem(backgroundWidget, "Backgrounds") def createActions(self): self.toFrontAction = QAction( QIcon(':/images/bringtofront.png'), "Bring to &Front", self, shortcut="Ctrl+F", statusTip="Bring item to front", triggered=self.bringToFront) self.sendBackAction = QAction( QIcon(':/images/sendtoback.png'), "Send to &Back", self, shortcut="Ctrl+B", statusTip="Send item to back", triggered=self.sendToBack) self.deleteAction = QAction(QIcon(':/images/delete.png'), "&Delete", self, shortcut="Delete", statusTip="Delete item from diagram", triggered=self.deleteItem) self.exitAction = QAction("E&xit", self, shortcut="Ctrl+X", statusTip="Quit Scenediagram example", triggered=self.close) self.boldAction = QAction(QIcon(':/images/bold.png'), "Bold", self, checkable=True, shortcut="Ctrl+B", triggered=self.handleFontChange) self.italicAction = QAction(QIcon(':/images/italic.png'), "Italic", self, checkable=True, shortcut="Ctrl+I", triggered=self.handleFontChange) self.underlineAction = QAction( QIcon(':/images/underline.png'), "Underline", self, checkable=True, shortcut="Ctrl+U", triggered=self.handleFontChange) self.aboutAction = QAction("A&bout", self, shortcut="Ctrl+B", triggered=self.about) def createMenus(self): self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.addAction(self.exitAction) self.itemMenu = self.menuBar().addMenu("&Item") self.itemMenu.addAction(self.deleteAction) self.itemMenu.addSeparator() self.itemMenu.addAction(self.toFrontAction) self.itemMenu.addAction(self.sendBackAction) self.aboutMenu = self.menuBar().addMenu("&Help") self.aboutMenu.addAction(self.aboutAction) def createToolbars(self): self.editToolBar = self.addToolBar("Edit") self.editToolBar.addAction(self.deleteAction) self.editToolBar.addAction(self.toFrontAction) self.editToolBar.addAction(self.sendBackAction) self.fontCombo = QFontComboBox() self.fontCombo.currentFontChanged.connect(self.currentFontChanged) self.fontSizeCombo = QComboBox() self.fontSizeCombo.setEditable(True) for i in range(8, 30, 2): self.fontSizeCombo.addItem(str(i)) validator = QIntValidator(2, 64, self) self.fontSizeCombo.setValidator(validator) self.fontSizeCombo.currentIndexChanged.connect(self.fontSizeChanged) self.fontColorToolButton = QToolButton() self.fontColorToolButton.setPopupMode(QToolButton.MenuButtonPopup) self.fontColorToolButton.setMenu( self.createColorMenu(self.textColorChanged, Qt.black)) self.textAction = self.fontColorToolButton.menu().defaultAction() self.fontColorToolButton.setIcon( self.createColorToolButtonIcon(':/images/textpointer.png', Qt.black)) self.fontColorToolButton.setAutoFillBackground(True) self.fontColorToolButton.clicked.connect(self.textButtonTriggered) self.fillColorToolButton = QToolButton() self.fillColorToolButton.setPopupMode(QToolButton.MenuButtonPopup) self.fillColorToolButton.setMenu( self.createColorMenu(self.itemColorChanged, Qt.white)) self.fillAction = self.fillColorToolButton.menu().defaultAction() self.fillColorToolButton.setIcon( self.createColorToolButtonIcon(':/images/floodfill.png', Qt.white)) self.fillColorToolButton.clicked.connect(self.fillButtonTriggered) self.lineColorToolButton = QToolButton() self.lineColorToolButton.setPopupMode(QToolButton.MenuButtonPopup) self.lineColorToolButton.setMenu( self.createColorMenu(self.lineColorChanged, Qt.black)) self.lineAction = self.lineColorToolButton.menu().defaultAction() self.lineColorToolButton.setIcon( self.createColorToolButtonIcon(':/images/linecolor.png', Qt.black)) self.lineColorToolButton.clicked.connect(self.lineButtonTriggered) self.textToolBar = self.addToolBar("Font") self.textToolBar.addWidget(self.fontCombo) self.textToolBar.addWidget(self.fontSizeCombo) self.textToolBar.addAction(self.boldAction) self.textToolBar.addAction(self.italicAction) self.textToolBar.addAction(self.underlineAction) self.colorToolBar = self.addToolBar("Color") self.colorToolBar.addWidget(self.fontColorToolButton) self.colorToolBar.addWidget(self.fillColorToolButton) self.colorToolBar.addWidget(self.lineColorToolButton) pointerButton = QToolButton() pointerButton.setCheckable(True) pointerButton.setChecked(True) pointerButton.setIcon(QIcon(':/images/pointer.png')) linePointerButton = QToolButton() linePointerButton.setCheckable(True) linePointerButton.setIcon(QIcon(':/images/linepointer.png')) self.pointerTypeGroup = QButtonGroup() self.pointerTypeGroup.addButton(pointerButton, DiagramScene.MoveItem) self.pointerTypeGroup.addButton(linePointerButton, DiagramScene.InsertLine) self.pointerTypeGroup.buttonClicked[int].connect(self.pointerGroupClicked) self.sceneScaleCombo = QComboBox() self.sceneScaleCombo.addItems(["50%", "75%", "100%", "125%", "150%"]) self.sceneScaleCombo.setCurrentIndex(2) self.sceneScaleCombo.currentIndexChanged[str].connect(self.sceneScaleChanged) self.pointerToolbar = self.addToolBar("Pointer type") self.pointerToolbar.addWidget(pointerButton) self.pointerToolbar.addWidget(linePointerButton) self.pointerToolbar.addWidget(self.sceneScaleCombo) def createBackgroundCellWidget(self, text, image): button = QToolButton() button.setText(text) button.setIcon(QIcon(image)) button.setIconSize(QSize(50, 50)) button.setCheckable(True) self.backgroundButtonGroup.addButton(button) layout = QGridLayout() layout.addWidget(button, 0, 0, Qt.AlignHCenter) layout.addWidget(QLabel(text), 1, 0, Qt.AlignCenter) widget = QWidget() widget.setLayout(layout) return widget def createCellWidget(self, text, diagramType): item = DiagramItem(diagramType, self.itemMenu) icon = QIcon(item.image()) button = QToolButton() button.setIcon(icon) button.setIconSize(QSize(50, 50)) button.setCheckable(True) self.buttonGroup.addButton(button, diagramType) layout = QGridLayout() layout.addWidget(button, 0, 0, Qt.AlignHCenter) layout.addWidget(QLabel(text), 1, 0, Qt.AlignCenter) widget = QWidget() widget.setLayout(layout) return widget def createColorMenu(self, slot, defaultColor): colors = [Qt.black, Qt.white, Qt.red, Qt.blue, Qt.yellow] names = ["black", "white", "red", "blue", "yellow"] colorMenu = QMenu(self) for color, name in zip(colors, names): action = QAction(self.createColorIcon(color), name, self, triggered=slot) action.setData(QColor(color)) colorMenu.addAction(action) if color == defaultColor: colorMenu.setDefaultAction(action) return colorMenu def createColorToolButtonIcon(self, imageFile, color): pixmap = QPixmap(50, 80) pixmap.fill(Qt.transparent) painter = QPainter(pixmap) image = QPixmap(imageFile) target = QRect(0, 0, 50, 60) source = QRect(0, 0, 42, 42) painter.fillRect(QRect(0, 60, 50, 80), color) painter.drawPixmap(target, image, source) painter.end() return QIcon(pixmap) def createColorIcon(self, color): pixmap = QPixmap(20, 20) painter = QPainter(pixmap) painter.setPen(Qt.NoPen) painter.fillRect(QRect(0, 0, 20, 20), color) painter.end() return QIcon(pixmap)
class MainWindow(QMainWindow): InsertTextButton = 10 items = {-2: "source", -3: "channel", -4: "sink"} def __init__(self): import _diagramscene_rc super(MainWindow, self).__init__() self.config_manipulations = FlumeConfig(self) properties_generator.dump_props() self.create_actions() self.create_menus() self.create_tool_box() self.clicked_button_id = 0 self.scene = DiagramScene(self.item_menu) self.scene.setSceneRect(QRectF(0, 0, 5000, 5000)) self.scene.itemInserted.connect(self.item_inserted) self.scene.textInserted.connect(self.text_inserted) self.scene.itemSelected.connect(self.item_selected) self.create_tool_bars() # self.scene.enable_grid() layout = QHBoxLayout() layout.addWidget(self.tool_box) self.view = QGraphicsView(self.scene) self.view.centerOn(0, 0) layout.addWidget(self.view) self.widget = QWidget() self.widget.setLayout(layout) self.setCentralWidget(self.widget) self.setWindowTitle("The Flume Illustrator") # noinspection PyAttributeOutsideInit,PyArgumentList def create_actions(self): self.to_front_action = QAction(QIcon(':/images/bringtofront.png'), "Bring to &Front", self, shortcut="Ctrl+F", statusTip="Bring item to front", triggered=self.bring_to_front) self.send_back_action = QAction(QIcon(':/images/sendtoback.png'), "Send to &Back", self, shortcut="Ctrl+B", statusTip="Send item to back", triggered=self.send_to_back) self.bold_action = QAction(QIcon(':/images/bold.png'), "Bold", self, checkable=True, shortcut="Ctrl+B", triggered=self.handle_font_change) self.italic_action = QAction(QIcon(':/images/italic.png'), "Italic", self, checkable=True, shortcut="Ctrl+I", triggered=self.handle_font_change) self.underline_action = QAction(QIcon(':/images/underline.png'), "Underline", self, checkable=True, shortcut="Ctrl+U", triggered=self.handle_font_change) self.delete_action = QAction(QIcon(':/images/delete.png'), "Delete", self, shortcut="Delete", statusTip='Delete item from diagram', triggered=self.delete_item) self.exit_action = QAction("Exit", self, shortcut="Ctrl+X", statusTip="Quit program", triggered=self.close) self.about_action = QAction("About", self, shortcut="Ctrl+B", triggered=self.about) self.load_config_action = QAction("Load", self, shortcut="Ctrl+O", statusTip="Load config file", triggered=self.config_manipulations.load_config) self.enable_grid_action = QAction("Enable grid", self, checkable=True, triggered=self.enable_grid) # noinspection PyAttributeOutsideInit def create_menus(self): self.file_menu = self.menuBar().addMenu("File") self.file_menu.addAction(self.load_config_action) self.file_menu.addAction(self.exit_action) self.item_menu = self.menuBar().addMenu("Item") self.item_menu.addAction(self.delete_action) self.item_menu.addSeparator() self.item_menu.addAction(self.to_front_action) self.item_menu.addAction(self.send_back_action) self.about_menu = self.menuBar().addMenu("Help") self.about_menu.addAction(self.about_action) # noinspection PyAttributeOutsideInit,PyUnresolvedReferences def create_tool_box(self): self.button_group = QButtonGroup() self.button_group.setExclusive(False) self.button_group.buttonClicked[int].connect(self.button_group_clicked) layout = QGridLayout() layout.addWidget(self.create_cell_widget("Source", "source"), 0, 0) layout.addWidget(self.create_cell_widget("Channel", "channel"), 0, 1) layout.addWidget(self.create_cell_widget("Sink", "sink"), 1, 0) text_button = QToolButton() text_button.setCheckable(True) self.button_group.addButton(text_button, self.InsertTextButton) text_button.setIcon(QIcon(QPixmap(':/images/textpointer.png').scaled(30, 30))) text_button.setIconSize(QSize(50, 50)) text_layout = QGridLayout() text_layout.addWidget(text_button, 0, 0, Qt.AlignHCenter) text_layout.addWidget(QLabel("Text"), 1, 0, Qt.AlignCenter) text_widget = QWidget() text_widget.setLayout(text_layout) layout.addWidget(text_widget, 1, 1) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) item_widget = QWidget() item_widget.setLayout(layout) self.tool_box = QToolBox() self.tool_box.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)) self.tool_box.setMinimumWidth(item_widget.sizeHint().width()) self.tool_box.addItem(item_widget, "Basic Flume Items") # noinspection PyAttributeOutsideInit,PyUnresolvedReferences def create_tool_bars(self): self.edit_tool_bar = self.addToolBar("Edit") self.edit_tool_bar.addAction(self.delete_action) self.edit_tool_bar.addAction(self.to_front_action) self.edit_tool_bar.addAction(self.send_back_action) self.edit_tool_bar.addAction(self.enable_grid_action) self.font_combo = QFontComboBox() self.font_combo.currentFontChanged.connect(self.current_font_changed) self.font_size_combo = QComboBox() self.font_size_combo.setEditable(True) for i in range(8, 30, 2): self.font_size_combo.addItem(str(i)) validator = QIntValidator(2, 64, self) self.font_size_combo.setValidator(validator) self.font_size_combo.currentIndexChanged.connect(self.font_size_changed) self.font_color_tool_button = QToolButton() self.font_color_tool_button.setPopupMode(QToolButton.MenuButtonPopup) self.font_color_tool_button.setMenu( self.create_color_menu(self.text_color_changed, Qt.black)) self.text_action = self.font_color_tool_button.menu().defaultAction() self.font_color_tool_button.setIcon( self.create_color_tool_button_icon(':/images/textpointer.png', Qt.black)) self.font_color_tool_button.setAutoFillBackground(True) self.font_color_tool_button.clicked.connect(self.text_button_triggered) self.fill_color_tool_button = QToolButton() self.fill_color_tool_button.setPopupMode(QToolButton.MenuButtonPopup) self.fill_color_tool_button.setMenu( self.create_color_menu(self.item_color_changed, Qt.white)) self.fillAction = self.fill_color_tool_button.menu().defaultAction() self.fill_color_tool_button.setIcon( self.create_color_tool_button_icon(':/images/floodfill.png', Qt.white)) self.fill_color_tool_button.clicked.connect(self.fill_button_triggered) self.line_color_tool_button = QToolButton() self.line_color_tool_button.setPopupMode(QToolButton.MenuButtonPopup) self.line_color_tool_button.setMenu( self.create_color_menu(self.line_color_changed, Qt.black)) self.lineAction = self.line_color_tool_button.menu().defaultAction() self.line_color_tool_button.setIcon( self.create_color_tool_button_icon(':/images/linecolor.png', Qt.black)) self.line_color_tool_button.clicked.connect(self.line_button_triggered) self.text_tool_bar = self.addToolBar("Font") self.text_tool_bar.addWidget(self.font_combo) self.text_tool_bar.addWidget(self.font_size_combo) self.text_tool_bar.addAction(self.bold_action) self.text_tool_bar.addAction(self.italic_action) self.text_tool_bar.addAction(self.underline_action) self.color_tool_bar = self.addToolBar("Color") self.color_tool_bar.addWidget(self.font_color_tool_button) self.color_tool_bar.addWidget(self.fill_color_tool_button) self.color_tool_bar.addWidget(self.line_color_tool_button) self.loading_tool_bar = self.addToolBar("Load") self.loading_tool_bar.addAction(self.load_config_action) pointer_button = QToolButton() pointer_button.setCheckable(True) pointer_button.setChecked(True) pointer_button.setIcon(QIcon(":/images/pointer.png")) line_pointer_button = QToolButton() line_pointer_button.setCheckable(True) line_pointer_button.setIcon(QIcon(":/images/linepointer.png")) self.pointer_type_group = QButtonGroup() self.pointer_type_group.addButton(pointer_button, DiagramScene.MoveItem) self.pointer_type_group.addButton(line_pointer_button, DiagramScene.InsertLine) self.pointer_type_group.buttonClicked[int].connect(self.pointer_group_clicked) self.scene_scale_combo = QComboBox() self.scene_scale_combo.addItems(["50%", "75%", "100%", "125%", "150%"]) self.scene_scale_combo.setCurrentIndex(2) self.scene_scale_combo.currentIndexChanged[str].connect(self.scene_scale_changed) self.pointer_tool_bar = self.addToolBar("Pointer type") self.pointer_tool_bar.addWidget(pointer_button) self.pointer_tool_bar.addWidget(line_pointer_button) self.pointer_tool_bar.addWidget(self.scene_scale_combo) def button_group_clicked(self, button_id): buttons = self.button_group.buttons() self.clicked_button_id = button_id for button in buttons: if self.button_group.button(button_id) != button: button.setChecked(False) if button_id == self.InsertTextButton: self.scene.set_mode(DiagramScene.InsertText) else: self.scene.set_item_type(self.items[button_id]) self.scene.set_mode(DiagramScene.InsertItem) def delete_item(self): for item in self.scene.selectedItems(): if isinstance(item, FlumeDiagramItem): item.remove_arrows() self.scene.removeItem(item) # noinspection PyTypeChecker,PyCallByClass def about(self): # noinspection PyArgumentList QMessageBox.about(self, "About Flume Illustrator", "The Flume illustrator shows config-file details") def pointer_group_clicked(self): self.scene.set_mode(self.pointer_type_group.checkedId()) def bring_to_front(self): if not self.scene.selectedItems(): return selected_item = self.scene.selectedItems()[0] overlap_items = selected_item.collidingItems() z_value = 0 for item in overlap_items: if item.zValue() >= z_value and isinstance(item, FlumeDiagramItem): z_value = item.zValue() + 0.1 selected_item.setZValue(z_value) def send_to_back(self): if not self.scene.selectedItems(): return selected_item = self.scene.selectedItems()[0] overlap_items = selected_item.collidingItems() z_value = 0 for item in overlap_items: if item.zValue() <= z_value and isinstance(item, FlumeDiagramItem): z_value = item.zValue() - 0.1 selected_item.setZValue(z_value) def scene_scale_changed(self, scale): new_scale = float(scale[:scale.index("%")]) / 100 old_transform = self.view.transform() self.view.resetTransform() self.view.translate(old_transform.dx(), old_transform.dy()) self.view.scale(new_scale, new_scale) def item_inserted(self, diagram_type): self.pointer_type_group.button(DiagramScene.MoveItem).setChecked(True) self.scene.set_mode(self.scene.DefaultMode) self.button_group.button(self.clicked_button_id).setChecked(False) def text_inserted(self, item): self.button_group.button(self.InsertTextButton).setChecked(False) self.scene.set_mode(self.pointer_type_group.checkedId()) def current_font_changed(self, font): self.handle_font_change() def font_size_changed(self, font=None): self.handle_font_change() def text_color_changed(self): self.text_action = self.sender() self.font_color_tool_button.setIcon( self.create_color_tool_button_icon(':/images/textpointer.png', QColor(self.text_action.data()))) self.text_button_triggered() def item_color_changed(self): self.fillAction = self.sender() self.fill_color_tool_button.setIcon( self.create_color_tool_button_icon(':/images/floodfill.png', QColor(self.fillAction.data()))) self.fill_button_triggered() def line_color_changed(self): self.lineAction = self.sender() self.line_color_tool_button.setIcon( self.create_color_tool_button_icon(':/images/linecolor.png', QColor(self.lineAction.data()))) self.line_button_triggered() def text_button_triggered(self): self.scene.set_text_color(QColor(self.text_action.data())) def fill_button_triggered(self): self.scene.set_item_color(QColor(self.fillAction.data())) def line_button_triggered(self): self.scene.set_line_color(QColor(self.lineAction.data())) def handle_font_change(self): font = self.font_combo.currentFont() font.setPointSize(int(self.font_size_combo.currentText())) if self.bold_action.isChecked(): font.setWeight(QFont.Bold) else: font.setWeight(QFont.Normal) font.setItalic(self.italic_action.isChecked()) font.setUnderline(self.underline_action.isChecked()) self.scene.setFont(font) def item_selected(self, item): font = item.font() self.font_combo.setCurrentFont(font) self.font_size_combo.setEditText(str(font.pointSize())) self.bold_action.setChecked(font.weight() == QFont.Bold) self.italic_action.setChecked(font.italic()) self.underline_action.setChecked(font.underline()) def create_cell_widget(self, text, diagram_type): item = FlumeObject(diagram_type, "") icon = QIcon(item.pictogram.image()) button = QToolButton() button.setIcon(icon) button.setIconSize(QSize(50, 50)) button.setCheckable(True) self.button_group.addButton(button) # , diagram_type layout = QGridLayout() layout.addWidget(button, 0, 0, Qt.AlignHCenter) layout.addWidget(QLabel(text), 1, 0, Qt.AlignHCenter) widget = QWidget() widget.setLayout(layout) return widget # noinspection PyArgumentList def create_color_menu(self, slot, default_color): colors = [Qt.black, Qt.white, Qt.red, Qt.blue, Qt.yellow] names = ["black", "white", "red", "blue", "yellow"] color_menu = QMenu(self) for color, name in zip(colors, names): action = QAction(self.create_color_icon(color), name, self, triggered=slot) action.setData(QColor(color)) color_menu.addAction(action) if color == default_color: color_menu.setDefaultAction(action) return color_menu @staticmethod def create_color_tool_button_icon(image_file, color): pixmap = QPixmap(50, 80) pixmap.fill(Qt.transparent) painter = QPainter(pixmap) image = QPixmap(image_file) target = QRect(0, 0, 50, 60) source = QRect(0, 0, 42, 42) painter.fillRect(QRect(0, 60, 50, 80), color) painter.drawPixmap(target, image, source) painter.end() return QIcon(pixmap) @staticmethod def create_color_icon(color): pixmap = QPixmap(20, 20) painter = QPainter(pixmap) painter.setPen(Qt.NoPen) painter.fillRect(QRect(0, 0, 20, 20), color) painter.end() return QIcon(pixmap) def enable_grid(self): if self.enable_grid_action.isChecked(): color = Qt.black else: color = Qt.white for i in range(50): for j in range(50): self.scene.addEllipse(i * 100, j * 100, 2, 2, QPen(color))
def initUI(self): StoryTypeGroupBox = QGroupBox() StoryTypeLayer = FlowLayout() for key in WdStoryType.keys(): widget = QCheckBox(WdStoryType[key][1] if WdStoryType[key][1] != "" else WdStoryType[key][0]) widget.setObjectName("WdStoryType." + str(key)) widget.setCheckState(WdStoryType[key][2]) widget.setEnabled(widget.checkState() != 1) widget.setMinimumWidth(230) StoryTypeLayer.addWidget(widget) self.StoryTypeList.append(widget) StoryTypeGroupBox.setLayout(StoryTypeLayer) InlineShapeTypeGroupBox = QGroupBox() InlineShapeTypeLayer = FlowLayout() for key in WdInlineShapeType.keys(): widget = QCheckBox( WdInlineShapeType[key][1] if WdInlineShapeType[key][1] != "" else WdInlineShapeType[key][0] ) widget.setObjectName("WdInlineShapeType." + str(key)) widget.setCheckState(WdInlineShapeType[key][2]) widget.setEnabled(widget.checkState() != 1) widget.setMinimumWidth(230) InlineShapeTypeLayer.addWidget(widget) self.InlineShapeList.append(widget) InlineShapeTypeGroupBox.setLayout(InlineShapeTypeLayer) ShapeTypeGroupBox = QGroupBox() ShapeTypeLayer = FlowLayout() for key in MsoShapeType.keys(): widget = QCheckBox(MsoShapeType[key][1] if MsoShapeType[key][1] != "" else MsoShapeType[key][0]) widget.setObjectName("MsoShapeType." + str(key)) widget.setCheckState(MsoShapeType[key][2]) widget.setEnabled(widget.checkState() != 1) widget.setMinimumWidth(230) ShapeTypeLayer.addWidget(widget) self.ShapeTypeList.append(widget) ShapeTypeGroupBox.setLayout(ShapeTypeLayer) """TabWidget=QTabWidget() TabWidget.addTab(StoryTypeGroupBox,"StoryType") TabWidget.addTab(InlineShapeTypeGroupBox,"InlineShapeType") TabWidget.addTab(ShapeTypeGroupBox,"ShapeType") TabWidget.setCurrentIndex(0)""" TabWidget = QToolBox() TabWidget.addItem(StoryTypeGroupBox, "StoryType") TabWidget.addItem(InlineShapeTypeGroupBox, "InlineShapeType") TabWidget.addItem(ShapeTypeGroupBox, "ShapeType") TabWidget.setCurrentIndex(0) hbox = QVBoxLayout() hbox.addWidget(TabWidget) btnGrp = QDialogButtonBox() btnClose = QPushButton("Закрыть") # btnApply=QPushButton("Применить") btnGrp.addButton(btnClose, QDialogButtonBox.ActionRole) # btnGrp.addButton(btnApply,QDialogButtonBox.ActionRole) hbox.addWidget(btnGrp) btnClose.clicked.connect(self.close) # btnApply.clicked.connect(self.apply) self.apply() self.setLayout(hbox) self.setGeometry(500, 100, 500, 400) self.setWindowTitle("Опции") self.setWindowFlags(Qt.Dialog | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint)
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.createActions() self.createMenus() self.createToolBox() self.createStatusBar() self.scene = ITGScene(self.itemMenu) self.scene.setSceneRect(QRectF(0, 0, 5000, 5000)) self.scene.itemInserted.connect(self.itemInserted) self.scene.itemSelected.connect(self.itemSelected) # ================================================================ # THIS IS THE PROBLEM SECTION # THIS CAUSES TypeError: native Qt signal is not callable # To reproduce the error, run the program, click on one of the # shapes, then click on the scene area # ================================================================ self.scene.selectionChanged.connect(self.print_item_info) # this one doesn't work self.createToolbars() layout = QHBoxLayout() layout.addWidget(self.toolBox) self.view = QGraphicsView(self.scene) # view and scene established together layout.addWidget(self.view) self.widget = QWidget() self.widget.setLayout(layout) self.setCentralWidget(self.widget) self.setWindowTitle("ITG: Illegitimate Template Generator") #@pyqtSlot() # Adding this does not change the error def print_item_info(self): for item in self.scene.selectedItems(): print(item) def buttonGroupClicked(self, id): buttons = self.buttonGroup.buttons() for button in buttons: if self.buttonGroup.button(id) != button: button.setChecked(False) self.scene.setItemType(id) self.scene.setMode(ITGScene.InsertItem) self.updateStatusBar() def deleteItem(self): for item in self.scene.selectedItems(): self.scene.removeItem(item) def pointerGroupClicked(self, i): self.scene.setMode(self.pointerTypeGroup.checkedId()) self.updateStatusBar() def bringToFront(self): if not self.scene.selectedItems(): return selectedItem = self.scene.selectedItems()[0] overlapItems = selectedItem.collidingItems() zValue = 0 for item in overlapItems: if (item.zValue() >= zValue and isinstance(item, ITGItem)): zValue = item.zValue() + 0.1 selectedItem.setZValue(zValue) def sendToBack(self): if not self.scene.selectedItems(): return selectedItem = self.scene.selectedItems()[0] overlapItems = selectedItem.collidingItems() zValue = 0 for item in overlapItems: if (item.zValue() <= zValue and isinstance(item, ITGItem)): zValue = item.zValue() - 0.1 selectedItem.setZValue(zValue) def itemInserted(self, item): self.pointerTypeGroup.button(ITGScene.MoveItem).setChecked(True) self.scene.setMode(self.pointerTypeGroup.checkedId()) self.updateStatusBar() self.buttonGroup.button(item.ITGType).setChecked(False) def sceneScaleChanged(self, scale): newScale = scale.left(scale.indexOf("%")).toDouble()[0] / 100.0 oldMatrix = self.view.matrix() self.view.resetMatrix() self.view.translate(oldMatrix.dx(), oldMatrix.dy()) self.view.scale(newScale, newScale) def itemColorChanged(self): self.fillAction = self.sender() self.fillColorToolButton.setIcon( self.createColorToolButtonIcon( ':/images/floodfill.png', QColor(self.fillAction.data()))) self.fillButtonTriggered() def fillButtonTriggered(self): self.scene.setItemColor(QColor(self.fillAction.data())) def itemSelected(self, item): font = item.font() color = item.defaultTextColor() self.fontCombo.setCurrentFont(font) self.fontSizeCombo.setEditText(str(font.pointSize())) self.boldAction.setChecked(font.weight() == QFont.Bold) self.italicAction.setChecked(font.italic()) self.underlineAction.setChecked(font.underline()) def about(self): QMessageBox.about(self, "About ITG Scene", "The <b>ITG Scene</b> example shows use of the graphics framework.") def createToolBox(self): self.buttonGroup = QButtonGroup() self.buttonGroup.setExclusive(False) self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked) layout = QGridLayout() layout.addWidget(self.createCellWidget("Diamond", ITGItem.Diamond), 0, 0) layout.addWidget(self.createCellWidget("Square", ITGItem.Square), 0, 1) layout.addWidget(self.createCellWidget("Parallelogram", ITGItem.Parallelogram), 1, 0) layout.setRowStretch(3, 10) layout.setColumnStretch(2, 10) itemWidget = QWidget() itemWidget.setLayout(layout) self.backgroundButtonGroup = QButtonGroup() self.toolBox = QToolBox() self.toolBox.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)) self.toolBox.setMinimumWidth(itemWidget.sizeHint().width()) self.toolBox.addItem(itemWidget, "Basic Components") def createActions(self): self.toFrontAction = QAction( QIcon(':/images/bringtofront.png'), "Bring to &Front", self, shortcut="Ctrl+F", statusTip="Bring item to front", triggered=self.bringToFront) self.sendBackAction = QAction( QIcon(':/images/sendtoback.png'), "Send to &Back", self, shortcut="Ctrl+B", statusTip="Send item to back", triggered=self.sendToBack) self.deleteAction = QAction(QIcon(':/images/delete.png'), "&Delete", self, shortcut="Delete", statusTip="Delete item from ITG", triggered=self.deleteItem) self.exitAction = QAction("E&xit", self, shortcut="Ctrl+X", statusTip="Quit SceneITG example", triggered=self.close) self.aboutAction = QAction("A&bout", self, shortcut="Ctrl+B", triggered=self.about) def createMenus(self): self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.addAction(self.exitAction) self.itemMenu = self.menuBar().addMenu("&Item") self.itemMenu.addAction(self.deleteAction) self.itemMenu.addSeparator() self.itemMenu.addAction(self.toFrontAction) self.itemMenu.addAction(self.sendBackAction) self.aboutMenu = self.menuBar().addMenu("&Help") self.aboutMenu.addAction(self.aboutAction) def createToolbars(self): self.editToolBar = self.addToolBar("Edit") self.editToolBar.addAction(self.deleteAction) self.editToolBar.addAction(self.toFrontAction) self.editToolBar.addAction(self.sendBackAction) self.fillColorToolButton = QToolButton() self.fillColorToolButton.setPopupMode(QToolButton.MenuButtonPopup) self.fillColorToolButton.setMenu( self.createColorMenu(self.itemColorChanged, Qt.red)) self.fillAction = self.fillColorToolButton.menu().defaultAction() self.fillColorToolButton.setIcon( self.createColorToolButtonIcon(':/images/floodfill.png', Qt.red)) self.fillColorToolButton.clicked.connect(self.fillButtonTriggered) self.colorToolBar = self.addToolBar("Color") self.colorToolBar.addWidget(self.fillColorToolButton) pointerButton = QToolButton() pointerButton.setCheckable(True) pointerButton.setChecked(True) pointerButton.setIcon(QIcon(':/images/pointer.png')) self.pointerTypeGroup = QButtonGroup() self.pointerTypeGroup.addButton(pointerButton, ITGScene.MoveItem) self.pointerTypeGroup.buttonClicked[int].connect(self.pointerGroupClicked) self.sceneScaleCombo = QComboBox() self.sceneScaleCombo.addItems(["50%", "75%", "100%", "125%", "150%"]) self.sceneScaleCombo.setCurrentIndex(2) self.sceneScaleCombo.currentIndexChanged[str].connect(self.sceneScaleChanged) self.pointerToolbar = self.addToolBar("Pointer type") self.pointerToolbar.addWidget(pointerButton) self.pointerToolbar.addWidget(self.sceneScaleCombo) def createBackgroundCellWidget(self, text, image): button = QToolButton() button.setText(text) button.setIcon(QIcon(image)) button.setIconSize(QSize(50, 50)) button.setCheckable(True) self.backgroundButtonGroup.addButton(button) layout = QGridLayout() layout.addWidget(button, 0, 0, Qt.AlignHCenter) layout.addWidget(QLabel(text), 1, 0, Qt.AlignCenter) widget = QWidget() widget.setLayout(layout) return widget def createCellWidget(self, text, ITGType): item = ITGItem(ITGType, self.itemMenu) icon = QIcon(item.image()) button = QToolButton() button.setIcon(icon) button.setIconSize(QSize(50, 50)) button.setCheckable(True) self.buttonGroup.addButton(button, ITGType) layout = QGridLayout() layout.addWidget(button, 0, 0, Qt.AlignHCenter) layout.addWidget(QLabel(text), 1, 0, Qt.AlignCenter) widget = QWidget() widget.setLayout(layout) return widget def createColorMenu(self, slot, defaultColor): colors = [Qt.black, Qt.white, Qt.red, Qt.blue, Qt.yellow] names = ["black", "white", "red", "blue", "yellow"] colorMenu = QMenu(self) for color, name in zip(colors, names): action = QAction(self.createColorIcon(color), name, self, triggered=slot) action.setData(QColor(color)) colorMenu.addAction(action) if color == defaultColor: colorMenu.setDefaultAction(action) return colorMenu def createColorToolButtonIcon(self, imageFile, color): pixmap = QPixmap(50, 80) pixmap.fill(Qt.transparent) painter = QPainter(pixmap) image = QPixmap(imageFile) target = QRect(0, 0, 50, 60) source = QRect(0, 0, 42, 42) painter.fillRect(QRect(0, 60, 50, 80), color) painter.drawPixmap(target, image, source) painter.end() return QIcon(pixmap) def createColorIcon(self, color): pixmap = QPixmap(20, 20) painter = QPainter(pixmap) painter.setPen(Qt.NoPen) painter.fillRect(QRect(0, 0, 20, 20), color) painter.end() return QIcon(pixmap) def createStatusBar(self): self.sbar = self.statusBar() self.lbl_mode = QLabel('Mode: not set') self.sbar.addPermanentWidget(self.lbl_mode) self.lbl_selection = QLabel('Sel: none') self.sbar.addPermanentWidget(self.lbl_selection) def updateStatusBar(self): self.lbl_mode.setText('Mode: ' + self.scene.getMode()) #! This section is not working!!! if len(self.scene.selectedItems()) == 0: self.lbl_selection.setText('Sel: none') elif len(self.scene.selectedItems()) == 1: self.lbl_selection.setText('Sel: ' + self.scene.selectedItems()[0].get_ITGType_as_str()) elif len(self.scene.selectedItems()) > 1: self.lbl_selection.setText('Sel: <multiple>')