def __init__(self): QMainWindow.__init__(self) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setWindowTitle("application main window") self.file_menu = QMenu('&File', self) self.file_menu.addAction('&Quit', self.fileQuit, QtCore.Qt.CTRL + QtCore.Qt.Key_Q) self.menuBar().addMenu(self.file_menu) self.help_menu = QMenu('&Help', self) self.menuBar().addSeparator() self.menuBar().addMenu(self.help_menu) self.help_menu.addAction('&About', self.about) self.filename = "Fields_global.h5" self.f=h5.File(self.filename) dset = self.f["/1d_global/potential"] print "Attention: the dataset must be 4 dimensions" #> the main layout: left part (for the hdf5 tree view) and right part (for the plot area) self.main_widget = QWidget(self) #> if not putting splitter into a layout, the widgets in splitter do not fill the main windows #> (may exceed the app windows, so that the figures are partially shown ). layout = QVBoxLayout(self.main_widget) hSplitter = QSplitter(self.main_widget) layout.addWidget(hSplitter) #> the left part: the hdf5 tree view h5tree = QWidget() treeview = QTreeView(h5tree) self.model = HDFTreeModel([]) self.model.openFile(self.filename, 'r+') treeview.setModel(self.model) treeview.doubleClicked.connect(self.redraw) hSplitter.addWidget(treeview) #> the right part: the plot area plotArea = QWidget(self.main_widget) sizePolicy = QSizePolicy(); sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding); sizePolicy.setVerticalPolicy(QSizePolicy.Expanding); plotArea.setSizePolicy(sizePolicy); hSplitter.addWidget(plotArea) plotVboxlayout = QVBoxLayout(plotArea) self.sc = MyStaticMplCanvas(self.main_widget, dset, width=5, height=4, dpi=100) self.dc = MyDynamicMplCanvas(self.main_widget, dset, width=5, height=4, dpi=100) plotVboxlayout.addWidget(self.sc) plotVboxlayout.addWidget(self.dc) self.main_widget.setFocus() self.setCentralWidget(self.main_widget) self.statusBar().showMessage("All hail matplotlib!", 2000)
def __init__(self): super().__init__() self.path_label = QLabel() self.selection_made = False self.old_stylesheet = self.styleSheet() self.path = None # give all space to the label expanding = QSizePolicy() expanding.setHorizontalPolicy(QSizePolicy.Expanding) self.path_label.setSizePolicy(expanding) self.file_chooser = FileChooserButton("Choose replay", QFileDialog.ExistingFile, ["osu! Replay File (*.osr)"]) self.folder_chooser = FileChooserButton("Choose folder", QFileDialog.Directory) # the buttons will steal the mousePressEvent so connect them manually self.file_chooser.clicked.connect(self.reset_required) self.folder_chooser.clicked.connect(self.reset_required) self.file_chooser.path_chosen_signal.connect(self.handle_new_path) self.folder_chooser.path_chosen_signal.connect(self.handle_new_path) layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.path_label) layout.addWidget(self.file_chooser) layout.addWidget(self.folder_chooser) self.setLayout(layout)
def __init__(self): super().__init__() self.bundle = None self.manual_change = True size_policy = QSizePolicy() size_policy.setHorizontalPolicy(QSizePolicy.Expanding) size_policy.setVerticalPolicy(QSizePolicy.Expanding) self.setSizePolicy(size_policy) layout = QVBoxLayout() layout.setContentsMargins(0, 4, 0, 0) this_row = QHBoxLayout() this_row.addSpacing(4) selection_label = QLabel() selection_label.setText("Dieses Bild: ") this_row.addWidget(selection_label) self.keep_button = QRadioButton() self.keep_button.setText("behalten") self.keep_button.setMaximumHeight(14) self.keep_button.toggled.connect(self.mark_bundle) this_row.addWidget(self.keep_button) self.discard_button = QRadioButton() self.discard_button.setText("löschen") self.discard_button.setMaximumHeight(14) this_row.addWidget(self.discard_button) this_row.addStretch(1) layout.addLayout(this_row) img_scroll_area = QScrollArea() img_scroll_area.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self.img_widget = ImageWidget(None) img_scroll_area.setWidget(self.img_widget) layout.addWidget(img_scroll_area, stretch=1) layout.addStretch() self.setLayout(layout)
class BatchStepList(QWidget): """List displayed to the left of the main Batch widgets to show the user which tracking setup step they are on.""" active_style = "QLabel { background-color : #eff0f1; color : #31363b; }" inactive_style = "QLabel { background-color : #31363b; color : #eff0f1; }" def __init__(self, highlight=0, parent=None): super(BatchStepList, self).__init__(parent) self.layout = QVBoxLayout() self.highlight = highlight self.size_policy = QSizePolicy() self.size_policy.setHorizontalPolicy(QSizePolicy.Minimum) self.size_policy.setVerticalPolicy(QSizePolicy.Expanding) self.labels = [QLabel(l) for l in \ ['1. Select Files', '2. Define Arena', '3. Define Female', '4. Set Tight Threshold', '5. Set Loose Threshold', '6. Track']] self.update_layout() def update_layout(self): for i, label in enumerate(self.labels): if i == self.highlight: label.setStyleSheet(self.active_style) else: label.setStyleSheet(self.inactive_style) label.setSizePolicy(self.size_policy) label.setFixedWidth(160) self.layout.addWidget(label) self.setLayout(self.layout)
def __init__(self, url, *args, **kwargs): QWebEngineView.__init__(self, *args, **kwargs) self._page = QWebEnginePage(get_profile()) self.setPage(self._page) self.load(url) # Shortcut to manually reload self.reload_shortcut = QShortcut('CTRL+R', self) self.reload_shortcut.activated.connect(self.reload) # Check if pages is correctly loaded self.loadFinished.connect(self._load_finished) # Shortcut to close self.quit_shortcut = QShortcut('CTRL+ALT+DELETE', self) self.quit_shortcut.activated.connect(lambda: self.close()) # Stretch the browser policy = QSizePolicy() policy.setVerticalStretch(1) policy.setHorizontalStretch(1) policy.setVerticalPolicy(QSizePolicy.Preferred) policy.setHorizontalPolicy(QSizePolicy.Preferred) self.setSizePolicy(policy)
def __init__(self, parent, args): super(CentralWidget, self).__init__(parent) self.layout = QHBoxLayout() self.setLayout(self.layout) self.annotator_config = AnnotatorConfigurationModel(args.config) self.annotation = AnnotationModel(args.video, args.output, self.annotator_config) splitter = QSplitter(Qt.Horizontal) self.canvas = ImageCanvas(self, self.annotator_config, self.annotation) splitter.addWidget(self.canvas) self.sidebar = QWidget(self) self.sidebar.setMinimumWidth(450) splitter.addWidget(self.sidebar) self.sidebar_layout = QVBoxLayout() self.sidebar.setLayout(self.sidebar_layout) self.video_control = VideoControl(self, self.annotation, self.canvas) self.sidebar_layout.addWidget(self.video_control) self.config_editor = ConfigurationEditor(self, self.annotator_config) self.sidebar_layout.addWidget(self.config_editor) self.ann_editor = AnnotationEditor(self, self.annotation, self.canvas) self.sidebar_layout.addWidget(self.ann_editor) policy = QSizePolicy() policy.setHorizontalPolicy(QSizePolicy.Maximum) policy.setVerticalPolicy(QSizePolicy.Maximum) self.canvas.setSizePolicy(policy) splitter.setStretchFactor(0, 1) splitter.setStretchFactor(1, 0) self.layout.addWidget(splitter)
def __init__(self): super().__init__() visualize_button = PushButton("Visualization") visualize_button.clicked.connect(self.visualize_button_clicked) # to style it in our stylesheet visualize_button.setObjectName("bigButton") bulk_investigation_button = PushButton("Investigation / Settings") bulk_investigation_button.clicked.connect( self.bulk_investigation_button_clicked) bulk_investigation_button.setObjectName("bigButton") for button in [visualize_button, bulk_investigation_button]: font = button.font() font.setPointSize(30) button.setFont(font) expanding = QSizePolicy() expanding.setHorizontalPolicy(QSizePolicy.Expanding) expanding.setVerticalPolicy(QSizePolicy.Expanding) button.setSizePolicy(expanding) layout = QHBoxLayout() layout.addWidget(visualize_button) layout.addWidget(bulk_investigation_button) layout.setContentsMargins(15, 15, 15, 10) self.setLayout(layout)
def __init__(self, parent, binpath): super().__init__(parent) sizePolicy = QSizePolicy() sizePolicy.setHorizontalPolicy(QSizePolicy.Maximum) sizePolicy.setVerticalPolicy(QSizePolicy.Maximum) #self.setSizePolicy(sizePolicy) self.setMouseTracking(True) self.on_selection = False self.selected = False self.c = Communicate() self.start_position = QPoint(0,0) self.last_position = QPoint(0,0) image = ( b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" b"\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00" b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00" b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00" b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00" b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00" b"\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00" b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") im = QImage(image, 8,8, QImage.Format_RGB16) im = im.scaled(64,64) self.crop = QPixmap() self.crop.convertFromImage(im)
def __init__(self, parent=None): super(PlotWidget1D, self).__init__() self.parent = parent # data4d has four dimensions, the first is time self.prefix = 'data' self.data4d = collect("/Fields/", "Phi_global_avg", prefix=self.prefix) self.dataName = "electric potential" sizePolicy = QSizePolicy() sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding) sizePolicy.setVerticalPolicy(QSizePolicy.Expanding) self.setSizePolicy(sizePolicy) self.plotVboxlayout = QVBoxLayout(self) self.tab_widget = QTabWidget(self) self.plotVboxlayout.addWidget(self.tab_widget) # matplotlib figure tab self.sc = MyStaticMplCanvas1D(self, self.data4d, title=self.dataName) self.sc.draw() self.tab_widget.addTab(self.sc, "Figures") # data tab self.data_widget = QTableWidget(self) self.set_data_widget(self.data4d[0, 0, :, :]) self.tab_widget.addTab(self.data_widget, "data") #> The slider self.sp_widget = QWidget(self) self.sp_layout = QHBoxLayout(self.sp_widget) self.label = QLabel("time") self.plainTextEdit = QTextEdit("0") self.plainTextEdit.setMaximumHeight(20) self.plainTextEdit.setMaximumWidth(100) self.sp = QSlider(QtCore.Qt.Horizontal) self.sp.setMinimum(0) self.sp.setMaximum(self.data4d.shape[0] - 1) self.sp.setTickPosition(QSlider.TicksBelow) self.sp.setTickInterval(1) self.sp.valueChanged.connect(self.timeChange) self.sp_layout.addWidget(self.label) self.sp_layout.addWidget(self.plainTextEdit) self.sp_layout.addWidget(self.sp) self.save_widget = QWidget(self) self.save_layout = QHBoxLayout(self.save_widget) self.button_saveFig = QPushButton("Save Figure") self.button_saveAnimation = QPushButton("Save Animation") self.save_layout.addWidget(self.button_saveFig) self.save_layout.addWidget(self.button_saveAnimation) self.button_saveAnimation.clicked.connect(self.save_animation) self.button_saveFig.clicked.connect(self.save_fig) #self.plotVboxlayout.addWidget(self.sc) self.plotVboxlayout.addWidget(self.sp_widget) self.plotVboxlayout.addWidget(self.save_widget)
def on_add_button_to_list(self, button_group, layout, textedit, overide_str=None): """ Adds a button to a specified button group and layout. :param button_group: QButtonGroup button is to be added to. :param layout: QLayout button is to be added to. :param lineedit: QLineEdit containing the new button string. :return: """ if overide_str is not None: new_btn_str = overide_str else: new_btn_str = textedit.toPlainText() textedit.clear() new_btn = QPushButton(new_btn_str) new_btn.setFont(self.edit_font) new_btn.setFlat(True) new_btn.setCheckable(True) new_btn.toggle() size_policy = QSizePolicy() size_policy.setHorizontalPolicy(QSizePolicy.Expanding) size_policy.setVerticalPolicy(QSizePolicy.Preferred) new_btn.setSizePolicy(size_policy) button_group.addButton(new_btn) inset_pos = layout.count() - 2 layout.insertWidget(inset_pos, new_btn)
def __init__(self, task): self.task = task super().__init__(flags=Qt.WindowTitleHint | Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint) size_policy = QSizePolicy() size_policy.setHorizontalPolicy(QSizePolicy.MinimumExpanding) size_policy.setHorizontalStretch(255) self.setSizePolicy(size_policy) self.setMinimumSize(120, 36) self.setCursor(Qt.OpenHandCursor) task_layout = QVBoxLayout() task_layout.setContentsMargins(25, 6, 6, 6) first_line = QHBoxLayout() self.name_widget = QLabel() self.name_widget.setText(self.task.text) first_line.addWidget(self.name_widget, stretch=255, alignment=Qt.AlignLeading) self.edit_name = QLineEdit() self.edit_name.setText(self.task.text) self.edit_name.textChanged.connect(self.setTaskText) self.edit_name.returnPressed.connect(self.leaveEditMode) first_line.addWidget(self.edit_name) self.edit_button = QPushButton() self.edit_button.setFlat(True) self.edit_button.setIcon(QIcon("Icon/Edit.png")) self.edit_button.clicked.connect(self.enterEditMode) first_line.addWidget(self.edit_button, alignment=Qt.AlignRight) self.leave_edit_mode_button = QPushButton() self.leave_edit_mode_button.setFlat(True) self.leave_edit_mode_button.setIcon(QIcon("Icon/Collapse.png")) self.leave_edit_mode_button.clicked.connect(self.leaveEditMode) first_line.addWidget(self.leave_edit_mode_button, alignment=Qt.AlignRight) del_button = QPushButton() del_button.setFlat(True) #del_button.setIcon(QCommonStyle().standardIcon(QStyle.SP_TrashIcon)) del_button.setIcon(QIcon("Icon/Trash.png")) del_button.clicked.connect(self.delete_task) first_line.addWidget(del_button, alignment=Qt.AlignRight) task_layout.addLayout(first_line) second_line = QHBoxLayout() self.due_date_box = QGroupBox("Due Date") due_date_box_layout = QVBoxLayout() self.due_date_calendar = QCalendarWidget() if self.task.due_date: self.due_date_calendar.setSelectedDate(self.task.due_date) self.due_date_calendar.selectionChanged.connect(self.setDueDate) due_date_box_layout.addWidget(self.due_date_calendar) self.due_date_time = TimeSelector(self.task.get_due_date_time()) self.due_date_time.time_changed.connect(self.setDueDateTime) due_date_box_layout.addWidget(self.due_date_time) self.due_date_box.setLayout(due_date_box_layout) second_line.addWidget(self.due_date_box, alignment=Qt.AlignLeft) task_layout.addLayout(second_line) self.setLayout(task_layout) self.setEditMode(False)
def __init__(self, orientation): super().__init__() self.setOrientation(orientation) self.setRange(0, 0) self.setValue(0) self.setFocusPolicy(Qt.StrongFocus) sizePolicy = QSizePolicy() sizePolicy.setHorizontalPolicy(QSizePolicy.Fixed) sizePolicy.setVerticalPolicy(QSizePolicy.Fixed) self.setSizePolicy(sizePolicy) self.setMinimumSize(QSize(800, 25)) self.setMaximumSize(QSize(800, 25)) self.gatedFrames = []
def __init__(self): super().__init__() self.frame = 0 self.image = QImage(QPixmap(500, 500).toImage()) self.lumen = ([], []) self.plaque = ([], []) self.hide = True sizePolicy = QSizePolicy() sizePolicy.setHorizontalPolicy(QSizePolicy.Fixed) sizePolicy.setVerticalPolicy(QSizePolicy.Fixed) self.setSizePolicy(sizePolicy) self.setMinimumSize(QSize(500, 500)) self.setMaximumSize(QSize(500, 500))
def file_specific_info_layout(self, article_dicts): window_size = self.geometry() # Fonts # - Label Font s = window_size.height() / 20 min_s = 10 if s < min_s: lbl_font_size = min_s else: lbl_font_size = s lbl_font = QFont('SansSerif', lbl_font_size) lbl_font.setBold(True) # - Edit Font s = window_size.height() / 25 min_s = 7 if s < min_s: edit_font_size = min_s else: edit_font_size = s edit_font = QFont('SansSerif', edit_font_size) # - Expand Horizontally horSizePolicy = QSizePolicy() horSizePolicy.setVerticalPolicy(QSizePolicy.Preferred) horSizePolicy.setHorizontalPolicy(QSizePolicy.Expanding) file_info_widget = QWidget() vbox = QVBoxLayout(file_info_widget) for dictionary in article_dicts: for key, value in dictionary.items(): lbl = QLabel(str(key)) lbl.setFont(lbl_font) lbl.setSizePolicy(horSizePolicy) vbox.addWidget(lbl) edit = QLineEdit() edit.setFont(edit_font) edit.setText(str(value)) edit.setSizePolicy(horSizePolicy) vbox.addWidget(edit) scroll_area = QScrollArea() scroll_area.setWidget(file_info_widget) scroll_area.setWidgetResizable(True) return scroll_area
def __init__(self): super().__init__() self._cg = None self.visualizer = None self.old_api_key = get_setting("api_key") self.loadables_q = Queue() # this thread continually checks for new loadables to load self.cg_load_thread = threading.Thread(target=self._load_loadables) # we never kill this thread, so allow the application to quit while it's # still alive self.cg_load_thread.daemon = True self.cg_load_thread.start() self.loadable_loaded = threading.Event() self.show_visualizer_window.connect(self.show_visualizer) self.show_exception_signal.connect(self.show_exception) expanding = QSizePolicy() expanding.setHorizontalPolicy(QSizePolicy.Expanding) expanding.setVerticalPolicy(QSizePolicy.Expanding) self.drop_area = ReplayDropArea() self.drop_area.setSizePolicy(expanding) da_scroll_area = QScrollArea(self) da_scroll_area.setWidget(self.drop_area) da_scroll_area.setWidgetResizable(True) da_scroll_area.setFrameShape(QFrame.NoFrame) self.replay_map_creation = ReplayMapCreation() self.replay_map_creation.setSizePolicy(expanding) rmc_scroll_area = QScrollArea(self) rmc_scroll_area.setWidget(self.replay_map_creation) rmc_scroll_area.setWidgetResizable(True) rmc_scroll_area.setFrameShape(QFrame.NoFrame) visualize_button = PushButton("Visualize") visualize_button.setObjectName("bigButton") visualize_button.clicked.connect(self.visualize) font = visualize_button.font() font.setPointSize(30) visualize_button.setFont(font) expanding = QSizePolicy() expanding.setHorizontalPolicy(QSizePolicy.Expanding) expanding.setVerticalPolicy(QSizePolicy.Expanding) visualize_button.setSizePolicy(expanding) layout = QGridLayout() layout.addWidget(da_scroll_area, 0, 0, 6, 1) layout.addWidget(rmc_scroll_area, 0, 1, 6, 1) layout.addWidget(visualize_button, 6, 0, 2, 2) self.setLayout(layout)
def _createExpandingSizePolicy(horizontal=True, vertical=True) -> QSizePolicy: """Creates a size policy that expands based on the given parameters Args: horizontal: When 'True', the returned size policy expands horizontally vertical: When 'True', the returned size policy expands vertically. Returns: A QSizePolicy representative of the given parameters. """ sizePolicy = QSizePolicy() if horizontal: sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding) if vertical: sizePolicy.setVerticalPolicy(QSizePolicy.Expanding) return sizePolicy
def initUI(self): # create hbox for stat_groupbox self.stats_hbox = QHBoxLayout() # set up stats groupboxes self.stats_groupbox = QGroupBox('Statistics') self.stats_groupbox.setLayout(self.stats_hbox) # set up scrollArea for the compare widget #self.compare_frame = QFrame() #self.analyse_window_scroll_area = QScrollArea() #self.analyse_window_scroll_area.setWidget(self.compare_frame) #self.compare_frame.setFrameStyle(QFrame.WinPanel | QFrame.Raised) #self.compare_frame.setLineWidth(3) #self.analyse_window_scroll_area.setWidgetResizable(True) # set up comapre vbox self.compare_vbox = QVBoxLayout() #self.compare_vbox.addWidget(self.analyse_window_scroll_area) # set up compare groupbox self.compare_groupbox = QGroupBox('Compare Results') self.compare_groupbox.setLayout(self.compare_vbox) # create analyse_window_body_widget self.analyse_window_body_splitter = QSplitter(Qt.Vertical) #self.analyse_window_body_splitter.setLayout(self.analyse_window_body_vbox) self.analyse_window_body_splitter.addWidget(self.stats_groupbox) self.analyse_window_body_splitter.addWidget(self.compare_groupbox) #stats_groupbox_size_policy = QSizePolicy(self.stats_groupbox.sizePolicy()) #print(stats_groupbox_size_policy.Policy()) compare_groupbox_size_policy = QSizePolicy( self.compare_groupbox.sizePolicy()) compare_groupbox_size_policy.setHorizontalPolicy( QSizePolicy.MinimumExpanding) #print(compare_groupbox_size_policy.Policy()) self.compare_groupbox.setSizePolicy(compare_groupbox_size_policy) #self.compare_groupbox.setMinimumWidth(200) # set up body vbox self.analyse_window_vbox = QVBoxLayout() self.analyse_window_vbox.addWidget(self.analyse_window_body_splitter) self.setWindowTitle('Analyse Window') self.setLayout(self.analyse_window_vbox)
def __init__(self, press_button): super(CaptivePortalMessage, self).__init__() self._label = QLabel() labelPolicy = QSizePolicy() labelPolicy.setHorizontalStretch(1) labelPolicy.setHorizontalPolicy(QSizePolicy.Preferred) self._label.setSizePolicy(labelPolicy) self._button = QPushButton() self._button.clicked.connect(press_button) self._layout = QHBoxLayout() self._layout.addWidget(self._label) self._layout.addWidget(self._button) self.setLayout(self._layout)
def __init__(self, parent = None, dataset = None): super(PlotWidget, self).__init__() self.parent = parent sizePolicy = QSizePolicy(); sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding); sizePolicy.setVerticalPolicy(QSizePolicy.Expanding); self.setSizePolicy(sizePolicy); self.plotVboxlayout = QVBoxLayout(self) #> the up part, including sc and slider self.sc = None if (dataset.shape[2] == 1): self.sc = MyStaticMplCanvas1D(self, dataset, width=10, height=4, dpi=100) elif (dataset.shape[1] == 1): self.sc = MyStaticMplCanvas2D(self, dataset, width=5, height=4, dpi=100) #> The slider self.sp_widget = QWidget(self) self.sp_layout = QHBoxLayout(self.sp_widget) self.label = QLabel("time") self.plainTextEdit = QTextEdit("0") self.plainTextEdit.setMaximumHeight(20) self.plainTextEdit.setMaximumWidth(100) self.sp = QSlider(QtCore.Qt.Horizontal) self.sp.setMinimum(0) self.sp.setMaximum(dataset[...].shape[0]-1) self.sp.setTickPosition(QSlider.TicksBelow) self.sp.setTickInterval(1) self.sp.valueChanged.connect(self.timeChange) self.sp_layout.addWidget(self.label) self.sp_layout.addWidget(self.plainTextEdit) self.sp_layout.addWidget(self.sp) self.button_saveAnimation = QPushButton("Save Animation") self.button_saveAnimation.clicked.connect(self.save_animation) self.plotVboxlayout.addWidget(self.sc) self.plotVboxlayout.addWidget(self.sp_widget) self.plotVboxlayout.addWidget(self.button_saveAnimation)
def createSizePolicy(hPolicy=QSizePolicy.Expanding, vPolicy=QSizePolicy.Expanding, hStretch=1, vStretch=1): """ 创建QSizePolicy :param hPolicy: 水平缩放策略 :param vPolicy: 垂直缩放策略 :param hStretch: 水平缩放因子 :param vStretch: 垂直缩放因子 :return: QSizePolicy """ sizePolicy = QSizePolicy() # 水平和垂直方向的大小策略 sizePolicy.setHorizontalPolicy(hPolicy) sizePolicy.setVerticalPolicy(vPolicy) # 缩放因子 sizePolicy.setHorizontalStretch(hStretch) sizePolicy.setVerticalStretch(vStretch) return sizePolicy
def __init__(self, url, get_current_proxy, *args, **kwargs): QWebEngineView.__init__(self, *args, **kwargs) # Register proxy authentication handler self.page().proxyAuthenticationRequired.connect( lambda url, auth, proxyHost: self._proxy_auth( get_current_proxy, url, auth, proxyHost)) # Override user agent self.page().profile().setHttpUserAgent( user_agent_with_system( user_agent=self.page().profile().httpUserAgent(), system_name=system.NAME, system_version=system.VERSION)) # Allow sound playback without user gesture self.page().settings().setAttribute( QWebEngineSettings.PlaybackRequiresUserGesture, False) # Load url self.page().setUrl(url) # Shortcut to manually reload self.reload_shortcut = QShortcut('CTRL+R', self) self.reload_shortcut.activated.connect(self.reload) # Check if pages is correctly loaded self.loadFinished.connect(self._load_finished) # Shortcut to close self.quit_shortcut = QShortcut('CTRL+ALT+DELETE', self) self.quit_shortcut.activated.connect(lambda: self.close()) # Stretch the browser policy = QSizePolicy() policy.setVerticalStretch(1) policy.setHorizontalStretch(1) policy.setVerticalPolicy(QSizePolicy.Preferred) policy.setHorizontalPolicy(QSizePolicy.Preferred) self.setSizePolicy(policy)
def _create_style_view(self, style_path, path_to_icon, style_name): pixmap = self._read_input_pixmap(path_to_icon) if pixmap is not None: # create a scene which will handle the graphical image scene = QGraphicsScene(self) scene.addPixmap(pixmap) # create the the widget which will display the image graphics_view = SelectableGraphicsView(scene, self, style_path, path_to_icon) # set its maximum size to 100 by 100 pixels graphics_view.setMaximumSize(QSize(90, 90)) # set the size policy to fixed so the widgets wont change their size size_policy = QSizePolicy() size_policy.setHorizontalPolicy(QSizePolicy.Fixed) size_policy.setVerticalPolicy(QSizePolicy.Fixed) graphics_view.setSizePolicy(size_policy) # disable the scrollbars for the graphics view graphics_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) graphics_view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # display the widget with a label indicating the stlye name frame = QFrame(self.ui.scrollArea) vertical_layout = QVBoxLayout(frame) frame.setLayout(vertical_layout) frame.setMaximumSize(QSize(120, 150)) vertical_layout.addWidget(graphics_view) title_label = QLabel(style_name, frame) title_label.setAlignment(Qt.AlignHCenter) vertical_layout.addWidget(title_label) self.ui.horizontalLayout_2.addWidget(frame) # connect the signal and slots graphics_view.on_focus.connect(self._style_selector) return graphics_view
def showRenderControls(self): if not self._control_dialog: dprint(1, "creating control dialog") self._control_dialog = ImageControlDialog(self, self._rc, self._imgman) # line below allows window to be resized by the user self._control_dialog.setSizeGripEnabled(True) # get and set sizing self._control_dialog.setMinimumWidth(396) # create size policy for control dialog colour_ctrl_policy = QSizePolicy() colour_ctrl_policy.setHorizontalPolicy(QSizePolicy.Minimum) self._control_dialog.setSizePolicy(colour_ctrl_policy) # setup dockable colour control dialog self._dockable_colour_ctrl = TDockWidget( title=f"{self._rc.image.name}", parent=self.parent().mainwin, bind_widget=self._control_dialog, close_slot=self.colourctrl_dockwidget_closed, toggle_slot=self.colourctrl_dockwidget_toggled) self.addDockWidgetToTab() dprint(1, "done") # set dockable widget visibility in sync with control dialog if not self._control_dialog.isVisible(): dprint(1, "showing control dialog") self._control_dialog.show() self._dockable_colour_ctrl.setVisible(True) self.addDockWidgetToTab() self._dockable_colour_ctrl.show() self._dockable_colour_ctrl.raise_() else: self._control_dialog.hide() self._dockable_colour_ctrl.setVisible(False) self.parent().mainwin.setMaximumWidth( self.parent().mainwin.width() + self._dockable_colour_ctrl.width())
def add_dropdownlist(self, layout, label, values, row=None, column=None, rowspan=None, columnspan=None): """ Adds a drop down list to the given layout. :param layout: QLayout to add widget to. :param label: String containing the list title. :param values: List containing dropdown items. Optional :param row: int. If layout is a QGridLayout then the row must be given. :param column: int. If the layout is a QGridLayout then the column must be given. :param rowspan: int. For how many rows widget will span in QGridLayout. :param columnspan: int. For how many columns widget will span in QGridLayout. :return: """ size_policy = QSizePolicy() size_policy.setHorizontalPolicy(QSizePolicy.Expanding) size_policy.setVerticalPolicy(QSizePolicy.Preferred) lbl = QLabel(label) lbl.setFont(self.label_font) lbl.setSizePolicy(size_policy) drop_menu = QComboBox() drop_menu.addItems(values) drop_menu.setFont(self.edit_font) drop_menu.setSizePolicy(size_policy) if type(layout) is QGridLayout: if rowspan is not None and columnspan is not None: layout.addWidget(lbl, row, column, rowspan, columnspan) layout.addWidget(drop_menu, row + rowspan + 1, column, rowspan, columnspan) else: layout.addWidget(lbl, row, column) layout.addWidget(drop_menu, row + 1, column) else: layout.addWidget(lbl) layout.addWidget(drop_menu)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) sp = QSizePolicy() sp.setHorizontalPolicy(QSizePolicy.Expanding) sp.setVerticalPolicy(QSizePolicy.Expanding) sp.setVerticalStretch(1) wb_city_data = load_workbook(filename=r'DSTU-H_B_V.1.1-27_2010.xlsx', read_only=True, data_only=True) self.__ws_city_I_ser_m_sj = wb_city_data['Лист1'] self.__ws_city_t_z = wb_city_data['Т2. Температура зовн. пов.'] self.__cityChoice = QComboBox() self.__cityChoice.addItems(c[0].value for c in self.__ws_city_I_ser_m_sj['A6':'A605'] if c[0].value) self.__q_0Edit = KwNumberEdit(.5) self.__V_budEdit = KwNumberEdit(480) self.__NEdit = QSpinBox() self.__NEdit.setRange(1, 999) self.__NEdit.setSuffix(' чол') self.__NEdit.setValue(6) self.__t_gvEdit = QSpinBox() self.__t_gvEdit.setRange(25, 70) self.__t_gvEdit.setSingleStep(5) self.__t_gvEdit.setSuffix(' \N{DEGREE CELSIUS}') self.__t_gvEdit.setValue(45) self.__a_gvEdit = QSpinBox() self.__a_gvEdit.setRange(15, 99) self.__a_gvEdit.setSuffix(' л/добу') self.__a_gvEdit.setValue(35) self.__f_zEdit = KwNumberEdit(.8) self.__varthetaEdit = KwNumberEdit(1.7) self.__S_0Edit = KwNumberEdit(1.723) self.__F_rEdit = KwNumberEdit(1) self.__eta_0Edit = KwNumberEdit(0.813) self.__ULEdit = KwNumberEdit(4.6) self.__aEdit = KwNumberEdit(.007) self.__bEdit = KwNumberEdit(1.27E-5) self.__c_paEdit = KwNumberEdit(3.16) self.__P_tpEdit = KwNumberEdit(14.1) self.__epsilon_tpEdit = KwNumberEdit(5.5) self.__epsilon_elEdit = KwNumberEdit(.88) self.__P_elEdit = KwNumberEdit(2.6) self.__t_co_1Edit = QSpinBox() self.__t_co_1Edit.setRange(25, 70) self.__t_co_1Edit.setSingleStep(5) self.__t_co_1Edit.setSuffix(' \N{DEGREE CELSIUS}') self.__t_co_1Edit.setValue(35) self.__t_co_2Edit = QSpinBox() self.__t_co_2Edit.setRange(20, 60) self.__t_co_2Edit.setSingleStep(5) self.__t_co_2Edit.setSuffix(' \N{DEGREE CELSIUS}') self.__t_co_2Edit.setValue(30) self.__eta_KEdit = KwNumberEdit(.93) self.__Q_n_rEdit = KwNumberEdit(35600) self.__c_gazEdit = KwNumberEdit(.55) self.__c_elEdit = KwNumberEdit(.25) self.__q_gruEdit = KwNumberEdit(21) self.__d_gruEdit = QSpinBox() self.__d_gruEdit.setRange(5, 99) self.__d_gruEdit.setSuffix(' мм') self.__d_gruEdit.setValue(25) self.__l_0_gruEdit = KwNumberEdit(1.7) calcButton = QPushButton('Визначити') calcButton.setObjectName('calcButton') self.__outputConsoleBrowser = KwConsoleBrowser(setup={'font': {'name': QFont('Hack').family(), 'size': 8}, 'color': 'rgb(255, 255, 255)', 'background_color': 'rgba(0, 0, 0, 218)', 'line_wrap': False}) self.__outputConsoleBrowser.setSizePolicy(sp) graphWidget = QMainWindow() graphWidget.setMinimumWidth(380) self.__graphCanvas = self.__createFigureCanvas() self.__graphNavigationToolbar = NavigationToolbar(self.__graphCanvas, self) graphWidget.addToolBar(Qt.TopToolBarArea, self.__graphNavigationToolbar) graphWidget.setCentralWidget(self.__graphCanvas) cityLayout = QFormLayout() cityLayout.addRow('Місто:', self.__cityChoice) soGroup = QGroupBox('Для системи опалення (СО):') soInputLayout = QFormLayout(soGroup) soInputLayout.addRow('Питома потужність тепловтрат, q<sub>0</sub>, ' 'Вт/(м<sup>3</sup>\N{MIDDLE DOT}\N{DEGREE CELSIUS}):', self.__q_0Edit) soInputLayout.addRow("Об'єм будинку по зовнішніх обмірах, V<sub>буд</sub>, " "м<sup>3</sup>:", self.__V_budEdit) sgvGroup = QGroupBox(u'Для системи гарячого водопостачання (СГК):') sgvInputLayout = QFormLayout(sgvGroup) sgvInputLayout.addRow('Кількість мешканців у будинку, N:', self.__NEdit) sgvInputLayout.addRow('Температура гарячої води, t<sub>гв</sub>:', self.__t_gvEdit) sgvInputLayout.addRow('Добова витрата гарячої води на 1 особу, a<sub>гв</sub>:', self.__a_gvEdit) sgkGroup = QGroupBox('Для системи геліоколекторів (СГК):') sgkInputLayout = QFormLayout(sgkGroup) sgkInputLayout.addRow('Ступінь заміщення тепловтрат СГВ, f<sub>з</sub>:', self.__f_zEdit) sgkInputLayout.addRow('Параметр, \u03D1:', self.__varthetaEdit) sgkInputLayout.addRow('Площа 1-го геліоколектора, S<sub>0</sub>, м<sup>2</sup>:', self.__S_0Edit) sgkInputLayout.addRow('F<sub>r</sub>:', self.__F_rEdit) sgkInputLayout.addRow('Оптичний ККД, \N{GREEK SMALL LETTER ETA}:', self.__eta_0Edit) sgkInputLayout.addRow('Коефіцієнт тепловтрат, UL, Вт/(м<sup>2</sup>)' '\N{MIDDLE DOT}\N{DEGREE CELSIUS}):', self.__ULEdit) sgkInputLayout.addRow('a:', self.__aEdit) sgkInputLayout.addRow('b:', self.__bEdit) sgkInputLayout.addRow('c<sub>pa</sub>, кДж/(кг\N{MIDDLE DOT}\N{DEGREE CELSIUS}):', self.__c_paEdit) tpGroup = QGroupBox('Для теплової помпи (ТП):') tpInputLayout = QFormLayout(tpGroup) tpInputLayout.addRow('Теплова потужність, P<sub>тп</sub>, кВт:', self.__P_tpEdit) tpInputLayout.addRow('Тепловий к.к.д, \N{GREEK SMALL LETTER EPSILON}' '<sub>тп</sub>', self.__epsilon_tpEdit) tpInputLayout.addRow('Електричний к.к.д., \N{GREEK SMALL LETTER EPSILON}' '<sub>ел</sub>:', self.__epsilon_elEdit) tpInputLayout.addRow('Електрична потужність, P<sub>ел</sub>, кВт:', self.__P_elEdit) tpInputLayout.addRow('Т-ра нагрітої води для СО підлоги, t<sub>co 1</sub>:', self.__t_co_1Edit) tpInputLayout.addRow('Т-ра охолодженої води для СО підлоги, t<sub>co 2</sub>:', self.__t_co_2Edit) tpInputLayout.addRow('К.к.д. згоряння палива, eta_K:', self.__eta_KEdit) tpInputLayout.addRow('Нижча теплота згоряння палива, Q<sub>n r</sub>, кДж/м<sup>3</sup>:', self.__Q_n_rEdit) tpInputLayout.addRow('Вартість 1 м<sup>3</sup> газу, c<sub>газ</sub>, грн/м<sup>3</sup>:', self.__c_gazEdit) tpInputLayout.addRow('Вартість 1 кВт\N{MIDDLE DOT}год, c<sub>ел</sub>, ' 'грн/м<sup>3</sup>:', self.__c_elEdit) gruGroup = QGroupBox('Для ґрунту і контуру СО підлоги:') gruInputEdit = QFormLayout(gruGroup) gruInputEdit.addRow('Питома тепловіддача ґрунту, q<sub>ґр</sub>, ' 'Вт/м<sup>2</sup>:', self.__q_gruEdit) gruInputEdit.addRow('Внутрішній діаметр, d, мм:', self.__d_gruEdit) gruInputEdit.addRow('Питома довжина тепловідбору, l<sub>0</sub>, ' 'м/м<sup>2</sup>:', self.__l_0_gruEdit) inputScrollArea = QScrollArea() inputScrollArea.setWidgetResizable(True) inputScrollArea.setSizePolicy(sp) inputDataPanel = QWidget() inputDataLayout = QVBoxLayout(inputDataPanel) inputDataLayout.addLayout(cityLayout) inputDataLayout.addWidget(soGroup) inputDataLayout.addWidget(sgvGroup) inputDataLayout.addWidget(sgkGroup) inputDataLayout.addWidget(tpGroup) inputDataLayout.addWidget(gruGroup) inputScrollArea.setWidget(inputDataPanel) inputWidget = QWidget() inputLayout = QFormLayout(inputWidget) #inputLayout.setContentsMargins(0, 0, 0, 0) inputLayout.setRowWrapPolicy(QFormLayout.WrapAllRows) inputLayout.addRow('Вхідні дані:', inputScrollArea) inputLayout.addWidget(calcButton) consoleViewWidget = QWidget() consoleViewLayout = QFormLayout(consoleViewWidget) consoleViewLayout.setRowWrapPolicy(QFormLayout.WrapAllRows) consoleViewLayout.addRow(u'Результати:', self.__outputConsoleBrowser) contentSplitter = QSplitter(Qt.Horizontal) contentSplitter.setStretchFactor(0, 1) contentSplitter.setStretchFactor(1, 0) contentSplitter.setSizes([350, 380]) contentSplitter.setChildrenCollapsible(False) ioSplitter = QSplitter(Qt.Vertical) ioSplitter.setStretchFactor(0, 1) ioSplitter.setStretchFactor(1, 0) ioSplitter.setSizes([200, 320]) ioSplitter.setChildrenCollapsible(False) ioSplitter.setMinimumWidth(380) ioSplitter.addWidget(inputWidget) ioSplitter.addWidget(consoleViewWidget) contentSplitter.addWidget(ioSplitter) contentSplitter.addWidget(graphWidget) self.setCentralWidget(contentSplitter) self.resize(1200, 640) # <<< for inputValueWidget in inputWidget.findChildren((QAbstractSpinBox, KwNumberEdit)): inputValueWidget.valueChanged.connect(self._reset_output_data) for inputValueWidget in inputWidget.findChildren(QComboBox): inputValueWidget.activated.connect(self._reset_output_data) calcButton.clicked.connect(self.calc_script)
def __init__(self, *args): super().__init__(BrickletIndustrialDualAnalogInV2, *args) self.analog_in = self.device self.cbe_voltage0 = CallbackEmulator( self.analog_in.get_voltage, 0, self.cb_voltage, self.increase_error_count, pass_arguments_to_result_callback=True) self.cbe_voltage1 = CallbackEmulator( self.analog_in.get_voltage, 1, self.cb_voltage, self.increase_error_count, pass_arguments_to_result_callback=True) self.calibration = None self.sample_rate_label = QLabel('Sample Rate:') self.sample_rate_combo = QComboBox() self.sample_rate_combo.addItem('976 Hz') self.sample_rate_combo.addItem('488 Hz') self.sample_rate_combo.addItem('244 Hz') self.sample_rate_combo.addItem('122 Hz') self.sample_rate_combo.addItem('61 Hz') self.sample_rate_combo.addItem('4 Hz') self.sample_rate_combo.addItem('2 Hz') self.sample_rate_combo.addItem('1 Hz') self.current_voltage = [CurveValueWrapper(), CurveValueWrapper()] # float, V self.calibration_button = QPushButton('Calibration...') self.sample_rate_combo.currentIndexChanged.connect( self.sample_rate_combo_index_changed) self.calibration_button.clicked.connect( self.calibration_button_clicked) plots = [ ('Channel 0', Qt.red, self.current_voltage[0], format_voltage), ('Channel 1', Qt.blue, self.current_voltage[1], format_voltage) ] self.plot_widget = PlotWidget('Voltage [V]', plots, y_resolution=0.001) # Define lines line = QFrame() line.setObjectName("line") line.setFrameShape(QFrame.HLine) line.setFrameShadow(QFrame.Sunken) line1 = QFrame() line1.setObjectName("line1") line1.setFrameShape(QFrame.HLine) line1.setFrameShadow(QFrame.Sunken) line2 = QFrame() line2.setObjectName("line2") line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) # Define channel LED status config widgets self.led_config_ch0_label = QLabel('Channel 0') self.led_config_ch1_label = QLabel('Channel 1') self.led_config_label = QLabel('LED Config:') self.led_status_config_label = QLabel('LED Status Config:') self.led_status_config_ch0_min_label = QLabel('Min:') self.led_status_config_ch0_max_label = QLabel('Max:') self.led_status_config_ch1_min_label = QLabel('Min:') self.led_status_config_ch1_max_label = QLabel('Max:') self.led_config_ch0_combo = QComboBox() self.led_config_ch0_combo.addItem('Off') self.led_config_ch0_combo.addItem('On') self.led_config_ch0_combo.addItem('Show Heartbeat') self.led_config_ch0_combo.addItem('Show Channel Status') self.led_config_ch0_combo.currentIndexChanged.connect( self.led_config_ch0_combo_changed) self.led_config_ch1_combo = QComboBox() self.led_config_ch1_combo.addItem('Off') self.led_config_ch1_combo.addItem('On') self.led_config_ch1_combo.addItem('Show Heartbeat') self.led_config_ch1_combo.addItem('Show Channel Status') self.led_config_ch1_combo.currentIndexChanged.connect( self.led_config_ch1_combo_changed) self.led_status_config_ch0_combo = QComboBox() self.led_status_config_ch0_combo.addItem('Threshold') self.led_status_config_ch0_combo.addItem('Intensity') self.led_status_config_ch0_combo.currentIndexChanged.connect( self.led_status_config_ch0_combo_changed) self.led_status_config_ch1_combo = QComboBox() self.led_status_config_ch1_combo.addItem('Threshold') self.led_status_config_ch1_combo.addItem('Intensity') self.led_status_config_ch1_combo.currentIndexChanged.connect( self.led_status_config_ch1_combo_changed) self.led_status_config_ch0_min_sbox = QSpinBox() self.led_status_config_ch0_min_sbox.setMinimum(-35000) self.led_status_config_ch0_min_sbox.setMaximum(35000) self.led_status_config_ch0_min_sbox.setValue(0) self.led_status_config_ch0_min_sbox.setSingleStep(1) self.led_status_config_ch0_min_sbox.setSuffix(' mV') self.led_status_config_ch0_min_sbox.valueChanged.connect( self.led_status_config_ch0_min_sbox_changed) self.led_status_config_ch0_max_sbox = QSpinBox() self.led_status_config_ch0_max_sbox.setMinimum(-35000) self.led_status_config_ch0_max_sbox.setMaximum(35000) self.led_status_config_ch0_max_sbox.setValue(0) self.led_status_config_ch0_max_sbox.setSingleStep(1) self.led_status_config_ch0_max_sbox.setSuffix(' mV') self.led_status_config_ch0_max_sbox.valueChanged.connect( self.led_status_config_ch0_max_sbox_changed) self.led_status_config_ch1_min_sbox = QSpinBox() self.led_status_config_ch1_min_sbox.setMinimum(-35000) self.led_status_config_ch1_min_sbox.setMaximum(35000) self.led_status_config_ch1_min_sbox.setValue(0) self.led_status_config_ch1_min_sbox.setSingleStep(1) self.led_status_config_ch1_min_sbox.setSuffix(' mV') self.led_status_config_ch1_min_sbox.valueChanged.connect( self.led_status_config_ch1_min_sbox_changed) self.led_status_config_ch1_max_sbox = QSpinBox() self.led_status_config_ch1_max_sbox.setMinimum(-35000) self.led_status_config_ch1_max_sbox.setMaximum(35000) self.led_status_config_ch1_max_sbox.setValue(0) self.led_status_config_ch1_max_sbox.setSingleStep(1) self.led_status_config_ch1_max_sbox.setSuffix(' mV') self.led_status_config_ch1_max_sbox.valueChanged.connect( self.led_status_config_ch1_max_sbox_changed) # Define size policies h_sp = QSizePolicy() h_sp.setHorizontalPolicy(QSizePolicy.Expanding) # Set size policies self.sample_rate_combo.setSizePolicy(h_sp) self.led_config_ch0_combo.setSizePolicy(h_sp) self.led_config_ch1_combo.setSizePolicy(h_sp) self.led_status_config_ch0_combo.setSizePolicy(h_sp) self.led_status_config_ch1_combo.setSizePolicy(h_sp) self.led_status_config_ch0_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch0_max_sbox.setSizePolicy(h_sp) self.led_status_config_ch1_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch1_max_sbox.setSizePolicy(h_sp) # Define layouts hlayout = QHBoxLayout() vlayout = QVBoxLayout() glayout = QGridLayout() layout = QVBoxLayout(self) hlayout_ch0_min_max = QHBoxLayout() hlayout_ch1_min_max = QHBoxLayout() # Populate layouts vlayout.addWidget(self.calibration_button) hlayout.addWidget(self.sample_rate_label) hlayout.addWidget(self.sample_rate_combo) vlayout.addLayout(hlayout) vlayout.addWidget(line1) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_min_label) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_min_sbox) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_max_label) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_max_sbox) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_min_label) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_min_sbox) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_max_label) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_max_sbox) glayout.addWidget(self.led_config_ch0_label, 0, 1, 1, 1) # R, C, RS, CS glayout.addWidget(self.led_config_ch1_label, 0, 2, 1, 1) glayout.addWidget(line2, 1, 0, 1, 3) glayout.addWidget(self.led_config_label, 2, 0, 1, 1) glayout.addWidget(self.led_config_ch0_combo, 2, 1, 1, 1) glayout.addWidget(self.led_config_ch1_combo, 2, 2, 1, 1) glayout.addWidget(self.led_status_config_label, 3, 0, 1, 1) glayout.addWidget(self.led_status_config_ch0_combo, 3, 1, 1, 1) glayout.addWidget(self.led_status_config_ch1_combo, 3, 2, 1, 1) glayout.addLayout(hlayout_ch0_min_max, 4, 1, 1, 1) glayout.addLayout(hlayout_ch1_min_max, 4, 2, 1, 1) layout.addWidget(self.plot_widget) layout.addWidget(line) layout.addLayout(vlayout) layout.addLayout(glayout) self.ui_group_ch_status_ch0 = [ self.led_status_config_ch0_combo, self.led_status_config_ch0_min_sbox, self.led_status_config_ch0_max_sbox ] self.ui_group_ch_status_ch1 = [ self.led_status_config_ch1_combo, self.led_status_config_ch1_min_sbox, self.led_status_config_ch1_max_sbox ]
def initUI(self): self.setGeometry(300, 100, 1000, 750) self.lumen = () self.plaque = () layout = QHBoxLayout() vbox1 = QVBoxLayout() vbox2 = QVBoxLayout() vbox1.setContentsMargins(0, 0, 100, 100) vbox2.setContentsMargins(100, 0, 0, 100) vbox2hbox1 = QHBoxLayout() vbox2.addLayout(vbox2hbox1) layout.addLayout(vbox1) layout.addLayout(vbox2) dicomButton = QPushButton('Read DICOM') contoursButton = QPushButton('Read Contours') gatingButton = QPushButton('Extract Diastolic Frames') segmentButton = QPushButton('Segment') writeButton = QPushButton('Write Report') self.infoTable = QTableWidget() self.infoTable.setRowCount(8) self.infoTable.setColumnCount(2) self.infoTable.setItem(0, 0, QTableWidgetItem('Patient Name')) self.infoTable.setItem(1, 0, QTableWidgetItem('Patient DOB')) self.infoTable.setItem(2, 0, QTableWidgetItem('Patient Sex')) self.infoTable.setItem(3, 0, QTableWidgetItem('Pullback Speed')) self.infoTable.setItem(4, 0, QTableWidgetItem('Resolution')) self.infoTable.setItem(5, 0, QTableWidgetItem('Dimensions')) self.infoTable.setItem(6, 0, QTableWidgetItem('Manufacturer')) self.infoTable.setItem(7, 0, QTableWidgetItem('Model')) dicomButton.clicked.connect(self.readDICOM) contoursButton.clicked.connect(self.readContours) segmentButton.clicked.connect(self.segment) gatingButton.clicked.connect(self.gate) """ self.lumen, self.plaque, self.stent, self.resolution, frames = read_xml.read('/home/ubuntu/Documents/Qt/1-63/1-63.xml') self.lumen = self.mapToList(self.lumen) self.plaque = self.mapToList(self.plaque) self.stent = self.mapToList(self.stent) dicom = dcm.read_file('/home/ubuntu/Documents/Qt/1-63/2.16.840.1.114380.1.1.347327.186.1.1.20100506085134890.3.dcm') self.images = dicom.pixel_array """ self.slider = QSlider(Qt.Horizontal) #self.slider.setRange(0, self.images.shape[0]) self.slider.setRange(0, 100) self.slider.setValue(0) self.slider.setFocusPolicy(Qt.StrongFocus) sizePolicy = QSizePolicy() sizePolicy.setHorizontalPolicy(QSizePolicy.Fixed) sizePolicy.setVerticalPolicy(QSizePolicy.Fixed) self.slider.setSizePolicy(sizePolicy) self.slider.setMinimumSize(QSize(500, 25)) self.slider.setMaximumSize(QSize(500, 25)) self.slider.valueChanged[int].connect(self.changeValue) #self.slider.keyPressEvent = self.keyPressEvent() self.hideBox = QCheckBox('Hide Contours') self.hideBox.setChecked(True) self.hideBox.stateChanged[int].connect(self.changeState) self.useGatedBox = QCheckBox('Display Gated Frames') self.useGatedBox.stateChanged[int].connect(self.useGated) self.wid = Display() #self.wid.setData(self.lumen, self.plaque, self.images) self.c = Communicate() self.c.updateBW[int].connect(self.wid.setFrame) self.c.updateBool[bool].connect(self.wid.setDisplay) self.text = QLabel() self.text.setAlignment(Qt.AlignCenter) self.text.setText("Frame {}".format(self.slider.value())) vbox1.addWidget(self.wid) vbox1.addWidget(self.slider) vbox1.addWidget(self.text) vbox2.addWidget(self.hideBox) vbox2.addWidget(self.useGatedBox) vbox2.addWidget(dicomButton) vbox2.addWidget(contoursButton) vbox2.addWidget(gatingButton) vbox2.addWidget(segmentButton) vbox2.addWidget(writeButton) vbox2hbox1.addWidget(self.infoTable) centralWidget = QWidget() centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) self.show()
def createFormMatchDataBox(self): """Create the froms for the match data.""" try: self.max_no_sets = hwctool.settings.max_no_sets self.scoreWidth = 35 self.raceWidth = 100 self.labelWidth = 25 self.mimumLineEditWidth = 130 self.fromMatchDataBox = QGroupBox(_("Match Data")) layout2 = QVBoxLayout() self.le_league = MonitoredLineEdit() self.le_league.setText("League TBD") self.le_league.setAlignment(Qt.AlignCenter) self.le_league.setPlaceholderText("League TBD") self.le_league.textModified.connect(self.league_changed) policy = QSizePolicy() policy.setHorizontalStretch(3) policy.setHorizontalPolicy(QSizePolicy.Expanding) policy.setVerticalStretch(1) policy.setVerticalPolicy(QSizePolicy.Fixed) self.le_league.setSizePolicy(policy) self.le_player = [[ MonitoredLineEdit() for x in range(self.max_no_sets) ] for y in range(2)] self.cb_race = [[QComboBox() for x in range(self.max_no_sets)] for y in range(2)] self.sl_score = [ QSlider(Qt.Horizontal) for y in range(self.max_no_sets) ] self.label_set = [ QLabel('#{}'.format(y + 1), self) for y in range(self.max_no_sets) ] self.setContainer = [ QHBoxLayout() for y in range(self.max_no_sets) ] container = QGridLayout() button = QPushButton() pixmap = QIcon(hwctool.settings.getResFile('update.png')) button.setIcon(pixmap) button.clicked.connect(lambda: self.controller.swapTeams()) button.setFixedWidth(self.labelWidth) button.setToolTip(_("Swap players.")) container.addWidget(button, 0, 0, 1, 1) label = QLabel(_("League:")) label.setAlignment(Qt.AlignCenter) label.setFixedWidth(self.raceWidth) container.addWidget(label, 0, 1, 1, 1) container.addWidget(self.le_league, 0, 2, 1, 3) label = QLabel("") label.setFixedWidth(self.raceWidth) container.addWidget(label, 0, 5, 1, 1) layout2.addLayout(container) for player_idx in range(self.max_no_sets): for team_idx in range(2): self.cb_race[team_idx][player_idx].\ currentIndexChanged.connect( lambda idx, t=team_idx, p=player_idx: self.race_changed(t, p)) self.le_player[team_idx][player_idx].textModified.connect( lambda t=team_idx, p=player_idx: self.player_changed( t, p)) self.le_player[team_idx][player_idx].setText("TBD") self.le_player[team_idx][player_idx].setAlignment( Qt.AlignCenter) self.le_player[team_idx][player_idx].setPlaceholderText( _("Player {} of team {}").format( player_idx + 1, team_idx + 1)) self.le_player[team_idx][player_idx].setMinimumWidth( self.mimumLineEditWidth) for race in hwctool.settings.races: self.cb_race[team_idx][player_idx].addItem(race) self.cb_race[team_idx][player_idx].setFixedWidth( self.raceWidth) self.sl_score[player_idx].setMinimum(-1) self.sl_score[player_idx].setMaximum(1) self.sl_score[player_idx].setValue(0) self.sl_score[player_idx].setTickPosition( QSlider.TicksBothSides) self.sl_score[player_idx].setTickInterval(1) self.sl_score[player_idx].setTracking(False) self.sl_score[player_idx].valueChanged.connect( lambda x, player_idx=player_idx: self.sl_changed( player_idx, x)) self.sl_score[player_idx].setToolTip(_('Set the score')) self.sl_score[player_idx].setFixedWidth(self.scoreWidth) self.setContainer[player_idx] = QHBoxLayout() # self.label_set[player_idx].setText("#" + str(player_idx + 1)) self.label_set[player_idx].setAlignment(Qt.AlignCenter) self.label_set[player_idx].setFixedWidth(self.labelWidth) self.setContainer[player_idx].addWidget( self.label_set[player_idx], 0) self.setContainer[player_idx].addWidget( self.cb_race[0][player_idx], 0) self.setContainer[player_idx].addWidget( self.le_player[0][player_idx], 4) self.setContainer[player_idx].addWidget( self.sl_score[player_idx], 0) self.setContainer[player_idx].addWidget( self.le_player[1][player_idx], 4) self.setContainer[player_idx].addWidget( self.cb_race[1][player_idx], 0) layout2.addLayout(self.setContainer[player_idx]) layout2.addItem( QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.fromMatchDataBox.setLayout(layout2) self.updatePlayerCompleters() except Exception as e: module_logger.exception("message")
def __init__(self, *args): super().__init__(BrickletIndustrialDualAnalogInV2, *args) self.analog_in = self.device self.cbe_voltage0 = CallbackEmulator(self.analog_in.get_voltage, 0, self.cb_voltage, self.increase_error_count, pass_arguments_to_result_callback=True) self.cbe_voltage1 = CallbackEmulator(self.analog_in.get_voltage, 1, self.cb_voltage, self.increase_error_count, pass_arguments_to_result_callback=True) self.calibration = None self.sample_rate_label = QLabel('Sample Rate:') self.sample_rate_combo = QComboBox() self.sample_rate_combo.addItem('976 Hz') self.sample_rate_combo.addItem('488 Hz') self.sample_rate_combo.addItem('244 Hz') self.sample_rate_combo.addItem('122 Hz') self.sample_rate_combo.addItem('61 Hz') self.sample_rate_combo.addItem('4 Hz') self.sample_rate_combo.addItem('2 Hz') self.sample_rate_combo.addItem('1 Hz') self.current_voltage = [CurveValueWrapper(), CurveValueWrapper()] # float, V self.calibration_button = QPushButton('Calibration...') self.sample_rate_combo.currentIndexChanged.connect(self.sample_rate_combo_index_changed) self.calibration_button.clicked.connect(self.calibration_button_clicked) plots = [('Channel 0', Qt.red, self.current_voltage[0], format_voltage), ('Channel 1', Qt.blue, self.current_voltage[1], format_voltage)] self.plot_widget = PlotWidget('Voltage [V]', plots, y_resolution=0.001) # Define lines line = QFrame() line.setObjectName("line") line.setFrameShape(QFrame.HLine) line.setFrameShadow(QFrame.Sunken) line1 = QFrame() line1.setObjectName("line1") line1.setFrameShape(QFrame.HLine) line1.setFrameShadow(QFrame.Sunken) line2 = QFrame() line2.setObjectName("line2") line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) # Define channel LED status config widgets self.led_config_ch0_label = QLabel('Channel 0') self.led_config_ch1_label = QLabel('Channel 1') self.led_config_label = QLabel('LED Config:') self.led_status_config_label = QLabel('LED Status Config:') self.led_status_config_ch0_min_label = QLabel('Min:') self.led_status_config_ch0_max_label = QLabel('Max:') self.led_status_config_ch1_min_label = QLabel('Min:') self.led_status_config_ch1_max_label = QLabel('Max:') self.led_config_ch0_combo = QComboBox() self.led_config_ch0_combo.addItem('Off') self.led_config_ch0_combo.addItem('On') self.led_config_ch0_combo.addItem('Show Heartbeat') self.led_config_ch0_combo.addItem('Show Channel Status') self.led_config_ch0_combo.currentIndexChanged.connect(self.led_config_ch0_combo_changed) self.led_config_ch1_combo = QComboBox() self.led_config_ch1_combo.addItem('Off') self.led_config_ch1_combo.addItem('On') self.led_config_ch1_combo.addItem('Show Heartbeat') self.led_config_ch1_combo.addItem('Show Channel Status') self.led_config_ch1_combo.currentIndexChanged.connect(self.led_config_ch1_combo_changed) self.led_status_config_ch0_combo = QComboBox() self.led_status_config_ch0_combo.addItem('Threshold') self.led_status_config_ch0_combo.addItem('Intensity') self.led_status_config_ch0_combo.currentIndexChanged.connect(self.led_status_config_ch0_combo_changed) self.led_status_config_ch1_combo = QComboBox() self.led_status_config_ch1_combo.addItem('Threshold') self.led_status_config_ch1_combo.addItem('Intensity') self.led_status_config_ch1_combo.currentIndexChanged.connect(self.led_status_config_ch1_combo_changed) self.led_status_config_ch0_min_sbox = QSpinBox() self.led_status_config_ch0_min_sbox.setMinimum(-35000) self.led_status_config_ch0_min_sbox.setMaximum(35000) self.led_status_config_ch0_min_sbox.setValue(0) self.led_status_config_ch0_min_sbox.setSingleStep(1) self.led_status_config_ch0_min_sbox.setSuffix(' mV') self.led_status_config_ch0_min_sbox.valueChanged.connect(self.led_status_config_ch0_min_sbox_changed) self.led_status_config_ch0_max_sbox = QSpinBox() self.led_status_config_ch0_max_sbox.setMinimum(-35000) self.led_status_config_ch0_max_sbox.setMaximum(35000) self.led_status_config_ch0_max_sbox.setValue(0) self.led_status_config_ch0_max_sbox.setSingleStep(1) self.led_status_config_ch0_max_sbox.setSuffix(' mV') self.led_status_config_ch0_max_sbox.valueChanged.connect(self.led_status_config_ch0_max_sbox_changed) self.led_status_config_ch1_min_sbox = QSpinBox() self.led_status_config_ch1_min_sbox.setMinimum(-35000) self.led_status_config_ch1_min_sbox.setMaximum(35000) self.led_status_config_ch1_min_sbox.setValue(0) self.led_status_config_ch1_min_sbox.setSingleStep(1) self.led_status_config_ch1_min_sbox.setSuffix(' mV') self.led_status_config_ch1_min_sbox.valueChanged.connect(self.led_status_config_ch1_min_sbox_changed) self.led_status_config_ch1_max_sbox = QSpinBox() self.led_status_config_ch1_max_sbox.setMinimum(-35000) self.led_status_config_ch1_max_sbox.setMaximum(35000) self.led_status_config_ch1_max_sbox.setValue(0) self.led_status_config_ch1_max_sbox.setSingleStep(1) self.led_status_config_ch1_max_sbox.setSuffix(' mV') self.led_status_config_ch1_max_sbox.valueChanged.connect(self.led_status_config_ch1_max_sbox_changed) # Define size policies h_sp = QSizePolicy() h_sp.setHorizontalPolicy(QSizePolicy.Expanding) # Set size policies self.sample_rate_combo.setSizePolicy(h_sp) self.led_config_ch0_combo.setSizePolicy(h_sp) self.led_config_ch1_combo.setSizePolicy(h_sp) self.led_status_config_ch0_combo.setSizePolicy(h_sp) self.led_status_config_ch1_combo.setSizePolicy(h_sp) self.led_status_config_ch0_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch0_max_sbox.setSizePolicy(h_sp) self.led_status_config_ch1_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch1_max_sbox.setSizePolicy(h_sp) # Define layouts hlayout = QHBoxLayout() vlayout = QVBoxLayout() glayout = QGridLayout() layout = QVBoxLayout(self) hlayout_ch0_min_max = QHBoxLayout() hlayout_ch1_min_max = QHBoxLayout() # Populate layouts vlayout.addWidget(self.calibration_button) hlayout.addWidget(self.sample_rate_label) hlayout.addWidget(self.sample_rate_combo) vlayout.addLayout(hlayout) vlayout.addWidget(line1) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_min_label) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_min_sbox) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_max_label) hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_max_sbox) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_min_label) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_min_sbox) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_max_label) hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_max_sbox) glayout.addWidget(self.led_config_ch0_label, 0, 1, 1, 1) # R, C, RS, CS glayout.addWidget(self.led_config_ch1_label, 0, 2, 1, 1) glayout.addWidget(line2, 1, 0, 1, 3) glayout.addWidget(self.led_config_label, 2, 0, 1, 1) glayout.addWidget(self.led_config_ch0_combo, 2, 1, 1, 1) glayout.addWidget(self.led_config_ch1_combo, 2, 2, 1, 1) glayout.addWidget(self.led_status_config_label, 3, 0, 1, 1) glayout.addWidget(self.led_status_config_ch0_combo, 3, 1, 1, 1) glayout.addWidget(self.led_status_config_ch1_combo, 3, 2, 1, 1) glayout.addLayout(hlayout_ch0_min_max, 4, 1, 1, 1) glayout.addLayout(hlayout_ch1_min_max, 4, 2, 1, 1) layout.addWidget(self.plot_widget) layout.addWidget(line) layout.addLayout(vlayout) layout.addLayout(glayout) self.ui_group_ch_status_ch0 = [self.led_status_config_ch0_combo, self.led_status_config_ch0_min_sbox, self.led_status_config_ch0_max_sbox] self.ui_group_ch_status_ch1 = [self.led_status_config_ch1_combo, self.led_status_config_ch1_min_sbox, self.led_status_config_ch1_max_sbox]
def __init__(self, *args): super().__init__(BrickletIndustrialDual020mAV2, *args) self.dual020 = self.device self.str_connected = 'Channel {0} is <font color="green">connected</font>' self.str_not_connected = 'Channel {0} is <font color="red">not connected</font>' self.cbe_current0 = CallbackEmulator(self.dual020.get_current, 0, self.cb_current, self.increase_error_count, pass_arguments_to_result_callback=True) self.cbe_current1 = CallbackEmulator(self.dual020.get_current, 1, self.cb_current, self.increase_error_count, pass_arguments_to_result_callback=True) self.connected_labels = [FixedSizeLabel(self.str_not_connected.format(0)), FixedSizeLabel(self.str_not_connected.format(1))] self.current_current = [CurveValueWrapper(), CurveValueWrapper()] # float, mA plots = [('Channel 0', Qt.red, self.current_current[0], lambda value: '{:.03f} mA'.format(round(value, 3))), ('Channel 1', Qt.blue, self.current_current[1], lambda value: '{:.03f} mA'.format(round(value, 3)))] self.plot_widget = PlotWidget('Current [mA]', plots, extra_key_widgets=self.connected_labels, y_resolution=0.001) h_sp = QSizePolicy() h_sp.setHorizontalPolicy(QSizePolicy.Expanding) self.sample_rate_label = QLabel('Sample Rate:') self.sample_rate_combo = QComboBox() self.sample_rate_combo.addItem('240 Hz') self.sample_rate_combo.addItem('60 Hz') self.sample_rate_combo.addItem('15 Hz') self.sample_rate_combo.addItem('4 Hz') self.sample_rate_combo.currentIndexChanged.connect(self.sample_rate_combo_index_changed) self.sample_rate_combo.setSizePolicy(h_sp) self.gain_label = QLabel('Gain:') self.gain_combo = QComboBox() self.gain_combo.addItem('x1') self.gain_combo.addItem('x2') self.gain_combo.addItem('x4') self.gain_combo.addItem('x8') self.gain_combo.currentIndexChanged.connect(self.gain_combo_index_changed) self.gain_combo.setSizePolicy(h_sp) self.led_config_ch0_label = QLabel('Channel 0') self.led_config_ch1_label = QLabel('Channel 1') self.led_config_label = QLabel('LED Config:') self.led_status_config_label = QLabel('LED Status Config:') self.led_status_config_ch0_min_label = QLabel('Min:') self.led_status_config_ch0_max_label = QLabel('Max:') self.led_status_config_ch1_min_label = QLabel('Min:') self.led_status_config_ch1_max_label = QLabel('Max:') self.led_config_ch0_combo = QComboBox() self.led_config_ch0_combo.addItem('Off') self.led_config_ch0_combo.addItem('On') self.led_config_ch0_combo.addItem('Show Heartbeat') self.led_config_ch0_combo.addItem('Show Channel Status') self.led_config_ch0_combo.setSizePolicy(h_sp) self.led_config_ch0_combo.currentIndexChanged.connect(self.led_config_ch0_combo_changed) self.led_config_ch1_combo = QComboBox() self.led_config_ch1_combo.addItem('Off') self.led_config_ch1_combo.addItem('On') self.led_config_ch1_combo.addItem('Show Heartbeat') self.led_config_ch1_combo.addItem('Show Channel Status') self.led_config_ch1_combo.setSizePolicy(h_sp) self.led_config_ch1_combo.currentIndexChanged.connect(self.led_config_ch1_combo_changed) self.led_status_config_ch0_combo = QComboBox() self.led_status_config_ch0_combo.addItem('Threshold') self.led_status_config_ch0_combo.addItem('Intensity') self.led_status_config_ch0_combo.setSizePolicy(h_sp) self.led_status_config_ch0_combo.currentIndexChanged.connect(self.led_status_config_ch0_combo_changed) self.led_status_config_ch1_combo = QComboBox() self.led_status_config_ch1_combo.addItem('Threshold') self.led_status_config_ch1_combo.addItem('Intensity') self.led_status_config_ch1_combo.setSizePolicy(h_sp) self.led_status_config_ch1_combo.currentIndexChanged.connect(self.led_status_config_ch1_combo_changed) self.led_status_config_ch0_min_sbox = QDoubleSpinBox() self.led_status_config_ch0_max_sbox = QDoubleSpinBox() self.led_status_config_ch1_min_sbox = QDoubleSpinBox() self.led_status_config_ch1_max_sbox = QDoubleSpinBox() self.led_status_config_ch0_min_sbox.setValue(0) self.led_status_config_ch0_min_sbox.setMinimum(0) self.led_status_config_ch0_min_sbox.setSingleStep(0.5) self.led_status_config_ch0_min_sbox.setDecimals(3) self.led_status_config_ch0_min_sbox.setSuffix(' mA') self.led_status_config_ch0_min_sbox.setMaximum(22.5) self.led_status_config_ch0_min_sbox.valueChanged.connect(self.led_status_config_ch0_min_sbox_changed) self.led_status_config_ch0_max_sbox.setValue(0) self.led_status_config_ch0_max_sbox.setMinimum(0) self.led_status_config_ch0_max_sbox.setSingleStep(0.5) self.led_status_config_ch0_max_sbox.setDecimals(3) self.led_status_config_ch0_max_sbox.setSuffix(' mA') self.led_status_config_ch0_max_sbox.setMaximum(22.5) self.led_status_config_ch0_max_sbox.valueChanged.connect(self.led_status_config_ch0_max_sbox_changed) self.led_status_config_ch1_min_sbox.setValue(0) self.led_status_config_ch1_min_sbox.setMinimum(0) self.led_status_config_ch1_min_sbox.setSingleStep(0.5) self.led_status_config_ch1_min_sbox.setDecimals(3) self.led_status_config_ch1_min_sbox.setSuffix(' mA') self.led_status_config_ch1_min_sbox.setMaximum(22.5) self.led_status_config_ch1_min_sbox.valueChanged.connect(self.led_status_config_ch1_min_sbox_changed) self.led_status_config_ch1_max_sbox.setValue(0) self.led_status_config_ch1_max_sbox.setMinimum(0) self.led_status_config_ch1_max_sbox.setSingleStep(0.5) self.led_status_config_ch1_max_sbox.setDecimals(3) self.led_status_config_ch1_max_sbox.setSuffix(' mA') self.led_status_config_ch1_max_sbox.setMaximum(22.5) self.led_status_config_ch1_max_sbox.valueChanged.connect(self.led_status_config_ch1_max_sbox_changed) hlayout = QHBoxLayout() self.led_status_config_ch0_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch0_max_sbox.setSizePolicy(h_sp) hlayout.addWidget(self.led_status_config_ch0_min_label) hlayout.addWidget(self.led_status_config_ch0_min_sbox) hlayout.addWidget(self.led_status_config_ch0_max_label) hlayout.addWidget(self.led_status_config_ch0_max_sbox) hlayout1 = QHBoxLayout() self.led_status_config_ch1_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch1_max_sbox.setSizePolicy(h_sp) hlayout1.addWidget(self.led_status_config_ch1_min_label) hlayout1.addWidget(self.led_status_config_ch1_min_sbox) hlayout1.addWidget(self.led_status_config_ch1_max_label) hlayout1.addWidget(self.led_status_config_ch1_max_sbox) line = QFrame() line.setObjectName("line") line.setFrameShape(QFrame.HLine) line.setFrameShadow(QFrame.Sunken) line1 = QFrame() line1.setObjectName("line1") line1.setFrameShape(QFrame.HLine) line1.setFrameShadow(QFrame.Sunken) line2 = QFrame() line2.setObjectName("line2") line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) glayout = QGridLayout() glayout.addWidget(line, 0, 0, 1, 3) # line-1 glayout.addWidget(self.sample_rate_label, 1, 0, 1, 1) glayout.addWidget(self.sample_rate_combo, 1, 1, 1, 2) glayout.addWidget(self.gain_label, 2, 0, 1, 1) glayout.addWidget(self.gain_combo, 2, 1, 1, 2) glayout.addWidget(line1, 3, 0, 1, 3) # line-2 glayout.addWidget(self.led_config_ch0_label, 4, 1, 1, 1) glayout.addWidget(self.led_config_ch1_label, 4, 2, 1, 1) glayout.addWidget(line2, 5, 0, 1, 3) # line-3 glayout.addWidget(self.led_config_label, 6, 0, 1, 1) glayout.addWidget(self.led_config_ch0_combo, 6, 1, 1, 1) glayout.addWidget(self.led_config_ch1_combo, 6, 2, 1, 1) glayout.addWidget(self.led_status_config_label, 7, 0, 1, 1) glayout.addWidget(self.led_status_config_ch0_combo, 7, 1, 1, 1) glayout.addWidget(self.led_status_config_ch1_combo, 7, 2, 1, 1) glayout.addLayout(hlayout, 8, 1, 1, 1) glayout.addLayout(hlayout1, 8, 2, 1, 1) layout = QVBoxLayout(self) layout.addWidget(self.plot_widget) layout.addLayout(glayout) self.ui_group_ch_status_ch0 = [self.led_status_config_ch0_combo, self.led_status_config_ch0_min_sbox, self.led_status_config_ch0_max_sbox] self.ui_group_ch_status_ch1 = [self.led_status_config_ch1_combo, self.led_status_config_ch1_min_sbox, self.led_status_config_ch1_max_sbox]
def add_buttonlist(self, layout, label, values, key=None, row=None, column = None, rowspan=None, columnspan=None): """ Add an array of buttons to a layout that can be used to display arrays of data, e.g. tags or categories. The ability to add and remove items from the array is also added. :param layout: QLayout. Layout to add widgets to. :param label: String. Name of the field, e.g. tags, or categories. :param values: list. List of either strings or dictionary objects. Optional :param key: Dictionary Key. If the values given are in a dictionary object a dictionary key must also be provided. :param row: int. QGridLayout row from which to add widgets. :param column: int. QGridLayout column to add widgets to. :param rowspan: int. Number of rows to span widgets. :param columnspan: int. Number of columns to span widgets. :return: """ # Create Qlabel for edit field. lbl = QLabel(label) lbl.setFont(self.label_font) # Create layout for buttons. hbox = QHBoxLayout() # Define a size policy for the buttons btn_sizePolicy = QSizePolicy() btn_sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding) btn_sizePolicy.setVerticalPolicy(QSizePolicy.Preferred) # Create a QButtonGroup btn_group = QButtonGroup() self.button_groups[label] = btn_group btn_group_id = 1 # Create buttons and add to group and layout. list_element_type = type(values[0]) if list_element_type is dict: for element in values: btn_str = str(element[key]) btn = QPushButton(btn_str) btn.setFont(self.edit_font) btn.setFlat(True) btn.setSizePolicy(btn_sizePolicy) btn_group.addButton(btn, btn_group_id) hbox.addWidget(btn) btn_group_id += 1 elif list_element_type is list: for element in values: btn_str = str(element) btn = QPushButton(btn_str) btn.setFont(self.edit_font) btn.setSizePolicy(btn_sizePolicy) btn_group.addButton(btn, btn_group_id) hbox.addWidget(btn) btn_group_id += 1 txt_sizePolicy = QSizePolicy() txt_sizePolicy.setVerticalPolicy(QSizePolicy.Preferred) txt_sizePolicy.setHorizontalPolicy(QSizePolicy.Preferred) new_btn = QTextEdit() new_btn.setFont(self.edit_font) new_btn.setSizePolicy(txt_sizePolicy) hbox.addWidget(new_btn) options_layout = QVBoxLayout() options_btn_size_policy = QSizePolicy() options_btn_size_policy.setHorizontalPolicy(QSizePolicy.Preferred) options_btn_size_policy.setVerticalPolicy(QSizePolicy.Expanding) delete_btn = QPushButton() delete_btn.setIcon(QIcon(os.path.abspath(__file__ + '/../..' + '/img/exit.png'))) delete_btn.setSizePolicy(options_btn_size_policy) delete_btn.pressed.connect(lambda: self.on_delete_button_from_list(btn_group, hbox)) options_layout.addWidget(delete_btn) add_btn = QPushButton() add_btn.setIcon(QIcon(os.path.abspath(__file__ + '/../..' + '/img/Plus-50.png'))) add_btn.setSizePolicy(options_btn_size_policy) add_btn.pressed.connect(lambda: self.on_add_button_to_list(btn_group, hbox, new_btn)) options_layout.addWidget(add_btn) hbox.addLayout(options_layout) if type(layout) is QGridLayout: if rowspan is not None and columnspan is not None: layout.addWidget(lbl, row, column, rowspan, columnspan) layout.addLayout(hbox, row + rowspan + 1, column, rowspan, columnspan) else: layout.addWidget(lbl, row, column) layout.addLayout(hbox, row + 1, column) else: layout.addWidget(lbl) layout.addLayout(hbox)
def __init__(self, selector: CellSelector): super().__init__("Plotting") self.selector = selector self.setStyleSheet( "QDockWidget > QWidget { border: 1px solid lightgray; }") self.roiDrawer = None self.setObjectName('PlottingWidget') self._plots = [] self.cellMetas = [] self._widget = QWidget() self._widget.setLayout(QHBoxLayout()) self._plotScroll = QScrollArea() self._plotScroll.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOn) self._plotScroll.setWidgetResizable(True) self._plotScroll.horizontalScrollBar().setEnabled(False) self._plotScroll.horizontalScrollBar().setVisible(False) self._plotScroll.setMinimumWidth(75) self._plotScroll.setMaximumWidth(600) self._scrollContents = AspectRatioWidget(1, self) self._scrollContents.setLayout(QVBoxLayout()) a = QSizePolicy() # a.setHeightForWidth(True) a.setHorizontalPolicy( QSizePolicy.Maximum) #Stretch out as much as possible horizontally self._scrollContents.setSizePolicy(a) self._plotScroll.setWidget(self._scrollContents) buttons = QWidget() buttons.setMaximumWidth(100) buttons.setLayout(QVBoxLayout()) _ = buttons.layout().addWidget self._anNameEdit = QLineEdit(self) self._oldPattern = '' self._oldCells = None self._anNameEdit.editingFinished.connect(self._anNameEditFinished) self._buttonGroup = QButtonGroup() self._lastButton = None self._buttonGroup.buttonReleased.connect(self._handleButtons) self._plotThumbnailButton = QPushButton("Thumbnail") self._plotRMSButton = QPushButton("RMS") self._plotRButton = QPushButton('R') self._buttonGroup.addButton(self._plotThumbnailButton) self._buttonGroup.addButton(self._plotRMSButton) self._buttonGroup.addButton(self._plotRButton) [i.setCheckable(True) for i in self._buttonGroup.buttons()] self._buttonGroup.buttons()[0].setChecked(True) frame = QFrame(parent=self) frame.setFrameStyle(QFrame.StyledPanel | QFrame.Plain) l = QVBoxLayout() [l.addWidget(i) for i in self._buttonGroup.buttons()] frame.setLayout(l) self._refreshButton = QPushButton("Refresh") self._refreshButton.released.connect( lambda: self._generatePlots(self.selector.getSelectedCellMetas())) self._roiButton = QPushButton("Draw ROI's") self._roiButton.released.connect(self._startRoiDrawing) label = QLabel("Analysis Name") label.setMaximumHeight(20) _(label) _(self._anNameEdit) _(self._refreshButton) _(self._roiButton) _(frame) self._widget.layout().addWidget(self._plotScroll) self._widget.layout().addWidget(buttons) # self._widget.setMaximumWidth(self.plotScroll.maximumWidth()+buttons.maximumWidth()+10) self.setWidget(self._widget) self._enableAnalysisPlottingButtons('false')
def _createView(self): layout = QVBoxLayout() self.le_league = MonitoredLineEdit() self.le_league.setText("League TBD") self.le_league.setAlignment(Qt.AlignCenter) self.le_league.setPlaceholderText("League TBD") self.le_league.textModified.connect(self.league_changed) policy = QSizePolicy() policy.setHorizontalStretch(3) policy.setHorizontalPolicy(QSizePolicy.Expanding) policy.setVerticalStretch(1) policy.setVerticalPolicy(QSizePolicy.Fixed) self.le_league.setSizePolicy(policy) self.le_team = [MonitoredLineEdit() for y in range(2)] self.le_player = [[MonitoredLineEdit() for x in range( self.max_no_sets)] for y in range(2)] self.cb_race = [[QComboBox() for x in range(self.max_no_sets)] for y in range(2)] self.sl_score = [QSlider(Qt.Horizontal) for y in range(self.max_no_sets)] self.le_map = [MapLineEdit() for y in range(self.max_no_sets)] self.label_set = [QPushButton('#{}'.format(y + 1), self) for y in range(self.max_no_sets)] self.setContainer = [QHBoxLayout() for y in range(self.max_no_sets)] container = QHBoxLayout() for team_idx in range(2): self.le_team[team_idx].setText("TBD") self.le_team[team_idx].setAlignment( Qt.AlignCenter) self.le_team[team_idx].setPlaceholderText( "Team " + str(team_idx + 1)) policy = QSizePolicy() policy.setHorizontalStretch(4) policy.setHorizontalPolicy( QSizePolicy.Expanding) policy.setVerticalStretch(1) policy.setVerticalPolicy(QSizePolicy.Fixed) self.le_team[team_idx].setSizePolicy(policy) self.le_team[team_idx].setMinimumWidth(self.mimumLineEditWidth) self.le_team[team_idx].textModified.connect( lambda team_idx=team_idx: self.team_changed(team_idx)) self.qb_logo1 = IconPushButton() self.qb_logo1.setFixedWidth(self.raceWidth) self.qb_logo1.clicked.connect(lambda: self.parent.logoDialog(1, self)) logo = self.controller.logoManager.getTeam1(self._ctrlID) self.qb_logo1.setIcon(QIcon(logo.provideQPixmap())) self.qb_logo2 = IconPushButton() self.qb_logo2.setFixedWidth(self.raceWidth) self.qb_logo2.clicked.connect(lambda: self.parent.logoDialog(2, self)) logo = self.controller.logoManager.getTeam2(self._ctrlID) self.qb_logo2.setIcon(QIcon(logo.provideQPixmap())) self.sl_team = QSlider(Qt.Horizontal) self.sl_team.setTracking(False) self.sl_team.setMinimum(-1) self.sl_team.setMaximum(1) self.sl_team.setValue(0) self.sl_team.setTickPosition( QSlider.TicksBothSides) self.sl_team.setTickInterval(1) self.sl_team.valueChanged.connect(lambda x: self.sl_changed(-1, x)) self.sl_team.setToolTip(_('Choose your team')) self.sl_team.setMinimumHeight(5) self.sl_team.setFixedWidth(self.scoreWidth) policy = QSizePolicy() policy.setHorizontalStretch(0) policy.setHorizontalPolicy(QSizePolicy.Fixed) policy.setVerticalStretch(1) policy.setVerticalPolicy(QSizePolicy.Fixed) self.sl_team.setSizePolicy(policy) container = QGridLayout() button = QPushButton() pixmap = QIcon( scctool.settings.getResFile('update.png')) button.setIcon(pixmap) button.clicked.connect( lambda: self.controller.swapTeams()) button.setFixedWidth(self.labelWidth) button.setToolTip(_("Swap teams and logos.")) container.addWidget(button, 0, 0, 2, 1) label = QLabel(_("League:")) label.setAlignment(Qt.AlignCenter) policy = QSizePolicy() policy.setHorizontalStretch(4) policy.setHorizontalPolicy(QSizePolicy.Expanding) policy.setVerticalStretch(1) policy.setVerticalPolicy(QSizePolicy.Fixed) label.setSizePolicy(policy) container.addWidget(label, 0, 1, 1, 1) label = QLabel(_("Maps \ Teams:")) label.setAlignment(Qt.AlignCenter) policy = QSizePolicy() policy.setHorizontalStretch(4) policy.setHorizontalPolicy(QSizePolicy.Expanding) policy.setVerticalStretch(1) policy.setVerticalPolicy(QSizePolicy.Fixed) label.setSizePolicy(policy) container.addWidget(label, 1, 1, 1, 1) container.addWidget(self.qb_logo1, 0, 2, 2, 1) container.addWidget(self.le_league, 0, 3, 1, 3) container.addWidget(self.le_team[0], 1, 3, 1, 1) container.addWidget(self.sl_team, 1, 4, 1, 1) container.addWidget(self.le_team[1], 1, 5, 1, 1) container.addWidget(self.qb_logo2, 0, 6, 2, 1) layout.addLayout(container) for player_idx in range(self.max_no_sets): self.le_map[player_idx].textModified.connect( lambda player_idx=player_idx: self.map_changed(player_idx)) for team_idx in range(2): self.cb_race[team_idx][player_idx].\ currentIndexChanged.connect( lambda idx, t=team_idx, p=player_idx: self.race_changed(t, p)) self.le_player[team_idx][player_idx].textModified.connect( lambda t=team_idx, p=player_idx: self.player_changed(t, p)) self.le_player[team_idx][player_idx].setText("TBD") self.le_player[team_idx][player_idx].setAlignment( Qt.AlignCenter) self.le_player[team_idx][player_idx].setPlaceholderText( _("Player {} of team {}").format(player_idx + 1, team_idx + 1)) self.le_player[team_idx][player_idx].setMinimumWidth( self.mimumLineEditWidth) self.le_player[team_idx][player_idx].setContextMenuPolicy( Qt.CustomContextMenu) self.le_player[team_idx][player_idx].\ customContextMenuRequested.connect( lambda x, team_idx=team_idx, player_idx=player_idx: self.openPlayerContextMenu(team_idx, player_idx)) for i in range(4): self.cb_race[team_idx][player_idx].addItem( QIcon(scctool.settings.getResFile( str(i) + ".png")), "") self.cb_race[team_idx][player_idx].setFixedWidth( self.raceWidth) self.sl_score[player_idx].setMinimum(-1) self.sl_score[player_idx].setMaximum(1) self.sl_score[player_idx].setValue(0) self.sl_score[player_idx].setTickPosition( QSlider.TicksBothSides) self.sl_score[player_idx].setTickInterval(1) self.sl_score[player_idx].setTracking(False) self.sl_score[player_idx].valueChanged.connect( lambda x, player_idx=player_idx: self.sl_changed(player_idx, x)) self.sl_score[player_idx].setToolTip(_('Set the score')) self.sl_score[player_idx].setFixedWidth(self.scoreWidth) self.le_map[player_idx].setText("TBD") self.le_map[player_idx].setAlignment( Qt.AlignCenter) self.le_map[player_idx].setPlaceholderText( _("Map {}").format(player_idx + 1)) self.le_map[player_idx].setMinimumWidth( self.mimumLineEditWidth) # self.le_map[player_idx].setReadOnly(True) self.setContainer[player_idx] = QHBoxLayout() # self.label_set[player_idx].setText("#" + str(player_idx + 1)) # self.label_set[player_idx].setAlignment( # Qt.AlignCenter) self.label_set[player_idx].setToolTip( _("Select map on Mapstats Browser Source.")) self.label_set[player_idx].setEnabled(False) self.label_set[player_idx].clicked.connect( lambda x, player_idx=player_idx: self.showMap(player_idx)) self.label_set[player_idx].setFixedWidth(self.labelWidth) self.setContainer[player_idx].addWidget( self.label_set[player_idx], 0) self.setContainer[player_idx].addWidget( self.le_map[player_idx], 4) self.setContainer[player_idx].addWidget( self.cb_race[0][player_idx], 0) self.setContainer[player_idx].addWidget( self.le_player[0][player_idx], 4) self.setContainer[player_idx].addWidget( self.sl_score[player_idx], 0) self.setContainer[player_idx].addWidget( self.le_player[1][player_idx], 4) self.setContainer[player_idx].addWidget( self.cb_race[1][player_idx], 0) layout.addLayout(self.setContainer[player_idx]) layout.addItem(QSpacerItem( 0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.setLayout(layout) self.updateMapCompleters() self.updatePlayerCompleters() self.updateTeamCompleters()
def __init__(self, *args): super().__init__(BrickletIndustrialDual020mAV2, *args) self.dual020 = self.device self.str_connected = 'Channel {0} is <font color="green">connected (>= 3.9 mA)</font>' self.str_not_connected = 'Channel {0} is <font color="red">not connected (< 3.9 mA)</font>' self.cbe_current0 = CallbackEmulator( self.dual020.get_current, 0, self.cb_current, self.increase_error_count, pass_arguments_to_result_callback=True) self.cbe_current1 = CallbackEmulator( self.dual020.get_current, 1, self.cb_current, self.increase_error_count, pass_arguments_to_result_callback=True) self.connected_labels = [ FixedSizeLabel(self.str_not_connected.format(0)), FixedSizeLabel(self.str_not_connected.format(1)) ] self.current_current = [CurveValueWrapper(), CurveValueWrapper()] # float, mA plots = [('Channel 0', Qt.red, self.current_current[0], lambda value: '{:.03f} mA'.format(round(value, 3))), ('Channel 1', Qt.blue, self.current_current[1], lambda value: '{:.03f} mA'.format(round(value, 3)))] self.plot_widget = PlotWidget('Current [mA]', plots, extra_key_widgets=self.connected_labels, y_resolution=0.001) h_sp = QSizePolicy() h_sp.setHorizontalPolicy(QSizePolicy.Expanding) self.sample_rate_label = QLabel('Sample Rate:') self.sample_rate_combo = QComboBox() self.sample_rate_combo.addItem('240 Hz') self.sample_rate_combo.addItem('60 Hz') self.sample_rate_combo.addItem('15 Hz') self.sample_rate_combo.addItem('4 Hz') self.sample_rate_combo.currentIndexChanged.connect( self.sample_rate_combo_index_changed) self.sample_rate_combo.setSizePolicy(h_sp) self.gain_label = QLabel('Gain:') self.gain_combo = QComboBox() self.gain_combo.addItem('x1') self.gain_combo.addItem('x2') self.gain_combo.addItem('x4') self.gain_combo.addItem('x8') self.gain_combo.currentIndexChanged.connect( self.gain_combo_index_changed) self.gain_combo.setSizePolicy(h_sp) self.led_config_ch0_label = QLabel('Channel 0') self.led_config_ch1_label = QLabel('Channel 1') self.led_config_label = QLabel('LED Config:') self.led_status_config_label = QLabel('LED Status Config:') self.led_status_config_ch0_min_label = QLabel('Min:') self.led_status_config_ch0_max_label = QLabel('Max:') self.led_status_config_ch1_min_label = QLabel('Min:') self.led_status_config_ch1_max_label = QLabel('Max:') self.led_config_ch0_combo = QComboBox() self.led_config_ch0_combo.addItem('Off') self.led_config_ch0_combo.addItem('On') self.led_config_ch0_combo.addItem('Show Heartbeat') self.led_config_ch0_combo.addItem('Show Channel Status') self.led_config_ch0_combo.setSizePolicy(h_sp) self.led_config_ch0_combo.currentIndexChanged.connect( self.led_config_ch0_combo_changed) self.led_config_ch1_combo = QComboBox() self.led_config_ch1_combo.addItem('Off') self.led_config_ch1_combo.addItem('On') self.led_config_ch1_combo.addItem('Show Heartbeat') self.led_config_ch1_combo.addItem('Show Channel Status') self.led_config_ch1_combo.setSizePolicy(h_sp) self.led_config_ch1_combo.currentIndexChanged.connect( self.led_config_ch1_combo_changed) self.led_status_config_ch0_combo = QComboBox() self.led_status_config_ch0_combo.addItem('Threshold') self.led_status_config_ch0_combo.addItem('Intensity') self.led_status_config_ch0_combo.setSizePolicy(h_sp) self.led_status_config_ch0_combo.currentIndexChanged.connect( self.led_status_config_ch0_combo_changed) self.led_status_config_ch1_combo = QComboBox() self.led_status_config_ch1_combo.addItem('Threshold') self.led_status_config_ch1_combo.addItem('Intensity') self.led_status_config_ch1_combo.setSizePolicy(h_sp) self.led_status_config_ch1_combo.currentIndexChanged.connect( self.led_status_config_ch1_combo_changed) self.led_status_config_ch0_min_sbox = QDoubleSpinBox() self.led_status_config_ch0_max_sbox = QDoubleSpinBox() self.led_status_config_ch1_min_sbox = QDoubleSpinBox() self.led_status_config_ch1_max_sbox = QDoubleSpinBox() self.led_status_config_ch0_min_sbox.setValue(0) self.led_status_config_ch0_min_sbox.setMinimum(0) self.led_status_config_ch0_min_sbox.setSingleStep(0.5) self.led_status_config_ch0_min_sbox.setDecimals(3) self.led_status_config_ch0_min_sbox.setSuffix(' mA') self.led_status_config_ch0_min_sbox.setMaximum(22.5) self.led_status_config_ch0_min_sbox.valueChanged.connect( self.led_status_config_ch0_min_sbox_changed) self.led_status_config_ch0_max_sbox.setValue(0) self.led_status_config_ch0_max_sbox.setMinimum(0) self.led_status_config_ch0_max_sbox.setSingleStep(0.5) self.led_status_config_ch0_max_sbox.setDecimals(3) self.led_status_config_ch0_max_sbox.setSuffix(' mA') self.led_status_config_ch0_max_sbox.setMaximum(22.5) self.led_status_config_ch0_max_sbox.valueChanged.connect( self.led_status_config_ch0_max_sbox_changed) self.led_status_config_ch1_min_sbox.setValue(0) self.led_status_config_ch1_min_sbox.setMinimum(0) self.led_status_config_ch1_min_sbox.setSingleStep(0.5) self.led_status_config_ch1_min_sbox.setDecimals(3) self.led_status_config_ch1_min_sbox.setSuffix(' mA') self.led_status_config_ch1_min_sbox.setMaximum(22.5) self.led_status_config_ch1_min_sbox.valueChanged.connect( self.led_status_config_ch1_min_sbox_changed) self.led_status_config_ch1_max_sbox.setValue(0) self.led_status_config_ch1_max_sbox.setMinimum(0) self.led_status_config_ch1_max_sbox.setSingleStep(0.5) self.led_status_config_ch1_max_sbox.setDecimals(3) self.led_status_config_ch1_max_sbox.setSuffix(' mA') self.led_status_config_ch1_max_sbox.setMaximum(22.5) self.led_status_config_ch1_max_sbox.valueChanged.connect( self.led_status_config_ch1_max_sbox_changed) hlayout = QHBoxLayout() self.led_status_config_ch0_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch0_max_sbox.setSizePolicy(h_sp) hlayout.addWidget(self.led_status_config_ch0_min_label) hlayout.addWidget(self.led_status_config_ch0_min_sbox) hlayout.addWidget(self.led_status_config_ch0_max_label) hlayout.addWidget(self.led_status_config_ch0_max_sbox) hlayout1 = QHBoxLayout() self.led_status_config_ch1_min_sbox.setSizePolicy(h_sp) self.led_status_config_ch1_max_sbox.setSizePolicy(h_sp) hlayout1.addWidget(self.led_status_config_ch1_min_label) hlayout1.addWidget(self.led_status_config_ch1_min_sbox) hlayout1.addWidget(self.led_status_config_ch1_max_label) hlayout1.addWidget(self.led_status_config_ch1_max_sbox) line = QFrame() line.setObjectName("line") line.setFrameShape(QFrame.HLine) line.setFrameShadow(QFrame.Sunken) line1 = QFrame() line1.setObjectName("line1") line1.setFrameShape(QFrame.HLine) line1.setFrameShadow(QFrame.Sunken) line2 = QFrame() line2.setObjectName("line2") line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) glayout = QGridLayout() glayout.addWidget(line, 0, 0, 1, 3) # line-1 glayout.addWidget(self.sample_rate_label, 1, 0, 1, 1) glayout.addWidget(self.sample_rate_combo, 1, 1, 1, 2) glayout.addWidget(self.gain_label, 2, 0, 1, 1) glayout.addWidget(self.gain_combo, 2, 1, 1, 2) glayout.addWidget(line1, 3, 0, 1, 3) # line-2 glayout.addWidget(self.led_config_ch0_label, 4, 1, 1, 1) glayout.addWidget(self.led_config_ch1_label, 4, 2, 1, 1) glayout.addWidget(line2, 5, 0, 1, 3) # line-3 glayout.addWidget(self.led_config_label, 6, 0, 1, 1) glayout.addWidget(self.led_config_ch0_combo, 6, 1, 1, 1) glayout.addWidget(self.led_config_ch1_combo, 6, 2, 1, 1) glayout.addWidget(self.led_status_config_label, 7, 0, 1, 1) glayout.addWidget(self.led_status_config_ch0_combo, 7, 1, 1, 1) glayout.addWidget(self.led_status_config_ch1_combo, 7, 2, 1, 1) glayout.addLayout(hlayout, 8, 1, 1, 1) glayout.addLayout(hlayout1, 8, 2, 1, 1) layout = QVBoxLayout(self) layout.addWidget(self.plot_widget) layout.addLayout(glayout) self.ui_group_ch_status_ch0 = [ self.led_status_config_ch0_combo, self.led_status_config_ch0_min_sbox, self.led_status_config_ch0_max_sbox ] self.ui_group_ch_status_ch1 = [ self.led_status_config_ch1_combo, self.led_status_config_ch1_min_sbox, self.led_status_config_ch1_max_sbox ]