def create_widget(self, parent=None): main_group_box = QGroupBox() main_layout = QHBoxLayout() top = QFrame() top_layout = QGridLayout() top_layout.setColumnStretch(0, 2) top_layout.setColumnStretch(1, 1) top_layout.addWidget(self.tips_label, 0, 0) top_layout.addWidget(self.path_label, 1, 0) self.button_folder_selection = QPushButton('Select directory') self.button_folder_selection.clicked.connect( lambda: self.on_dir_selection()) top_layout.addWidget(self.button_folder_selection, 1, 1) top.setLayout(top_layout) splitter = QSplitter(Qt.Vertical) splitter.addWidget(top) gestures_group_box = self.create_gestures_group_box() splitter.addWidget(gestures_group_box) splitter.setSizes([50, 200]) main_layout.addWidget(splitter) main_group_box.setLayout(main_layout) return main_group_box
def build(self): self.setStyleSheet('QLabel {color: white}') layout = QGridLayout() self.setLayout(layout) layout.setRowStretch(0, 10) layout.setColumnStretch(3, 1) key_lbl = QLabel('{} Hotkeys:'.format(self.mode.title())) layout.addWidget(key_lbl, 1, 0, 1, 2) position = 2 for key, op in self.mapping.iteritems(): key_lbl = QLabel(key) layout.addWidget(key_lbl, position, 0, 1, 1) op_lbl = QLabel(op) layout.addWidget(op_lbl, position, 1, 1, 1) position += 1 # help_key_lbl = QLabel('h') # layout.addWidget(help_key_lbl, position, 0, 1, 1) # # help_lbl = QLabel('Toggle Help') # layout.addWidget(help_lbl, position, 1, 1, 1) layout.setRowStretch(position, 1)
class GroupImages(QGroupBox): def __init__(self, parent): """Groupbox for pynwb.base.Images fields filling form.""" super().__init__() self.setTitle('Images') self.parent = parent self.group_type = 'Images' self.lbl_name = QLabel('name<span style="color:' + required_asterisk_color + ';">*</span>:') self.form_name = QLineEdit('Images') self.form_name.setToolTip("The name of this set of images") nInstances = 0 for grp in self.parent.groups_list: if isinstance(grp, GroupImages): nInstances += 1 if nInstances > 0: self.form_name.setText('Images' + str(nInstances)) self.lbl_images = QLabel('images:') self.combo_images = CustomComboBox() self.combo_images.setToolTip("Image objects") self.lbl_description = QLabel('description:') self.form_description = QLineEdit('') self.form_description.setPlaceholderText("description") self.form_description.setToolTip("Description of images") self.grid = QGridLayout() self.grid.setColumnStretch(2, 1) self.grid.addWidget(self.lbl_name, 0, 0, 1, 2) self.grid.addWidget(self.form_name, 0, 2, 1, 4) self.grid.addWidget(self.lbl_images, 1, 0, 1, 2) self.grid.addWidget(self.combo_images, 1, 2, 1, 4) self.grid.addWidget(self.lbl_description, 2, 0, 1, 2) self.grid.addWidget(self.form_description, 2, 2, 1, 4) self.setLayout(self.grid) def refresh_objects_references(self, metadata=None): """Refreshes references with existing objects in parent group.""" self.combo_images.clear() for grp in self.parent.groups_list: if isinstance(grp, GroupImage): self.combo_images.addItem(grp.form_name.text()) def read_fields(self): """Reads fields and returns them structured in a dictionary.""" data = {} data['name'] = self.form_name.text() data['images'] = self.combo_images.currentText() data['description'] = self.form_description.text() return data def write_fields(self, metadata={}): """Reads structured dictionary and write in form fields.""" self.form_name.setText(metadata['name']) self.combo_images.clear() self.combo_images.addItem(metadata['images']) if 'description' in metadata: self.form_description.setText(metadata['description'])
def __init__(self, parent=None): super(airWidget, self).__init__(parent) self.desktop = '' box = QGridLayout() box.setColumnStretch(0, -1) box.setColumnStretch(1, 1) self.btn_icon = QPushButton() effect = QGraphicsDropShadowEffect(blurRadius=5, xOffset=3, yOffset=3) self.btn_icon.setGraphicsEffect(effect) self.btn_icon.setIconSize(QSize(64, 64)) self.btn_icon.setMinimumHeight(72) self.btn_icon.clicked.connect(self._executeAir) box.addWidget(self.btn_icon, 0, 0, 2, 1, Qt.AlignLeft) self.lbl_name = QLabel("") self.lbl_name.setObjectName("appName") box.addWidget(self.lbl_name, 0, 1, 1, 1, Qt.AlignLeft) self.lbl_desc = QLabel("") box.addWidget(self.lbl_desc, 1, 1, 1, 2, Qt.AlignLeft) btn_remove = QPushButton(_("Remove")) btn_remove.setObjectName("btnRemove") btn_remove.clicked.connect(self._removeAir) box.addWidget(btn_remove, 0, 2, 1, 1, Qt.AlignLeft) self.setObjectName("cell") self.setLayout(box) self.setStyleSheet(self._setCss())
class GroupDevice(CollapsibleBox): def __init__(self, parent): """Groupbox for pynwb.device.Device fields filling form.""" super().__init__(title='Device', parent=parent) self.parent = parent self.pynwb_class = pynwb.device.Device self.group_type = 'Device' self.lbl_name = QLabel('name<span style="color:' + required_asterisk_color + ';">*</span>:') self.form_name = QLineEdit('Device') self.form_name.setToolTip("the name pof this device") self.grid = QGridLayout() self.grid.setColumnStretch(2, 1) self.grid.addWidget(self.lbl_name, 0, 0, 1, 2) self.grid.addWidget(self.form_name, 0, 2, 1, 4) #self.setLayout(self.grid) def refresh_objects_references(self, metadata=None): """Refreshes references with existing objects in parent group.""" pass def read_fields(self): """Reads fields and returns them structured in a dictionary.""" data = {} data['name'] = self.form_name.text() return data def write_fields(self, metadata={}): """Reads structured dictionary and write in form fields.""" self.form_name.setText(str(metadata['name'])) self.setContentLayout(self.grid)
def initUI(self): mainLayout = QGridLayout(self) mainLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) mainLayout.setColumnStretch(0, 0) mainLayout.setColumnStretch(1, 1) mainLayout.setColumnStretch(2, 1) self.setLayout(mainLayout) line = 0 nameText = QLabel('Name:') nameText.setAlignment(Qt.AlignRight) self.nameIn = QLineEdit() mainLayout.addWidget(nameText, line, 0) mainLayout.addWidget(self.nameIn, line, 1, 1, 2) line += 1 tempText = QLabel('Template:') tempText.setAlignment(Qt.AlignRight) self.tempCombo = QComboBox() self.tempCombo.addItem('[NO TEMPLATE]', 0) self._read_templates() mainLayout.addWidget(tempText, line, 0) mainLayout.addWidget(self.tempCombo, line, 1, 1, 2) line += 1 okBtn = QPushButton("Create") okBtn.clicked.connect(self.accept) cancelBtn = QPushButton("Cancel") cancelBtn.clicked.connect(self.reject) mainLayout.addWidget(okBtn, line, 1, 1, 1) mainLayout.addWidget(cancelBtn, line, 2, 1, 1) self.setWindowTitle("New Picker Interface Information") self.setWindowFlags(Qt.WindowStaysOnTopHint)
def __init__(self, parent=None): super(AddDialogWidget, self).__init__(parent) nameLabel = QLabel("Name") addressLabel = QLabel("Address") buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.nameText = QLineEdit() self.addressText = QTextEdit() grid = QGridLayout() grid.setColumnStretch(1, 2) grid.addWidget(nameLabel, 0, 0) grid.addWidget(self.nameText, 0, 1) grid.addWidget(addressLabel, 1, 0, Qt.AlignLeft | Qt.AlignTop) grid.addWidget(self.addressText, 1, 1, Qt.AlignLeft) layout = QVBoxLayout() layout.addLayout(grid) layout.addWidget(buttonBox) self.setLayout(layout) self.setWindowTitle("Add a Contact") buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject)
def createMessageGroupBox(self): self.messageGroupBox = QGroupBox("Balloon Message") self.typeLabel = QLabel("Type:") self.typeComboBox = QComboBox() self.typeComboBox.addItem("None", QSystemTrayIcon.NoIcon) self.typeComboBox.addItem( self.style().standardIcon(QStyle.SP_MessageBoxInformation), "Information", QSystemTrayIcon.Information, ) self.typeComboBox.addItem( self.style().standardIcon(QStyle.SP_MessageBoxWarning), "Warning", QSystemTrayIcon.Warning, ) self.typeComboBox.addItem( self.style().standardIcon(QStyle.SP_MessageBoxCritical), "Critical", QSystemTrayIcon.Critical, ) self.typeComboBox.addItem(QIcon(), "Custom icon", -1) self.typeComboBox.setCurrentIndex(1) self.durationLabel = QLabel("Duration:") self.durationSpinBox = QSpinBox() self.durationSpinBox.setRange(5, 60) self.durationSpinBox.setSuffix(" s") self.durationSpinBox.setValue(15) self.durationWarningLabel = QLabel("(some systems might ignore this hint)") self.durationWarningLabel.setIndent(10) self.titleLabel = QLabel("Title:") self.titleEdit = QLineEdit("Cannot connect to network") self.bodyLabel = QLabel("Body:") self.bodyEdit = QTextEdit() self.bodyEdit.setPlainText("Don't believe me. Honestly, I don't have a clue." "\nClick this balloon for details.") self.showMessageButton = QPushButton("Show Message") self.showMessageButton.setDefault(True) messageLayout = QGridLayout() messageLayout.addWidget(self.typeLabel, 0, 0) messageLayout.addWidget(self.typeComboBox, 0, 1, 1, 2) messageLayout.addWidget(self.durationLabel, 1, 0) messageLayout.addWidget(self.durationSpinBox, 1, 1) messageLayout.addWidget(self.durationWarningLabel, 1, 2, 1, 3) messageLayout.addWidget(self.titleLabel, 2, 0) messageLayout.addWidget(self.titleEdit, 2, 1, 1, 4) messageLayout.addWidget(self.bodyLabel, 3, 0) messageLayout.addWidget(self.bodyEdit, 3, 1, 2, 4) messageLayout.addWidget(self.showMessageButton, 5, 4) messageLayout.setColumnStretch(3, 1) messageLayout.setRowStretch(4, 1) self.messageGroupBox.setLayout(messageLayout)
def createGridLayout(app, data, time): app.horizontalGroupBox = QGroupBox() layout = QGridLayout() num_rows = 12 num_columns = 5 plots = [] for row_id in range(0, num_rows): layout.setColumnStretch(row_id, num_columns) for col_id in range(0, num_columns): for row_id in range(0, num_rows): curr_id = col_id * num_rows + row_id curr_plot = pg.PlotWidget(title='#' + str(curr_id + 1)) curr_plot.enableAutoRange(False, False) curr_plot.setXRange(0, 500) curve = HDF5Plot() curve.setHDF5(data[:, curr_id]) curr_plot.addItem(curve) layout.addWidget(curr_plot, col_id, row_id) plots.append(curr_plot) if curr_id > 0: plots[curr_id - 1].getViewBox().setXLink(plots[curr_id]) plots[curr_id - 1].getViewBox().setYLink(plots[curr_id]) app.horizontalGroupBox.setLayout(layout)
class Layout(Slots): def __init__(self): super().__init__() def stored_location_layout(self): self.stored_directories_title = QLabel(constants.stored_dir_str) # Combo box and its properties self.stored_dir_dropdown = QComboBox() self.stored_dir_dropdown.addItems(self.get_list_items()) self.stored_dir_dropdown.setCursor(QCursor(Qt.PointingHandCursor)) self.stored_dir_dropdown.setStyleSheet(stored_dir_dropdown_styles) # Layout grid for combo box widget self.stored_dirs_layout = QGridLayout() self.stored_dirs_layout.addWidget(self.stored_directories_title, 0, 0) self.stored_dirs_layout.addWidget(self.stored_dir_dropdown, 0, 1) self.stored_dirs_layout.setColumnStretch(1, 2) self.stored_dirs_layout.setContentsMargins(0, 16, 0, 32) return self.stored_dirs_layout def push_to_group_layout(self): # Create a group self.group_push_to = QGroupBox(constants.push_branch_str) self.group_push_to.setStyleSheet(group_widgets_styles) # Create the layout for the branch widgets self.pushToLayout = QVBoxLayout() self.pushToLayout.setAlignment(Qt.AlignTop) self.pushToLayout.setContentsMargins(16, 24, 16, 24) # Set the layout to the group self.group_push_to.setLayout(self.pushToLayout) # Create the staging button and its properties self.staging_btn = QPushButton(constants.master_to_staging_str) self.staging_btn.clicked.connect( lambda: self.handle_branch_push_to_git(constants.master, constants. staging)) self.staging_btn.setCursor(QCursor(Qt.PointingHandCursor)) self.staging_btn.setStyleSheet(button_styles) # Create the production button and its properties self.prod_btn = QPushButton(constants.staging_to_prod_str) self.prod_btn.setCursor(QCursor(Qt.PointingHandCursor)) self.prod_btn.clicked.connect(lambda: self.handle_branch_push_to_git( constants.staging, constants.production)) self.prod_btn.setStyleSheet(button_styles) self.thread = Thread() self.thread.finished.connect(lambda: self.staging_btn.setEnabled(True)) self.thread.finished.connect(lambda: self.prod_btn.setEnabled(True)) # Add the button widgets to the layout self.pushToLayout.addWidget(self.staging_btn) self.pushToLayout.addWidget(self.prod_btn) return self.group_push_to
class TableWidget(QWidget): def __init__(self): QWidget.__init__(self) self.model = CustomTableModel() self.table_view = QTableView() self.table_view.setModel(self.model) self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) self.table_view.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) self.series = QtCharts.QLineSeries() self.series.setName("Line 1") self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(0) self.mapper.setYColumn(1) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # for storing color hex from the series seriesColorHex = "#000000" # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(0, 0, 2, self.model.rowCount())) # series 2 self.series = QtCharts.QLineSeries() self.series.setName("Line 2") self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(2) self.mapper.setYColumn(3) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(2, 0, 2, self.model.rowCount())) self.chart.createDefaultAxes() self.chart_view = QtCharts.QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) self.chart_view.setMinimumSize(640, 480) # create main layout self.main_layout = QGridLayout() self.main_layout.addWidget(self.table_view, 1, 0) self.main_layout.addWidget(self.chart_view, 1, 1) self.main_layout.setColumnStretch(1, 1) self.main_layout.setColumnStretch(0, 0) self.setLayout(self.main_layout)
class TableWidget(QWidget): def __init__(self): QWidget.__init__(self) self.model = CustomTableModel() self.table_view = QTableView() self.table_view.setModel(self.model) self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) self.table_view.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) self.series = QtCharts.QLineSeries() self.series.setName("Line 1") self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(0) self.mapper.setYColumn(1) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # for storing color hex from the series seriesColorHex = "#000000" # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(0, 0, 2, self.model.rowCount())) # series 2 self.series = QtCharts.QLineSeries() self.series.setName("Line 2") self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(2) self.mapper.setYColumn(3) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(2, 0, 2, self.model.rowCount())); self.chart.createDefaultAxes() self.chart_view = QtCharts.QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) self.chart_view.setMinimumSize(640, 480) # create main layout self.main_layout = QGridLayout() self.main_layout.addWidget(self.table_view, 1, 0) self.main_layout.addWidget(self.chart_view, 1, 1) self.main_layout.setColumnStretch(1, 1) self.main_layout.setColumnStretch(0, 0) self.setLayout(self.main_layout)
def __init__(self, parent=None): super(WidgetGallery, self).__init__(parent) self.originalPalette = QApplication.palette() styleComboBox = QComboBox() styleComboBox.addItems(QStyleFactory.keys()) styleLabel = QLabel("&Style:") styleLabel.setBuddy(styleComboBox) self.useStylePaletteCheckBox = QCheckBox( "&Use style's standard palette") self.useStylePaletteCheckBox.setChecked(True) disableWidgetsCheckBox = QCheckBox("&Disable widgets") self.createTopLeftGroupBox() self.createTopRightGroupBox() self.createBottomLeftTabWidget() self.createBottomRightGroupBox() self.createProgressBar() styleComboBox.activated[str].connect(self.changeStyle) self.useStylePaletteCheckBox.toggled.connect(self.changePalette) disableWidgetsCheckBox.toggled.connect( self.topLeftGroupBox.setDisabled) disableWidgetsCheckBox.toggled.connect( self.topRightGroupBox.setDisabled) disableWidgetsCheckBox.toggled.connect( self.bottomLeftTabWidget.setDisabled) disableWidgetsCheckBox.toggled.connect( self.bottomRightGroupBox.setDisabled) topLayout = QHBoxLayout() topLayout.addWidget(styleLabel) topLayout.addWidget(styleComboBox) topLayout.addStretch(1) topLayout.addWidget(self.useStylePaletteCheckBox) topLayout.addWidget(disableWidgetsCheckBox) mainLayout = QGridLayout() mainLayout.addLayout(topLayout, 0, 0, 1, 2) mainLayout.addWidget(self.topLeftGroupBox, 1, 0) mainLayout.addWidget(self.topRightGroupBox, 1, 1) mainLayout.addWidget(self.bottomLeftTabWidget, 2, 0) mainLayout.addWidget(self.bottomRightGroupBox, 2, 1) mainLayout.addWidget(self.progressBar, 3, 0, 1, 2) mainLayout.setRowStretch(1, 1) mainLayout.setRowStretch(2, 1) mainLayout.setColumnStretch(0, 1) mainLayout.setColumnStretch(1, 1) self.setLayout(mainLayout) self.setWindowTitle("Common Qt Widgets") self.changeStyle('Fusion')
class InformationsWindow(QDialog): def __init__(self, parent): super(InformationsWindow, self).__init__() self.parent = parent self.setWindowTitle("PyEngine - A Propos") self.setFixedSize(500, 300) self.grid = QGridLayout() title = Label("PyEngine", 18) title.setAlignment(Qt.AlignHCenter) tvpyengine = Label("Version PyEngine : ", 15) vpyengine = Label(pyengine.__version__, 15) vpyengine.setAlignment(Qt.AlignHCenter) tvpyengine_ui = Label("Version PyEngine-UI : ", 15) vpyengine_ui = Label(pyengine_ui.__version__, 15) vpyengine_ui.setAlignment(Qt.AlignHCenter) tvpyqt = Label("Version PySide2 : ", 15) vpyqt = Label(PySide2.__version__, 15) vpyqt.setAlignment(Qt.AlignHCenter) tvqt = Label("Version Qt : ", 15) vqt = Label(QLibraryInfo.version().toString(), 15) vqt.setAlignment(Qt.AlignHCenter) tauthor = Label("Fait par : ", 15) author = Label("Nevinia", 15) author.setAlignment(Qt.AlignHCenter) self.spacerItem = QSpacerItem(20, 25) self.grid.addWidget(title, 0, 0, 1, 2) self.grid.addWidget(tvpyengine, 1, 0) self.grid.addWidget(vpyengine, 1, 1) self.grid.addWidget(tvpyengine_ui, 2, 0) self.grid.addWidget(vpyengine_ui, 2, 1) self.grid.addWidget(tvpyqt, 3, 0) self.grid.addWidget(vpyqt, 3, 1) self.grid.addWidget(tvqt, 4, 0) self.grid.addWidget(vqt, 4, 1) self.grid.addItem(self.spacerItem, 5, 0) self.grid.addWidget(tauthor, 6, 0) self.grid.addWidget(author, 6, 1) self.grid.setColumnStretch(0, 1) self.grid.setColumnStretch(1, 1) self.setLayout(self.grid) self.setWindowFlags(Qt.CustomizeWindowHint) self.setWindowFlags(Qt.WindowTitleHint) self.setWindowFlags(Qt.WindowCloseButtonHint)
class GroupEventWaveform(QGroupBox): def __init__(self, parent): """Groupbox for pynwb.ecephys.EventWaveform fields filling form.""" super().__init__() self.setTitle('EventWaveform') self.parent = parent self.group_type = 'EventWaveform' self.lbl_name = QLabel('name<span style="color:' + required_asterisk_color + ';">*</span>:') self.form_name = QLineEdit('EventWaveform') self.form_name.setToolTip("The unique name of this EventWaveform") nInstances = 0 for grp in self.parent.groups_list: if isinstance(grp, GroupEventWaveform): nInstances += 1 if nInstances > 0: self.form_name.setText('EventWaveform' + str(nInstances)) self.lbl_spike_event_series = QLabel( 'spike_event_series<span style="color:' + required_asterisk_color + ';">*</span>:') self.combo_spike_event_series = CustomComboBox() self.combo_spike_event_series.setToolTip( "SpikeEventSeries to store in this interface") self.grid = QGridLayout() self.grid.setColumnStretch(2, 1) self.grid.addWidget(self.lbl_name, 0, 0, 1, 2) self.grid.addWidget(self.form_name, 0, 2, 1, 4) self.grid.addWidget(self.lbl_spike_event_series, 1, 0, 1, 2) self.grid.addWidget(self.combo_spike_event_series, 1, 2, 1, 4) self.setLayout(self.grid) def refresh_objects_references(self, metadata=None): """Refreshes references with existing objects in parent group.""" self.combo_spike_event_series.clear() for grp in self.parent.groups_list: if isinstance(grp, GroupSpikeEventSeries): self.combo_spike_event_series.addItem(grp.form_name.text()) def read_fields(self): """Reads fields and returns them structured in a dictionary.""" data = {} data['name'] = self.form_name.text() data['spike_event_series'] = self.combo_spike_event_series.currentText( ) return data def write_fields(self, metadata={}): """Reads structured dictionary and write in form fields.""" self.form_name.setText(metadata['name']) self.combo_spike_event_series.clear() self.combo_spike_event_series.addItem(metadata['spike_event_series'])
class GroupLFP(QGroupBox): def __init__(self, parent): """Groupbox for pynwb.ecephys.LFP fields filling form.""" super().__init__() self.setTitle('LFP') self.parent = parent self.group_type = 'LFP' self.lbl_name = QLabel('name<span style="color:' + required_asterisk_color + ';">*</span>:') self.form_name = QLineEdit('LFP') self.form_name.setToolTip("The unique name of this LFP") nInstances = 0 for grp in self.parent.groups_list: if isinstance(grp, GroupLFP): nInstances += 1 if nInstances > 0: self.form_name.setText('LFP' + str(nInstances)) self.lbl_electrical_series = QLabel( 'electrical_series<span style="color:' + required_asterisk_color + ';">*</span>:') self.electrical_series = GroupElectricalSeries(self) self.lbl_decomposition_series = QLabel( 'decomposition_series<span style="color:' + required_asterisk_color + ';">*</span>:') self.decomposition_series = GroupDecompositionSeries(self) self.grid = QGridLayout() self.grid.setColumnStretch(2, 1) self.grid.addWidget(self.lbl_name, 0, 0, 1, 2) self.grid.addWidget(self.form_name, 0, 2, 1, 4) self.grid.addWidget(self.lbl_electrical_series, 1, 0, 1, 2) self.grid.addWidget(self.electrical_series, 1, 2, 1, 4) self.grid.addWidget(self.lbl_decomposition_series, 2, 0, 1, 2) self.grid.addWidget(self.decomposition_series, 2, 2, 1, 4) self.setLayout(self.grid) def refresh_objects_references(self, metadata=None): """Refreshes references with existing objects in parent group.""" pass def read_fields(self): """Reads fields and returns them structured in a dictionary.""" data = {} data['name'] = self.form_name.text() data['electrical_series'] = self.electrical_series.read_fields() data['decomposition_series'] = self.decomposition_series.read_fields() return data def write_fields(self, metadata={}): """Reads structured dictionary and write in form fields.""" self.form_name.setText(metadata['name'])
def initSubLayout(imageLabel, imagePathLabel): subLayout = QGridLayout() subLayout.setColumnStretch(1, 9) subLayout.addWidget(imageLabel, 0, 0) subLayout.addWidget(imagePathLabel, 1, 0, 1, 2, alignment=Qt.AlignRight | Qt.AlignTop) return subLayout
def __init__(self, parent, data): super(SegmentsWidget, self).__init__(parent) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setVerticalSpacing(1) layout.setHorizontalSpacing( UIContext.getScaledWindowSize(16, 16).width()) self.segments = [] for segment in data.segments: if segment.readable or segment.writable or segment.executable: self.segments.append(segment) self.segments.sort(key=lambda segment: segment.start) row = 0 for segment in self.segments: begin = "0x%x" % segment.start end = "0x%x" % segment.end permissions = "" if segment.readable: permissions += "r" else: permissions += "-" if segment.writable: permissions += "w" else: permissions += "-" if segment.executable: permissions += "x" else: permissions += "-" rangeLayout = QHBoxLayout() rangeLayout.setContentsMargins(0, 0, 0, 0) beginLabel = headers.ClickableAddressLabel(begin) dashLabel = QLabel("-") dashLabel.setFont(binaryninjaui.getMonospaceFont(self)) endLabel = headers.ClickableAddressLabel(end) rangeLayout.addWidget(beginLabel) rangeLayout.addWidget(dashLabel) rangeLayout.addWidget(endLabel) layout.addLayout(rangeLayout, row, 0) permissionsLabel = QLabel(permissions) permissionsLabel.setFont(binaryninjaui.getMonospaceFont(self)) layout.addWidget(permissionsLabel, row, 1) row += 1 layout.setColumnStretch(2, 1) self.setLayout(layout)
class TableWidget(QWidget): def __init__(self, data): QWidget.__init__(self) self.model = CustomTableModel(data) self.table_view = QTableView() self.table_view.setModel(self.model) self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) self.table_view.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) self.table_view.setMinimumSize(400, 600) self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) self.init_data() self.chart.createDefaultAxes() self.chart_view = QtCharts.QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) self.chart_view.setMinimumSize(800, 600) # create main layout self.main_layout = QGridLayout() self.main_layout.addWidget(self.table_view, 1, 0) self.main_layout.addWidget(self.chart_view, 1, 1) self.main_layout.setColumnStretch(1, 2) self.main_layout.setColumnStretch(0, 1) self.setLayout(self.main_layout) def add_series(self, name, columns): self.series = QtCharts.QLineSeries() self.series.setName(name) self.mapper = QtCharts.QVXYModelMapper(self) self.mapper.setXColumn(columns[0]) self.mapper.setYColumn(columns[1]) self.mapper.setSeries(self.series) self.mapper.setModel(self.model) self.chart.addSeries(self.series) # for storing color hex from the series seriesColorHex = "#000000" # get the color of the series and use it for showing the mapped area seriesColorHex = "{}".format(self.series.pen().color().name()) self.model.add_mapping(seriesColorHex, QRect(columns[0], 0, 2, self.model.rowCount())) def init_data(self): for i in range(int(self.model.columnCount()/2)): self.add_series("Line {}".format(i+1), [i*2, (i*2)+1])
def __init__(self, model, parent=None): super(BarChartWidget, self).__init__(parent) self.model = model grid = QGridLayout(self) # https://stackoverflow.com/questions/35946289/qt-qgridlayout-setrowstretch-not-working settingsGrid = QGridLayout(self) settingsGrid.addWidget(QLabel("Dataset"), 0, 0) self.datasetLabel = QLabel("no dataset") settingsGrid.addWidget(self.datasetLabel, 1, 0, 1, 2) settingsGrid.addWidget(QLabel("X Axis"), 2, 0) settingsGrid.addWidget(QLabel("Y Axis"), 3, 0) dataSetButton = QPushButton("Choose dataset", self) dataSetButton.clicked.connect(self.chooseDataset) self.xAxisComboBox = QComboBox(self) self.yAxisComboBox = QComboBox(self) settingsGrid.addWidget(dataSetButton, 0, 1) settingsGrid.addWidget(self.xAxisComboBox, 2, 1) settingsGrid.addWidget(self.yAxisComboBox, 3, 1) # settingsGrid.addWidget(QLabel("4"), 4, 1) createChartButton = QPushButton("Create Chart", self) createChartButton.clicked.connect(self.createChart) settingsGrid.addWidget(createChartButton, 4, 1) settingsGrid.setRowStretch(5, 10) grid.addLayout(settingsGrid, 0, 0) self.chart = QStackedWidget() grid.addWidget(self.chart, 0, 1) # self.chart.addWidget(QLabel("skka")) grid.setColumnStretch(0, 1) grid.setColumnStretch(1, 1) self.setLayout(grid) self.loadDataset("all_hour.csv")
def __init__(self): super().__init__() self._analysis = None self._cancel_message_box = None self._title = PageTitle("Initialisation de l'analyse", False, self) self._stat_component = StatComponent() self._image_component = ImageComponent() self._progress_component = ProgressComponent() components_layout = QGridLayout() components_layout.setHorizontalSpacing(20) components_layout.setColumnStretch(0, 6) components_layout.setColumnStretch(1, 5) components_layout.addWidget(self._stat_component, 0, 0) components_layout.addWidget(self._image_component, 0, 1) components_layout.addWidget(self._progress_component, 1, 0, 1, 2) self._return_button = StylizedButton("Annuler", "yellow") self._return_button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) button_layout = QHBoxLayout() button_layout.setAlignment(Qt.AlignRight) button_layout.setSpacing(35) button_layout.addWidget(self._return_button) main_layout = QVBoxLayout() main_layout.addWidget(self._title) main_layout.addLayout(components_layout) main_layout.addLayout(button_layout) self.setLayout(main_layout) self._return_button.clicked.connect(self._returnClick) self._analysis_thread = AnalysisThread() self._analysis_thread.initialized.connect( self._neuralNetworkInitialized) self._analysis_thread.imageProcessed.connect(self._imageProcessed) self._analysis_thread.completed.connect(self._analysisFinished) self._post_analysis_thread = PostAnalysisThread() self._post_analysis_thread.completed.connect( self._postAnalysisFinished)
def initUI(self): mainLayout = QGridLayout(self) mainLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) mainLayout.setColumnStretch(0, 0) mainLayout.setColumnStretch(1, 1) mainLayout.setColumnStretch(2, 1) mainLayout.setColumnStretch(3, 1) self.setLayout(mainLayout) nameText = QLabel('Name:') nameText.setAlignment(Qt.AlignRight) self.nameIn = QLineEdit() self.nameIn.setText(self.text) mainLayout.addWidget(nameText, 0, 0) mainLayout.addWidget(self.nameIn, 0, 1, 1, 3) langText = QLabel('Language:') langText.setAlignment(Qt.AlignRight) self.pyCheck = QRadioButton(CommandType.PYTHON) if self.cmdType == self.pyCheck.text(): self.pyCheck.setChecked(True) self.melCheck = QRadioButton(CommandType.MEL) if self.cmdType == self.melCheck.text(): self.melCheck.setChecked(True) mainLayout.addWidget(langText, 1, 0) mainLayout.addWidget(self.pyCheck, 1, 1) mainLayout.addWidget(self.melCheck, 1, 3) cmdText = QLabel('Command:') cmdText.setAlignment(Qt.AlignRight | Qt.AlignTop) self.cmdIn = QTextEdit() self.cmdIn.setPlainText(self.cmd) mainLayout.addWidget(cmdText, 2, 0) mainLayout.addWidget(self.cmdIn, 2, 1, 1, 3) okBtn = QPushButton("OK") okBtn.clicked.connect(self.accept) testBtn = QPushButton("Test") testBtn.clicked.connect(self.onTest) cancelBtn = QPushButton("Cancel") cancelBtn.clicked.connect(self.reject) mainLayout.addWidget(okBtn, 3, 1, 1, 1) mainLayout.addWidget(testBtn, 3, 2, 1, 1) mainLayout.addWidget(cancelBtn, 3, 3, 1, 1) self.setWindowTitle("Edit Command") self.setWindowFlags(Qt.WindowStaysOnTopHint)
def __init__(self): super().__init__() self.setTitle("Paramètres") self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) # Main layout main_layout = QHBoxLayout(self) main_layout.setSpacing(20) left_layout = QFormLayout() left_layout.setHorizontalSpacing(20) left_layout.setVerticalSpacing(14) self._threshold_sbox = QSpinBox() self._threshold_sbox.setRange(1, 99) self._threshold_sbox.setSuffix(" %") self._threshold_sbox.setMaximumWidth(250) left_layout.addRow("Seuil de détection :", self._threshold_sbox) self._devices_list = QComboBox() self._devices_list.setMaximumWidth(250) self._setDevicesList() left_layout.addRow("Processeur à utiliser :", self._devices_list) morphotype_layout = QGridLayout() morphotype_layout.setSpacing(5) morphotype_layout.addWidget(QLabel("Morphotypes à détecter :"), 0, 0, 1, 4) self._tab_cbox = {} for k,m in Loader.SpongesMorphotypes().items(): sponge_cbox = QCheckBox(m.name()) self._tab_cbox[k] = sponge_cbox x = k%2 + 1 y = k//2 + 1 morphotype_layout.addWidget(sponge_cbox, x, y) morphotype_layout.setColumnMinimumWidth(0, 15) morphotype_layout.setColumnStretch(0, 0) main_layout.addLayout(left_layout) main_layout.addLayout(morphotype_layout) self.setLayout(main_layout)
def set_ui(self): layout = QGridLayout() layout.addWidget(self.target_wl.title, 0, 0) layout.addWidget(self.target_wl.edit, 0, 1) layout.addWidget(self.target_wl.unit, 0, 2) layout.addWidget(self.set_wl, 0, 3) # layout.addWidget(self.tune_step.title, 1, 0) # layout.addWidget(self.tune_step.edit, 1, 1) # layout.addWidget(self.tune_step.unit, 1, 2) # layout.addWidget(self.plus, 1, 3) # layout.addWidget(self.min, 1, 4) layout.addWidget(self.show_vernier, 1, 1) layout.addWidget(self.update_vernier, 1, 3) layout.setColumnStretch(4, 1) # layout.addWidget("", 0, 4, 1, 4) # layout.addWidget("", 1, 4, 1, 4) self.setLayout(layout)
def createOptionsGroupBox(self): self.optionsGroupBox = QGroupBox("Options") buttonsOrientationLabel = QLabel("Orientation of buttons:") buttonsOrientationComboBox = QComboBox() buttonsOrientationComboBox.addItem("Horizontal", Qt.Horizontal) buttonsOrientationComboBox.addItem("Vertical", Qt.Vertical) buttonsOrientationComboBox.currentIndexChanged[int].connect(self.buttonsOrientationChanged) self.buttonsOrientationComboBox = buttonsOrientationComboBox optionsLayout = QGridLayout() optionsLayout.addWidget(buttonsOrientationLabel, 0, 0) optionsLayout.addWidget(self.buttonsOrientationComboBox, 0, 1) optionsLayout.setColumnStretch(2, 1) self.optionsGroupBox.setLayout(optionsLayout)
class GroupPupilTracking(QGroupBox): def __init__(self, parent): """Groupbox for pynwb.behavior.PupilTracking fields filling form.""" super().__init__() self.setTitle('PupilTracking') self.parent = parent self.group_type = 'PupilTracking' self.lbl_name = QLabel('name<span style="color:' + required_asterisk_color + ';">*</span>:') self.form_name = QLineEdit('PupilTracking') self.form_name.setToolTip("The unique name of this PupilTracking") nInstances = 0 for grp in self.parent.groups_list: if isinstance(grp, GroupPupilTracking): nInstances += 1 if nInstances > 0: self.form_name.setText('PupilTracking' + str(nInstances)) self.lbl_time_series = QLabel('time_series:') self.time_series = GroupTimeSeries(self) # self.combo_time_series = CustomComboBox() # self.combo_time_series.setToolTip("TimeSeries to store in this interface") self.grid = QGridLayout() self.grid.setColumnStretch(2, 1) self.grid.addWidget(self.lbl_name, 0, 0, 1, 2) self.grid.addWidget(self.form_name, 0, 2, 1, 4) self.grid.addWidget(self.lbl_time_series, 1, 0, 1, 2) self.grid.addWidget(self.time_series, 1, 2, 1, 4) self.setLayout(self.grid) def refresh_objects_references(self, metadata=None): """Refreshes references with existing objects in parent group.""" pass def read_fields(self): """Reads fields and returns them structured in a dictionary.""" data = {} data['name'] = self.form_name.text() data['time_series'] = self.time_series.read_fields() return data def write_fields(self, data={}): """Reads structured dictionary and write in form fields.""" self.form_name.setText(data['name'])
def make_ui(self): """Create and lay out UI elements.""" filter = QSpinBox() filter.setRange(1, 6) self.widgets['filter'] = filter btn_start = QPushButton() btn_start.setText('Start') btn_start.clicked.connect(self.run) self.widgets['btn_start'] = btn_start side_panel = QGridLayout() side_panel.setColumnStretch(0, 0) side_panel.setColumnStretch(1, 1) side_panel.setColumnStretch(2, 1) side_panel.setRowStretch(6, 1) # shove everything to the top side_panel.addWidget(QLabel('<h2>Controls</h2>'), 0, 0, 1, 2) side_panel.addWidget(QLabel('Filter:'), 1, 0) side_panel.addWidget(filter, 1, 1) side_panel.addWidget(btn_start, 2, 0, 1, 2) graph = FigureCanvas(Figure(tight_layout=True)) graph_toolbar = NavigationToolBar(graph, None) graph_toolbar.setObjectName('GraphToolBar') self.widgets['graph'] = graph axis = graph.figure.subplots() axis.grid() axis.set_xlim(0, 100) axis.set_ylim(0, 10) self.widgets['axis'] = axis vbox = QVBoxLayout() vbox.addWidget(graph) vbox.addWidget(graph_toolbar) hbox = QHBoxLayout() hbox.addLayout(side_panel) hbox.addLayout(vbox, 1) main_widget = QFrame() main_widget.setLayout(hbox) return main_widget
def createGridGroupBox(self): self.gridGroupBox = QGroupBox("Grid layout") layout = QGridLayout() for i in range(Dialog.NumGridRows): label = QLabel("Line %d:" % (i + 1)) lineEdit = QLineEdit() layout.addWidget(label, i + 1, 0) layout.addWidget(lineEdit, i + 1, 1) self.smallEditor = QTextEdit() self.smallEditor.setPlainText( "This widget takes up about two thirds of the grid layout.") layout.addWidget(self.smallEditor, 0, 2, 4, 1) layout.setColumnStretch(1, 10) layout.setColumnStretch(2, 20) self.gridGroupBox.setLayout(layout)
def __init__(self, parent, header): super(HeaderWidget, self).__init__(parent) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setVerticalSpacing(1) row = 0 col = 0 for field in header.fields: name = field[0] value = field[1] fieldType = "" if len(field) > 2: fieldType = field[2] layout.addWidget(QLabel(name + ": "), row, col * 3) if isinstance(value, list): for i in range(0, len(value)): if fieldType == "ptr": label = ClickableAddressLabel(value[i]) elif fieldType == "code": label = ClickableCodeLabel(value[i]) else: label = QLabel(value[i]) label.setFont(binaryninjaui.getMonospaceFont(self)) layout.addWidget(label, row, col * 3 + 1) row += 1 else: if fieldType == "ptr": label = ClickableAddressLabel(value) elif fieldType == "code": label = ClickableCodeLabel(value) else: label = QLabel(value) label.setFont(binaryninjaui.getMonospaceFont(self)) layout.addWidget(label, row, col * 3 + 1) row += 1 if (header.columns > 1) and (row >= header.rows_per_column) and ((col + 1) < header.columns): row = 0 col += 1 for col in range(1, header.columns): layout.setColumnMinimumWidth(col * 3 - 1, UIContext.getScaledWindowSize(20, 20).width()) layout.setColumnStretch(header.columns * 3 - 1, 1) self.setLayout(layout)
def createBinsBox(self): self.binstable = QTableWidget(0, 4) self.binstable_isready = False labels = [ "no. of HKLs", "lower bin value", "upper bin value", "opacity" ] self.binstable.setHorizontalHeaderLabels(labels) self.binstable.horizontalHeader().setDefaultAlignment(Qt.AlignLeft) self.bindata_labeltxt = QLabel() self.bindata_labeltxt.setText("Data binned:") self.Nbins_spinBox = QSpinBox() self.Nbins_spinBox.setSingleStep(1) self.Nbins_spinBox.setRange(1, 40) self.Nbins_spinBox.valueChanged.connect(self.onNbinsChanged) self.Nbins_labeltxt = QLabel() self.Nbins_labeltxt.setText("Number of bins:") self.OpaqueAllCheckbox = QCheckBox() #self.OpaqueAllCheckbox.setTristate() self.OpaqueAllCheckbox.setCheckState(Qt.Checked) self.OpaqueAllCheckbox.setText("Show all data in bins") self.OpaqueAllCheckbox.clicked.connect(self.onOpaqueAll) self.binstable.itemChanged.connect(self.onBinsTableItemChanged) self.binstable.itemSelectionChanged.connect( self.onBinsTableItemSelectionChanged) self.BinDataComboBox = QComboBox() self.BinDataComboBox.activated.connect(self.onBindataComboSelchange) self.BinsGroupBox = QGroupBox("Bins") layout = QGridLayout() layout.addWidget(self.bindata_labeltxt, 0, 0) layout.addWidget(self.BinDataComboBox, 0, 1) layout.addWidget(self.Nbins_labeltxt, 0, 2) layout.addWidget(self.Nbins_spinBox, 0, 3) layout.addWidget(self.OpaqueAllCheckbox, 1, 2) layout.addWidget(self.binstable, 2, 0, 1, 4) layout.setColumnStretch(0, 0) layout.setColumnStretch(1, 2) layout.setColumnStretch(3, 1) self.BinsGroupBox.setLayout(layout)
def initPixelInfoLayout(self): layout = QGridLayout() layout.setColumnStretch(3, 9) layout.setVerticalSpacing(0) layout.setHorizontalSpacing(20) self.pixelXY1Label = QLabel() self.pixelXY2Label = QLabel() self.pixelIndex1Label = QLabel() self.pixelIndex2Label = QLabel() self.pixelColor1Label = QLabel() self.pixelColor2Label = QLabel() layout.addWidget(self.pixelXY1Label, 0, 0, alignment=Qt.AlignLeft | Qt.AlignTop) layout.addWidget(self.pixelXY2Label, 1, 0, alignment=Qt.AlignLeft | Qt.AlignTop) layout.addWidget(self.pixelIndex1Label, 0, 1, alignment=Qt.AlignLeft | Qt.AlignTop) layout.addWidget(self.pixelIndex2Label, 1, 1, alignment=Qt.AlignLeft | Qt.AlignTop) layout.addWidget(self.pixelColor1Label, 0, 2, alignment=Qt.AlignLeft | Qt.AlignTop) layout.addWidget(self.pixelColor2Label, 1, 2, alignment=Qt.AlignLeft | Qt.AlignTop) return layout
def __init__(self): super(Window, self).__init__() self.renderArea = RenderArea() self.shapeComboBox = QComboBox() self.shapeComboBox.addItem("Polygon", RenderArea.Polygon) self.shapeComboBox.addItem("Rectangle", RenderArea.Rect) self.shapeComboBox.addItem("Rounded Rectangle", RenderArea.RoundedRect) self.shapeComboBox.addItem("Ellipse", RenderArea.Ellipse) self.shapeComboBox.addItem("Pie", RenderArea.Pie) self.shapeComboBox.addItem("Chord", RenderArea.Chord) self.shapeComboBox.addItem("Path", RenderArea.Path) self.shapeComboBox.addItem("Line", RenderArea.Line) self.shapeComboBox.addItem("Polyline", RenderArea.Polyline) self.shapeComboBox.addItem("Arc", RenderArea.Arc) self.shapeComboBox.addItem("Points", RenderArea.Points) self.shapeComboBox.addItem("Text", RenderArea.Text) self.shapeComboBox.addItem("Pixmap", RenderArea.Pixmap) shapeLabel = QLabel("&Shape:") shapeLabel.setBuddy(self.shapeComboBox) self.penWidthSpinBox = QSpinBox() self.penWidthSpinBox.setRange(0, 20) self.penWidthSpinBox.setSpecialValueText("0 (cosmetic pen)") penWidthLabel = QLabel("Pen &Width:") penWidthLabel.setBuddy(self.penWidthSpinBox) self.penStyleComboBox = QComboBox() self.penStyleComboBox.addItem("Solid", Qt.SolidLine) self.penStyleComboBox.addItem("Dash", Qt.DashLine) self.penStyleComboBox.addItem("Dot", Qt.DotLine) self.penStyleComboBox.addItem("Dash Dot", Qt.DashDotLine) self.penStyleComboBox.addItem("Dash Dot Dot", Qt.DashDotDotLine) self.penStyleComboBox.addItem("None", Qt.NoPen) penStyleLabel = QLabel("&Pen Style:") penStyleLabel.setBuddy(self.penStyleComboBox) self.penCapComboBox = QComboBox() self.penCapComboBox.addItem("Flat", Qt.FlatCap) self.penCapComboBox.addItem("Square", Qt.SquareCap) self.penCapComboBox.addItem("Round", Qt.RoundCap) penCapLabel = QLabel("Pen &Cap:") penCapLabel.setBuddy(self.penCapComboBox) self.penJoinComboBox = QComboBox() self.penJoinComboBox.addItem("Miter", Qt.MiterJoin) self.penJoinComboBox.addItem("Bevel", Qt.BevelJoin) self.penJoinComboBox.addItem("Round", Qt.RoundJoin) penJoinLabel = QLabel("Pen &Join:") penJoinLabel.setBuddy(self.penJoinComboBox) self.brushStyleComboBox = QComboBox() self.brushStyleComboBox.addItem("Linear Gradient", Qt.LinearGradientPattern) self.brushStyleComboBox.addItem("Radial Gradient", Qt.RadialGradientPattern) self.brushStyleComboBox.addItem("Conical Gradient", Qt.ConicalGradientPattern) self.brushStyleComboBox.addItem("Texture", Qt.TexturePattern) self.brushStyleComboBox.addItem("Solid", Qt.SolidPattern) self.brushStyleComboBox.addItem("Horizontal", Qt.HorPattern) self.brushStyleComboBox.addItem("Vertical", Qt.VerPattern) self.brushStyleComboBox.addItem("Cross", Qt.CrossPattern) self.brushStyleComboBox.addItem("Backward Diagonal", Qt.BDiagPattern) self.brushStyleComboBox.addItem("Forward Diagonal", Qt.FDiagPattern) self.brushStyleComboBox.addItem("Diagonal Cross", Qt.DiagCrossPattern) self.brushStyleComboBox.addItem("Dense 1", Qt.Dense1Pattern) self.brushStyleComboBox.addItem("Dense 2", Qt.Dense2Pattern) self.brushStyleComboBox.addItem("Dense 3", Qt.Dense3Pattern) self.brushStyleComboBox.addItem("Dense 4", Qt.Dense4Pattern) self.brushStyleComboBox.addItem("Dense 5", Qt.Dense5Pattern) self.brushStyleComboBox.addItem("Dense 6", Qt.Dense6Pattern) self.brushStyleComboBox.addItem("Dense 7", Qt.Dense7Pattern) self.brushStyleComboBox.addItem("None", Qt.NoBrush) brushStyleLabel = QLabel("&Brush Style:") brushStyleLabel.setBuddy(self.brushStyleComboBox) otherOptionsLabel = QLabel("Other Options:") self.antialiasingCheckBox = QCheckBox("&Antialiasing") self.transformationsCheckBox = QCheckBox("&Transformations") self.shapeComboBox.activated.connect(self.shapeChanged) self.penWidthSpinBox.valueChanged.connect(self.penChanged) self.penStyleComboBox.activated.connect(self.penChanged) self.penCapComboBox.activated.connect(self.penChanged) self.penJoinComboBox.activated.connect(self.penChanged) self.brushStyleComboBox.activated.connect(self.brushChanged) self.antialiasingCheckBox.toggled.connect(self.renderArea.setAntialiased) self.transformationsCheckBox.toggled.connect(self.renderArea.setTransformed) mainLayout = QGridLayout() mainLayout.setColumnStretch(0, 1) mainLayout.setColumnStretch(3, 1) mainLayout.addWidget(self.renderArea, 0, 0, 1, 4) mainLayout.setRowMinimumHeight(1, 6) mainLayout.addWidget(shapeLabel, 2, 1, Qt.AlignRight) mainLayout.addWidget(self.shapeComboBox, 2, 2) mainLayout.addWidget(penWidthLabel, 3, 1, Qt.AlignRight) mainLayout.addWidget(self.penWidthSpinBox, 3, 2) mainLayout.addWidget(penStyleLabel, 4, 1, Qt.AlignRight) mainLayout.addWidget(self.penStyleComboBox, 4, 2) mainLayout.addWidget(penCapLabel, 5, 1, Qt.AlignRight) mainLayout.addWidget(self.penCapComboBox, 5, 2) mainLayout.addWidget(penJoinLabel, 6, 1, Qt.AlignRight) mainLayout.addWidget(self.penJoinComboBox, 6, 2) mainLayout.addWidget(brushStyleLabel, 7, 1, Qt.AlignRight) mainLayout.addWidget(self.brushStyleComboBox, 7, 2) mainLayout.setRowMinimumHeight(8, 6) mainLayout.addWidget(otherOptionsLabel, 9, 1, Qt.AlignRight) mainLayout.addWidget(self.antialiasingCheckBox, 9, 2) mainLayout.addWidget(self.transformationsCheckBox, 10, 2) self.setLayout(mainLayout) self.shapeChanged() self.penChanged() self.brushChanged() self.antialiasingCheckBox.setChecked(True) self.setWindowTitle("Basic Drawing")