def __init__(self, subject_name): QMainWindow.__init__(self) self.setWindowTitle("Edit Comment Bank: {} - {} {}".format( subject_name, config.APP_NAME, config.APP_VERSION)) self.setMinimumWidth(1200) self.setStyleSheet(config.STYLESHEET) self.subject = could_try_harder.load(subject_name) self.saved_list = could_try_harder.get_saved_list() # Widgets self.intro_comment_label = QLabel("Introductory Comment:") self.intro_comment_label.setProperty("styleClass", "heading") self.intro_comment_textedit = QTextEdit() self.comment_bank_label = QLabel("Comment Bank") self.comment_bank_label.setProperty("styleClass", "heading") self.comment_bank_listwidget = QListWidget() self.placeholder_instructions_label = QLabel( config.PLACEHOLDER_INSTRUCTIONS) self.add_comment_label = QLabel("Add Comment:") self.add_comment_entry = QLineEdit() self.add_comment_button = QPushButton("Add") self.update_comment_label = QLabel("Update Comment:") self.update_comment_entry = QLineEdit() self.update_comment_button = QPushButton("Update") self.delete_comment_button = QPushButton("Delete Comment") self.import_comments_combo = QComboBox() self.import_comments_button = QPushButton("Import...") self.cancel_button = QPushButton("Cancel") self.save_button = QPushButton("Save") # Layout self.layout = QVBoxLayout() self.top_layout = QHBoxLayout() self.intro_comment_layout = QVBoxLayout() self.intro_comment_layout.addWidget(self.intro_comment_label) self.intro_comment_layout.addWidget(self.intro_comment_textedit) self.top_layout.addLayout(self.intro_comment_layout) self.top_layout.addWidget(self.placeholder_instructions_label) self.layout.addLayout(self.top_layout) self.middle_layout = QVBoxLayout() self.middle_layout.addWidget(self.comment_bank_label) self.middle_layout.addWidget(self.comment_bank_listwidget) self.comment_actions_layout = QHBoxLayout() self.comment_actions_layout.addWidget(self.delete_comment_button, 0, Qt.AlignLeft) self.comment_actions_layout.addWidget(self.import_comments_combo, 1, Qt.AlignRight) self.comment_actions_layout.addWidget(self.import_comments_button, 0, Qt.AlignRight) self.middle_layout.addLayout(self.comment_actions_layout) self.update_comment_layout = QGridLayout() self.update_comment_layout.addWidget(self.update_comment_label, 0, 0) self.update_comment_layout.addWidget(self.update_comment_entry, 0, 1) self.update_comment_layout.addWidget(self.update_comment_button, 0, 2) self.update_comment_layout.addWidget(self.add_comment_label, 1, 0) self.update_comment_layout.addWidget(self.add_comment_entry, 1, 1) self.update_comment_layout.addWidget(self.add_comment_button, 1, 2) self.middle_layout.addLayout(self.update_comment_layout) self.layout.addLayout(self.middle_layout) self.bottom_layout = QHBoxLayout() self.bottom_layout.addWidget(self.cancel_button, 0, Qt.AlignLeft) self.bottom_layout.addWidget(self.save_button, 0, Qt.AlignRight) self.layout.addLayout(self.bottom_layout) # Slot connections self.comment_bank_listwidget.itemSelectionChanged.connect( self.do_update_comment_bank_selection) self.import_comments_button.clicked.connect(self.do_import_comments) self.update_comment_button.clicked.connect(self.do_update_comment) self.update_comment_entry.returnPressed.connect(self.do_update_comment) self.add_comment_button.clicked.connect(self.do_add_comment) self.add_comment_entry.returnPressed.connect(self.do_add_comment) self.delete_comment_button.clicked.connect(self.do_delete_comment) self.cancel_button.clicked.connect(self.do_cancel) self.save_button.clicked.connect(self.do_save) # Initial UI update self.update_ui() self.widget = QWidget() self.widget.setLayout(self.layout) self.setCentralWidget(self.widget)
def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") MainWindow.resize(1131, 555) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.label = QLabel(self.centralwidget) self.label.setObjectName(u"label") self.label.setGeometry(QRect(10, 60, 781, 431)) self.label.setStyleSheet(u"background-color: rgb(85, 255, 255)") self.label.setScaledContents(True) self.listWidget = QListWidget(self.centralwidget) no_of_widgets=19 for i in range(no_of_widgets): QListWidgetItem(self.listWidget) self.listWidget.setObjectName(u"listWidget") self.listWidget.setGeometry(QRect(850, 160, 256, 201)) self.horizontalSlider = QSlider(self.centralwidget) self.horizontalSlider.setObjectName(u"horizontalSlider") self.horizontalSlider.setGeometry(QRect(870, 70, 211, 22)) self.horizontalSlider.setOrientation(Qt.Horizontal) #print(self.horizontalSlider.value()) self.label_2 = QLabel(self.centralwidget) self.label_2.setObjectName(u"label_2") self.label_2.setGeometry(QRect(930, 10, 101, 51)) self.label_2.setMinimumSize(QSize(0, 31)) self.label_2.setScaledContents(True) self.label_2.setWordWrap(True) self.label_2.setMargin(10) # ✅ commit button self.pushButton = QPushButton(self.centralwidget) self.pushButton.setObjectName(u"pushButton") self.pushButton.setGeometry(QRect(892, 110, 61, 28)) self.pushButton.clicked.connect(lambda : self.commit()) # ❌ cancle button self.pushButton_2 = QPushButton(self.centralwidget) self.pushButton_2.setObjectName(u"pushButton_2") self.pushButton_2.setGeometry(QRect(990, 110, 61, 28)) self.pushButton_2.clicked.connect(lambda : self.cancle()) # ↩️ Undo button self.pushButton_3 = QPushButton(self.centralwidget) self.pushButton_3.setObjectName(u"pushButton_3") self.pushButton_3.setGeometry(QRect(370, 20, 61, 28)) self.pushButton_3.clicked.connect(lambda : self.undo()) #crop self.pushButton_4 = QPushButton(self.centralwidget) self.pushButton_4.setObjectName(u"pushButton_4") self.pushButton_4.setGeometry(QRect(910, 380, 61, 28)) self.pushButton_4.clicked.connect(self.cropping) # Resize self.pushButton_5 = QPushButton(self.centralwidget) self.pushButton_5.setObjectName(u"pushButton_5") self.pushButton_5.setGeometry(QRect(980, 380, 61, 28)) self.pushButton_5.clicked.connect(self.resize) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(MainWindow) self.menubar.setObjectName(u"menubar") self.menubar.setGeometry(QRect(0, 0, 1131, 26)) self.menuNew_File = QMenu(self.menubar) self.menuNew_File.setObjectName(u"menuNew_File") #New File self.actionNew_File = QAction("NewFile") self.actionNew_File.triggered.connect(self.addImage) self.menuNew_File.addAction(self.actionNew_File) #Save File self.actionSave_File = QAction("SaveFile") self.actionSave_File.triggered.connect(self.saveImage) self.menuNew_File.addAction(self.actionSave_File) MainWindow.setMenuBar(self.menubar) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName(u"statusbar") self.timer=QTimer() self.timer.timeout.connect(lambda : self.showFrame(self.image_stack[-1]) ) self.timer.start(1) MainWindow.setStatusBar(self.statusbar) self.menubar.addAction(self.menuNew_File.menuAction()) #self.menubar.addAction(self.menuSave.menuAction()) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow)
def __init__(self, status_link): super(ImageToPdfWidget, self).__init__() LABEL_WIDTH = 80 self.last_selected_items = [] self.options_mode = 0 self.update_status_combobox = False layout = QHBoxLayout() self.status_bar = status_link self.list_view = QListWidget() self.list_view.setSelectionMode(QAbstractItemView.ExtendedSelection) self.list_view.setAlternatingRowColors(True) self.list_view.itemClicked.connect(self.click_item_signal) self.list_view.itemEntered.connect(self.click_item_signal) self.list_view.itemSelectionChanged.connect( self.change_selection_signal) controls_layout = QVBoxLayout() controls_layout.setAlignment(Qt.AlignTop) select_zone = SelectWidget(self.click_move_up, self.click_move_down, self.click_invert, self.click_delete) # options zone ------------------------------------- options_zone = QGroupBox("Options") self.options_zone_layout = QVBoxLayout() self.options_mode_combobox = QComboBox() self._add_items_to_mode_combobox(self.options_mode_combobox) options_mode_label = QLabel("Mode") options_mode_label.setMaximumWidth(LABEL_WIDTH) options_mode_layout = QHBoxLayout() options_mode_layout.addWidget(options_mode_label) options_mode_layout.addWidget(self.options_mode_combobox) self.options_zone_layout.addLayout(options_mode_layout) self.option_source_widget = OptionsFromSourceWidget( label_width=LABEL_WIDTH, status_bar=self.status_bar) self.options_a_widget = OptionsAWidget(label_width=LABEL_WIDTH, status_bar=self.status_bar) self.options_mode_combobox.currentIndexChanged.connect( self.change_options_mode_signal) self.change_options_mode_signal(self.options_mode) options_zone.setLayout(self.options_zone_layout) # Add files button and final structures --------------------------- add_file_button = QPushButton("Add Files") add_file_button.clicked.connect(self.click_add_files) controls_layout.addWidget(select_zone) controls_layout.addWidget(options_zone) controls_layout.addWidget(add_file_button) # image preview --------------------------------------------------- image_prev_layout = QVBoxLayout() image_prev_layout.setContentsMargins(0, 0, 4, 0) self.IMG_PREVIEW_WIDTH = 256 self.img_label = QLabel() self.img_label.setAlignment(Qt.AlignCenter) self.select_text = "Click item to preview" self.last_created_pix_path = "" self.img_label.setText(self.select_text) image_prev_layout.addWidget(self.img_label) # slider for the preview scale self.img_scale_slider = QSlider() self.img_scale_slider.setMinimum(6) self.img_scale_slider.setMaximum(2048) self.img_scale_slider.setValue(self.IMG_PREVIEW_WIDTH) self.img_scale_slider.setOrientation(Qt.Horizontal) self.img_scale_slider.valueChanged.connect( self.change_scale_slider_signal) image_prev_layout.addWidget(self.img_scale_slider) self._update_preview() layout.addLayout(image_prev_layout) layout.addWidget(self.list_view) layout.addLayout(controls_layout) self.setLayout(layout) self.update_status_combobox = True
def create_file_list(self, path, selected=None, up=False, update_list=None): '''Return a file list with objects populated from files/dirs in given path. path -- path of directory to create list elements selected -- name of the cwd to select in parent list up -- create a link to one level up update_list -- (QListWidget) update the given list with new path elements rather than returning a new list ''' if not update_list: file_list = QListWidget(self) else: update_list.clear() file_list = update_list if not path and not update_list: # if empty return file_list elif not path and update_list: if len(self.drives) > 0: for letter in self.drives: try: icon = QIcon(convert_to_icon(letter)) except Exception as e: print(e) traceback.print_tb(e.__traceback__) update_list.addItem(QListWidgetItem(icon, letter)) else: update_list.addItem(QListWidgetItem('((root))')) return # cache read contents of path to save some time and processing power? # TODO: could maybe also save actual QListWIdgetItems? to save on Icon creation time # could also copy QIcons to cached_dirs = {... 'dir_icons': [], 'file_icons': []} if not any(c['path'] == path for c in self.cached_dirs): files, dirs, dirpath = get_files(path) cache = { 'path': dirpath, 'dirs': dirs.copy(), 'files': files.copy() } self.cached_dirs.append(cache) # dirs cache limit if len(self.cached_dirs) > 15: del self.cached_dirs[0] else: for c in self.cached_dirs: if c['path'] == path: files, dirs, dirpath = c['files'].copy(), c['dirs'].copy( ), c['path'] if up: dirs.insert(0, os.path.abspath(os.path.join(path))) selected_index = -1 if len(files) > 0: for i in range(len(files)): try: icon = QIcon( convert_to_icon(os.path.join(dirpath, files[i]))) except Exception as e: print(e) traceback.print_tb(e.__traceback__) icon = QIcon() files[i] = QListWidgetItem(icon, files[i]) if len(dirs) > 0: for i in range(len(dirs)): if dirs[i] == selected: selected_index = i try: icon = QIcon( convert_to_icon( os.path.abspath(os.path.join(dirpath, dirs[i])))) except Exception as e: print(e) traceback.print_tb(e.__traceback__) icon = QIcon() dirs[i] = QListWidgetItem(icon, dirs[i]) if up: dirs[0].setText('..') if len(dirs) > 0: for d in dirs: file_list.addItem(d) if len(files) > 0: for f in files: file_list.addItem(f) if len(dirs) == 0 and len(files) == 0: file_list.addItem(QListWidgetItem('((empty))')) if selected_index >= 0: file_list.item(selected_index).setSelected(True) file_list.scrollToItem(file_list.item(selected_index)) else: file_list.item(0).setSelected(True) if update_list: return return file_list
def _init_load_options_tab(self, tab): if self.is_blob: blob_layout = QGridLayout() # architecture selection arch_caption = QLabel(self) arch_caption.setText('Architecture:') blob_layout.addWidget(arch_caption, 0, 0) arch = QComboBox(self) for a in archinfo.all_arches: arch.addItem(f'{a.bits}b {a.name} ({a.memory_endness[-2:]})') blob_layout.addWidget(arch, 0, 1) self.option_widgets['arch'] = arch # load address base_addr_caption = QLabel(self) base_addr_caption.setText('Base Address:') blob_layout.addWidget(base_addr_caption, 1, 0) base_addr = QLineEdit(self) base_addr.setText('0') blob_layout.addWidget(base_addr, 1, 1) self.option_widgets['base_addr'] = base_addr # entry address entry_addr_caption = QLabel(self) entry_addr_caption.setText('Entry Address:') blob_layout.addWidget(entry_addr_caption, 2, 0) entry_addr = QLineEdit(self) entry_addr.setText('0') blob_layout.addWidget(entry_addr, 2, 1) self.option_widgets['entry_addr'] = entry_addr # load debug symbols load_debug_info = QCheckBox() load_debug_info.setText("Load debug information if available") load_debug_info.setChecked(True) self.option_widgets['load_debug_info'] = load_debug_info # auto load libs auto_load_libs = QCheckBox() auto_load_libs.setText( "Automatically load all libraries (slow, not recommended)") auto_load_libs.setChecked(False) self.option_widgets['auto_load_libs'] = auto_load_libs # dependencies list dep_group = QGroupBox("Dependencies") dep_list = QListWidget() self.option_widgets['dep_list'] = dep_list sublayout = QVBoxLayout() sublayout.addWidget(dep_list) dep_group.setLayout(sublayout) layout = QVBoxLayout() if self.is_blob: layout.addLayout(blob_layout) layout.addWidget(load_debug_info) layout.addWidget(auto_load_libs) layout.addWidget(dep_group) layout.addStretch(0) frame = QFrame(self) frame.setLayout(layout) tab.addTab(frame, "Loading Options")
def __init__(self, parent): super(LevelSelector, self).__init__(parent) self.setWindowTitle("Level Selector") self.setModal(True) self.selected_world = 1 self.selected_level = 1 self.object_set = 0 self.object_data_offset = 0x0 self.enemy_data_offset = 0x0 self.world_label = QLabel(parent=self, text="World") self.world_list = QListWidget(parent=self) self.world_list.addItems(WORLD_ITEMS) self.world_list.itemDoubleClicked.connect(self.on_ok) self.world_list.itemSelectionChanged.connect(self.on_world_click) self.level_label = QLabel(parent=self, text="Level") self.level_list = QListWidget(parent=self) self.level_list.itemDoubleClicked.connect(self.on_ok) self.level_list.itemSelectionChanged.connect(self.on_level_click) self.enemy_data_label = QLabel(parent=self, text="Enemy Data") self.enemy_data_spinner = Spinner(parent=self) self.object_data_label = QLabel(parent=self, text="Object Data") self.object_data_spinner = Spinner(self) self.object_set_label = QLabel(parent=self, text="Object Set") self.object_set_dropdown = QComboBox(self) self.object_set_dropdown.addItems(OBJECT_SET_ITEMS) self.button_ok = QPushButton("Ok", self) self.button_ok.clicked.connect(self.on_ok) self.button_cancel = QPushButton("Cancel", self) self.button_cancel.clicked.connect(self.close) self.window_layout = QGridLayout(self) self.window_layout.addWidget(self.world_label, 0, 0) self.window_layout.addWidget(self.level_label, 0, 1) self.window_layout.addWidget(self.world_list, 1, 0) self.window_layout.addWidget(self.level_list, 1, 1) self.window_layout.addWidget(self.enemy_data_label, 2, 0) self.window_layout.addWidget(self.object_data_label, 2, 1) self.window_layout.addWidget(self.enemy_data_spinner, 3, 0) self.window_layout.addWidget(self.object_data_spinner, 3, 1) self.window_layout.addWidget(self.object_set_label, 4, 0) self.window_layout.addWidget(self.object_set_dropdown, 4, 1) self.window_layout.addWidget(self.button_ok, 5, 0) self.window_layout.addWidget(self.button_cancel, 5, 1) self.setLayout(self.window_layout) self.world_list.setCurrentRow(1) # select Level 1-1 self.on_world_click()
def __init__(self, owner): super(self.__class__, self).__init__() Ui_BookInfo.__init__(self) self.setupUi(self) self.owner = weakref.ref(owner) self.loadingForm = QtLoading(self) self.bookId = "" self.url = "" self.path = "" self.bookName = "" self.lastEpsId = -1 self.pictureData = None self.msgForm = QtBubbleLabel(self) self.picture.installEventFilter(self) # self.title.setGeometry(QRect(328, 240, 329, 27 * 4)) self.title.setWordWrap(True) # self.title.setAlignment(Qt.AlignLeft) self.title.setContextMenuPolicy(Qt.CustomContextMenu) self.title.customContextMenuRequested.connect(self.CopyTitle) # self.autor.setContextMenuPolicy(Qt.CustomContextMenu) # self.autor.customContextMenuRequested.connect(self.OpenAutor) layouy = self.horizontalLayout_4 self.autorList = QtCategoryList(self) layouy.addWidget(QLabel("作者:")) layouy.addWidget(self.autorList) self.autorList.itemClicked.connect(self.ClickTagsItem) self.description.setContextMenuPolicy(Qt.CustomContextMenu) self.description.customContextMenuRequested.connect(self.CopyDescription) self.description.setGeometry(QRect(328, 240, 329, 27 * 4)) self.description.setWordWrap(True) self.description.setAlignment(Qt.AlignTop) # self.categories.setGeometry(QRect(328, 240, 329, 27 * 4)) # self.categories.setWordWrap(True) # self.categories.setAlignment(Qt.AlignTop) layouy = self.horizontalLayout_6 self.categoriesList = QtCategoryList(self) layouy.addWidget(QLabel("分类:")) layouy.addWidget(self.categoriesList) self.categoriesList.itemClicked.connect(self.ClickCategoriesItem) # self.tags.setGeometry(QRect(328, 240, 329, 27 * 4)) # self.tags.setWordWrap(True) # self.tags.setAlignment(Qt.AlignTop) layouy = self.horizontalLayout_7 self.tagsList = QtCategoryList(self) layouy.addWidget(QLabel("Tags:")) layouy.addWidget(self.tagsList) self.tagsList.itemClicked.connect(self.ClickTagsItem) self.epsListWidget = QListWidget(self) self.epsListWidget.setFlow(self.epsListWidget.LeftToRight) self.epsListWidget.setWrapping(True) self.epsListWidget.setFrameShape(self.epsListWidget.NoFrame) self.epsListWidget.setResizeMode(self.epsListWidget.Adjust) self.epsLayout.addWidget(self.epsListWidget) self.listWidget = QtBookList(self, self.__class__.__name__, owner) self.listWidget.InitUser(self.LoadNextPage) self.listWidget.doubleClicked.connect(self.OpenCommentInfo) self.childrenListWidget = QtBookList(None, self.__class__.__name__, owner) self.childrenListWidget.InitUser(self.LoadChildrenNextPage) self.childrenWidget = QtWidgets.QWidget() layout = QHBoxLayout(self.childrenWidget) label = QLabel() label.setMinimumWidth(100) layout.addWidget(label) layout3 = QVBoxLayout() layout2 = QHBoxLayout() self.commentLine2 = QLineEdit() self.commentButton2 = QPushButton("回复") self.commentButton2.clicked.connect(self.SendCommentChildren) layout2.addWidget(self.commentLine2) layout2.addWidget(self.commentButton2) layout3.addLayout(layout2) layout3.addWidget(self.childrenListWidget) layout.addLayout(layout3) self.commentLayout.addWidget(self.listWidget) layout = QHBoxLayout() self.commentLine = QLineEdit() layout.addWidget(self.commentLine) self.commentButton = QPushButton("发送评论") layout.addWidget(self.commentButton) self.commentLayout.addLayout(layout, 1, 0) self.commentButton.clicked.connect(self.SendComment) # self.stackedWidget.addWidget(self.qtReadImg) self.epsListWidget.clicked.connect(self.OpenReadImg) self.closeFlag = self.__class__.__name__ + "-close" # 切换book时,取消加载
def __init__(self, parent): super(LevelSelector, self).__init__(parent) self.setWindowTitle("Level Selector") self.setModal(True) self.level_name = "" self.object_set = 0 self.object_data_offset = 0x0 self.enemy_data_offset = 0x0 self.world_label = QLabel(parent=self, text="World") self.world_list = QListWidget(parent=self) self.world_list.addItems(WORLD_ITEMS) self.world_list.itemDoubleClicked.connect(self.on_ok) self.world_list.itemSelectionChanged.connect(self.on_world_click) self.level_label = QLabel(parent=self, text="Level") self.level_list = QListWidget(parent=self) self.level_list.itemDoubleClicked.connect(self.on_ok) self.level_list.itemSelectionChanged.connect(self.on_level_click) self.enemy_data_label = QLabel(parent=self, text="Enemy Data") self.enemy_data_spinner = Spinner(parent=self) self.object_data_label = QLabel(parent=self, text="Object Data") self.object_data_spinner = Spinner(self) self.object_set_label = QLabel(parent=self, text="Object Set") self.object_set_dropdown = QComboBox(self) self.object_set_dropdown.addItems(OBJECT_SET_ITEMS) self.button_ok = QPushButton("Ok", self) self.button_ok.clicked.connect(self.on_ok) self.button_cancel = QPushButton("Cancel", self) self.button_cancel.clicked.connect(self.close) stock_level_widget = QWidget() stock_level_layout = QGridLayout(stock_level_widget) stock_level_layout.addWidget(self.world_label, 0, 0) stock_level_layout.addWidget(self.level_label, 0, 1) stock_level_layout.addWidget(self.world_list, 1, 0) stock_level_layout.addWidget(self.level_list, 1, 1) self.source_selector = QTabWidget() self.source_selector.addTab(stock_level_widget, "Stock Levels") for world_number in range(WORLD_COUNT): world_number += 1 world_map_select = WorldMapLevelSelect(world_number) world_map_select.level_selected.connect( self._on_level_selected_via_world_map) self.source_selector.addTab(world_map_select, f"World {world_number}") data_layout = QGridLayout() data_layout.addWidget(self.enemy_data_label, 0, 0) data_layout.addWidget(self.object_data_label, 0, 1) data_layout.addWidget(self.enemy_data_spinner, 1, 0) data_layout.addWidget(self.object_data_spinner, 1, 1) data_layout.addWidget(self.object_set_label, 2, 0) data_layout.addWidget(self.object_set_dropdown, 2, 1) data_layout.addWidget(self.button_ok, 3, 0) data_layout.addWidget(self.button_cancel, 3, 1) main_layout = QVBoxLayout() main_layout.addWidget(self.source_selector) main_layout.addLayout(data_layout) self.setLayout(main_layout) self.world_list.setCurrentRow(1) # select Level 1-1 self.on_world_click()
def _init_widgets(self): main = QMainWindow() main.setWindowFlags(Qt.Widget) carttree = QProgramTree(self.workspace) self._carttree = carttree carttree_dock = QDockWidget("Cartprograph Tree", carttree) main.setCentralWidget(carttree_dock) carttree_dock.setWidget(carttree) # TODO: THIS NEEDS A REFACTOR.. BAD # BEGIN CONSOLE VIEW ASSEMBLY console_view = self.workspace.view_manager.first_view_in_category( "console") self.console_tabs = console_view.tab_widget = QTabWidget() console_view.tab_widget.setTabPosition(QTabWidget.South) console_view.ipython_tab = QWidget() console_view.ipython_tab.setLayout( QHBoxLayout(console_view.ipython_tab)) console_view.tab_layout = QHBoxLayout() console_view.ipython_tab.layout().addWidget( console_view._ipython_widget) console_view.tab_widget.addTab(console_view.ipython_tab, "Console") console_view.tab_layout.addWidget(console_view.tab_widget) console_view.layout().setContentsMargins(0, 0, 0, 0) console_view.layout().addLayout(console_view.tab_layout) console_view.min_size = QSize(0, 125) console_view._ipython_widget.push_namespace( {"cartprograph": self.workspace.cartprograph}) console_group = QtWidgets.QGroupBox() console_group.setLayout(QtWidgets.QVBoxLayout(console_group)) self.console_output = QPlainTextEdit() self.console_output.setReadOnly(True) console_group.layout().addWidget(self.console_output) self.console_input = QLineEdit() console_group.layout().addWidget(self.console_input) self.console_input.returnPressed.connect( lambda: self.workspace.cartprograph.client.send_input( self.selected_item_id, self.console_input.text() + "\n")) self.workspace.view_manager.first_view_in_category( "console").tab_widget.addTab(console_group, "Cartprograph Console") # END CONSOLE VIEW ASSEMBLY # BEGIN TAB VIEW ASSEMBLY func_view = self.workspace.view_manager.first_view_in_category( "functions") self.func_tabs = func_view.tab_widget = QTabWidget() funcview_container = QWidget() funcview_container.setLayout(QVBoxLayout(funcview_container)) func_tabs_layout = QHBoxLayout() funcview_container.layout().addWidget(func_view._function_table) funcview_container.layout().addWidget(func_view._status_label) func_view.tab_widget.addTab(funcview_container, "Functions") func_tabs_layout.addWidget(func_view.tab_widget) func_view.layout().setContentsMargins(0, 0, 0, 0) func_view.layout().addLayout(func_tabs_layout) table_tabs = QTabWidget() table_functab = QWidget() table_functab.setLayout(QVBoxLayout(table_functab)) table_blocktab = QWidget() table_blocktab.setLayout(QVBoxLayout(table_blocktab)) table_datapoint_tab = QWidget() table_datapoint_tab.setLayout(QVBoxLayout(table_datapoint_tab)) table_watchertab = QWidget() table_watchertab.setLayout(QVBoxLayout(table_watchertab)) self.functable = QTableWidget() self.functable.setEditTriggers(QAbstractItemView.NoEditTriggers) self.functable.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents) table_tabs.addTab(table_functab, "Syscalls") table_functab.layout().addWidget(self.functable) self.blocktable = QTableWidget() self.blocktable.setEditTriggers(QAbstractItemView.NoEditTriggers) table_tabs.addTab(table_blocktab, "Basic Blocks") table_blocktab.layout().addWidget(self.blocktable) self.blocktable.cellDoubleClicked.connect(self._handle_table_click) self.datapoint_table = QTableWidget() self.datapoint_table.setEditTriggers(QAbstractItemView.NoEditTriggers) table_tabs.addTab(table_datapoint_tab, "Datapoints") table_datapoint_tab.layout().addWidget(self.datapoint_table) self.watcherlist = QListWidget() table_tabs.addTab(table_watchertab, "Watchers") table_watchertab.layout().addWidget(self.watcherlist) self.watcherRefreshButton = QPushButton("Refresh") table_watchertab.layout().addWidget(self.watcherRefreshButton) self.watcherlist.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.watcherlist.customContextMenuRequested.connect( self._watcher_context_menu) self.watcherlist.itemDoubleClicked.connect(self._handle_watcher_click) self.watcherlist.itemChanged.connect(self._handle_watcher_change) self.watcherRefreshButton.clicked.connect(self._fire_watcher_update) func_view.tab_widget.addTab(table_tabs, "Cartprograph") # END TAB VIEW ASSEMBLY main_layout = QVBoxLayout() main_layout.addWidget(main) self.setLayout(main_layout)
def __init__(self, pid=0, db=0, mode=0): super().__init__() self.font = mainfont self.resize(500, self.height()) layout = QGridLayout() self.layout = layout self.buttext = [] self.last_alid = 0 self.listWidget = QListWidget() self.listWidget.itemDoubleClicked.connect(self.doubleClick) self.listWidget.itemSelectionChanged.connect(self.itemChanged) self.dictAlbum = QWidget() self.DICTVIEWERTYPE = type(DictViewer()) self.setFont(mainfont) self.db = db self.pid = pid self.album_ids = db.get_all_albums_ids() print(self.album_ids) if self.album_ids: for alid in self.album_ids: album = db.get_album_data(alid) print(album) self.dictAlbum = DictViewer(album, 1, self.db.albums.invizible_fields, self.db.albums.editable_fields) if album: text = '' text = album['title'] if type(album) == type( {}) and 'title' in album.keys( ) and album['title'] != '' else text item = QListWidgetItem(text) if type(album) == type({}) and 'alid' in album.keys(): item.setWhatsThis(str(album['alid'])) self.listWidget.addItem(item) self.listWidget.setCurrentRow(0) self.mode = mode def openMenu(position): # Создание PopupMenu menu = QMenu() openAction = menu.addAction('Открыть альбом') openEAction = menu.addAction('Открыть события') menu.addSeparator() if mode > 0: #importAction = menu.addAction('Выгрузить альбом') exportAction = menu.addAction('Добавить альбом') renameAction = menu.addAction('Переименовать альбом') #menu.addSeparator() #editAction = menu.addAction('Заменить') menu.addSeparator() delAction = menu.addAction('Удалить альбом') delAllAction = menu.addAction('Удалить все альбомы') menu.addSeparator() else: exportAction, delAction, delAllAction = QAction(), QAction( ), QAction() quitAction = menu.addAction('Выход') action = menu.exec_(self.mapToGlobal(position)) # Привязка событий к Actions if action == openAction: self.doubleClick(self.listWidget.currentItem()) if action == openEAction: item = self.listWidget.currentItem() if item is not None: alid = item.whatsThis() self.events = EventViewer(int(alid), db, 1) self.events.show() if action == exportAction: text, ok = QInputDialog().getText(self, "Название альбома", "Ввкдите название альбома:", QLineEdit.Normal, 'Альбом') if ok: res = self.db.add_album({'imid': -1, 'title': text}) if len(res) == 1: album = res[0] item = QListWidgetItem(text) item.setWhatsThis(str(album['alid'])) self.listWidget.addItem(item) self.album_ids = db.get_all_albums_ids() if action == renameAction: item = self.listWidget.currentItem() if item is not None: alid = item.whatsThis() album = db.get_album_data(alid) text, ok = QInputDialog().getText( self, "Название альбома", "Ввкдите название альбома:", QLineEdit.Normal, album['title']) if ok: album = db.edit_album({ 'alid': int(alid), 'imid': -1, 'title': text }) item.setText(text) if album: album = self.db.get_album_data(alid) # b = layout.takeAt(1) # self.dictAlbum.close() # b.widget().deleteLater() self.dictAlbum = DictViewer( album, 1, self.db.albums.invizible_fields, self.db.albums.editable_fields) self.layout.addWidget(self.dictAlbum, 0, 1) self.album_ids = db.get_all_albums_ids() if action == delAction: res = QMessageBox.question( self, 'ВНИМАНИЕ!!!', "Вы действительно хотите удалить альбом?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if res == QMessageBox.Yes: self.delete_item() if action == delAllAction: res = QMessageBox.question( self, 'ВНИМАНИЕ!!!', "Вы действительно хотите удалить все альбомы?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if res == QMessageBox.Yes: item = self.listWidget.currentItem() while item is not None: self.delete_item() item = self.listWidget.currentItem() self.album_ids = db.get_all_albums_ids() if action == quitAction: self.accept() self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(openMenu) layout.addWidget(self.listWidget, 0, 0) layout.addWidget(self.dictAlbum, 0, 1) self.setLayout(layout)
def _initUI(self): # Create widgets self.objects = PropobjList() self.properties = PropobjList() self.goal = Goal("TODO") self.edit = QPlainTextEdit() self.send = QPushButton("Send to lean") self.undo = QPushButton("Undo") self.deflist = QListWidget() # --> Build deflist for st in self.statements: self.deflist.addItem(st.pretty_name) # --> Link signal self.deflist.itemClicked.connect(self.add_statement_name) # Create layouts goal_layout = QHBoxLayout() main_layout = QVBoxLayout() workspace_layout = QHBoxLayout() propobj_layout = QVBoxLayout() tools_layout = QVBoxLayout() btns_layout = QHBoxLayout() # Create QGroupBox to have titles propobj_gb = QGroupBox('Properties and objects') self.tools_gb = QGroupBox('Lean code') # Put widgets in layouts and group boxes goal_layout.addStretch() goal_layout.addWidget(self.goal) goal_layout.addStretch() # Add space below goal goal_layout.setContentsMargins(0, 10, 0, 30) #LTRB # Build propobj layout propobj_layout.addWidget(self.objects) propobj_layout.addWidget(self.properties) propobj_gb.setLayout(propobj_layout) # Build tools layout btns_layout.addWidget(self.send) btns_layout.addWidget(self.undo) tools_layout.addWidget(self.deflist) tools_layout.addWidget(self.edit) tools_layout.addLayout(btns_layout) self.tools_gb.setLayout(tools_layout) # Build workspace layout workspace_layout.addWidget(propobj_gb) workspace_layout.addWidget(self.tools_gb) # Don't forget me main_layout.addLayout(goal_layout) main_layout.addLayout(workspace_layout) self.setWindowTitle("d∃∀duction") self.setLayout(main_layout) self.show()
def executeProject(self, mainWindow, project_name): if project_name == "SmartGroceries": self.referenceItemsLabels = {} self.itemInHand = None self.itemsInCart = list() self.currentOrderReferenceItems = list() self.currentOrderUserId = 0 self.recommendedItemsButtons = list() self.previousRecommendations = list() self.numberOfGoodRecommendations = 0 self.supportedUsers = range(1, 1001) products = pd.read_csv( os.path.join( os.path.dirname(os.path.dirname( os.path.abspath(__file__))), "projects", "SmartGroceries", "data", "products.csv")) aisles = pd.read_csv( os.path.join( os.path.dirname(os.path.dirname( os.path.abspath(__file__))), "projects", "SmartGroceries", "data", "aisles.csv")) test_data = pd.read_csv( os.path.join( os.path.dirname(os.path.dirname( os.path.abspath(__file__))), "projects", "SmartGroceries", "data", "test_set.csv")) # print(products) # print(aisles) # print(test_data) aisle_name_to_id = { k: v for k, v in zip(aisles.aisle, aisles.aisle_id) } product_name_to_id = { k: v for k, v in zip(products.product_name, products.product_id) } product_id_to_name = { k: v for k, v in zip(products.product_id, products.product_name) } def changeCurrentitem(itemName): if itemName == "": self.itemInHand = None currentItemLabel.setText( f"<b>Select an item from the list or from the recommendations</b>s" ) addToCartButton.setEnabled(False) else: self.itemInHand = product_name_to_id[itemName] currentItemLabel.setText(f"Add <b>{itemName}</b> to Cart") addToCartButton.setEnabled(True) addToCartButton.setFocus() def handleNewOrderButtonClicked(): grouped = test_data.groupby('order_id') while True: order_number = random.sample(grouped.indices.keys(), 1)[0] currentOrder = grouped.get_group(order_number) self.currentOrderReferenceItems = currentOrder.product_id.tolist( ) self.currentOrderUserId = currentOrder.user_id.iloc[0] if len( self.currentOrderReferenceItems ) > 1 and self.currentOrderUserId in self.supportedUsers: break print(self.currentOrderReferenceItems) orderInfo = f"<b>Order ID: </b>{currentOrder.order_id.iloc[0]}<br>" orderInfo += f"<b>User ID: </b>{self.currentOrderUserId} | <b>DOW: </b>{calendar.day_name[currentOrder.order_dow.iloc[0]]} | <b>Hour of Day: </b>{currentOrder.order_hour_of_day.iloc[0]} | <b>Number of Items: </b>{len(self.currentOrderReferenceItems)}" orderInfo += "<br><b>Items in the Reference Order:</b>" for widget in self.referenceItemsLabels.values(): item = referenceItemsLayout.itemAt(0) widget.setVisible(False) referenceItemsLayout.removeItem(item) del item self.referenceItemsLabels.clear() currentCartItems.clear() self.itemsInCart.clear() self.previousRecommendations.clear() self.numberOfGoodRecommendations = 0 updateCurrentRecommendations(list()) for product in self.currentOrderReferenceItems: refItemName = product_id_to_name[product] refItemLabel = QPushButton(refItemName) refItemLabel.setContentsMargins(QMargins(0, 0, 0, 0)) refItemLabel.setStyleSheet("Text-align:left") refItemLabel.setFlat(False) refItemLabel.clicked.connect( partial(changeCurrentitem, refItemName)) self.referenceItemsLabels[product] = refItemLabel orderInfoLabel.setText( f"<b>Order Information</b><br>{orderInfo}") for referenceItemLabel in self.referenceItemsLabels.values(): referenceItemsLayout.addWidget(referenceItemLabel) runAutoButton.setFocus() def handleRunAutomatically(): for referenceItemLabel in self.referenceItemsLabels.values(): referenceItemLabel.click() addToCartButton.click() def updateCurrentRecommendations(recommendations): for widget in self.recommendedItemsButtons: item = recommendationsLayout.itemAt(0) widget.setVisible(False) recommendationsLayout.removeItem(item) del item self.recommendedItemsButtons.clear() for product in recommendations: recItemName = product_id_to_name[product] recItemButton = QPushButton(recItemName) recItemButton.setContentsMargins(QMargins(0, 0, 0, 0)) recItemButton.setStyleSheet("Text-align:left;") if product not in self.currentOrderReferenceItems: recItemButton.setFlat(True) recItemButton.clicked.connect( partial(changeCurrentitem, recItemName)) self.recommendedItemsButtons.append(recItemButton) for recItemButton in self.recommendedItemsButtons: recommendationsLayout.addWidget(recItemButton) if len(recommendations) > 0: currentRecommendationsLabel.setVisible(True) else: currentRecommendationsLabel.setVisible(False) self.previousRecommendations += recommendations def handleAddToCartButtonClicked(): print(self.currentOrderReferenceItems) print(self.itemInHand) if self.itemInHand not in self.currentOrderReferenceItems: QMessageBox( QMessageBox.Critical, "Error adding item to cart", "You can only add items that exists in the reference order" ).exec_() return elif self.itemInHand in self.itemsInCart: QMessageBox(QMessageBox.Critical, "Error adding item to cart", "This item is already in the cart").exec_() return self.referenceItemsLabels[self.itemInHand].setFlat(True) self.itemsInCart.append(self.itemInHand) currentCartItems.addItem(product_id_to_name[self.itemInHand]) if self.itemInHand in self.previousRecommendations: self.numberOfGoodRecommendations += 1 self.referenceItemsLabels[self.itemInHand].setStyleSheet( "Text-align:left; background-color:green;") self.referenceItemsLabels[self.itemInHand].setFlat(False) #update recommendations result = self._sendCommand( "PROCESS_PROJECT_GROUP_2", ";".join([ str(self.currentOrderUserId), ",".join([str(x) for x in self.itemsInCart]), ",".join([ str(x) for x in set(self.previousRecommendations) ]) ])) if result == FAILURE_CODE: self.log( "Processing Failed, error getting recommendations from the RPi" ) return else: try: recommendations = [int(id) for id in result.split(',')] except: recommendations = [] updateCurrentRecommendations(recommendations) if len(self.itemsInCart) == len( self.currentOrderReferenceItems): completionMessage = QMessageBox( QMessageBox.Information, "Order Completed", f"Order Completed with {self.numberOfGoodRecommendations} Good Recommendation(s)\nPress New Order to start a new order" ) if self.numberOfGoodRecommendations == 0: completionMessage.setIconPixmap( QPixmap('images/this_is_fine.jpg')) completionMessage.setWindowIcon(appIcon) completionMessage.exec_() newOrderButton.setFocus() def aisleChanged(): aisle_number = aisle_name_to_id[ selectAisleCombobox.currentText()] products_in_aisle = products[ products.aisle_id == aisle_number].product_name.tolist() selectproductCombobox.clear() selectproductCombobox.addItem("") selectproductCombobox.addItems(products_in_aisle) def itemChanged(): current_item = selectproductCombobox.currentText() changeCurrentitem(current_item) dialog = QDialog(mainWindow) appIcon = QIcon("images/this_is_fine.jpg") dialog.setWindowIcon(appIcon) dialog.setMinimumWidth(600) dialog.setWindowTitle("Smart Groceries Demo") layout = QVBoxLayout() newOrderButton = QPushButton("New Order") orderInfoLabel = QLabel() orderInfoLabel.setTextFormat(Qt.RichText) chooseItemLayout = QHBoxLayout() verticalSpacer = QSpacerItem(20, 20) currentCartItems = QListWidget() layoutWidget = QWidget() referenceItemsLayout = QVBoxLayout(layoutWidget) referenceItemsLayout.setSpacing(0) referenceItemsLayout.setMargin(0) scroll = QScrollArea(dialog) scroll.setWidgetResizable(True) scroll.setMinimumHeight(150) scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) scroll.setWidget(layoutWidget) selectAisleLabel = QLabel("Aisle: ") selectProductLabel = QLabel("Product: ") selectAisleCombobox = QComboBox() selectproductCombobox = QComboBox() chooseItemLayout.addWidget(selectAisleLabel, 0, Qt.AlignLeft) chooseItemLayout.addWidget(selectAisleCombobox, 0, Qt.AlignLeft) chooseItemLayout.addWidget(selectProductLabel, 0, Qt.AlignLeft) chooseItemLayout.addWidget(selectproductCombobox, 0, Qt.AlignLeft) addToCartButton = QPushButton("Add to Cart") currentItemLabel = QLabel() currentItemLabel.setTextFormat(Qt.RichText) if self.itemInHand is None: currentItemLabel.setText( f"<b>Select an item from the list or from the recommendations</b>" ) addToCartButton.setDisabled(True) currentItemLayout = QHBoxLayout() currentItemLayout.addWidget(currentItemLabel) currentItemLayout.addWidget(addToCartButton) recommendationsLayout = QVBoxLayout() recommendationsLayout.setSpacing(0) recommendationsLayout.setMargin(0) newOrderButton.clicked.connect(handleNewOrderButtonClicked) addToCartButton.clicked.connect(handleAddToCartButtonClicked) selectproductCombobox.currentIndexChanged.connect(itemChanged) selectAisleCombobox.currentIndexChanged.connect(aisleChanged) selectAisleCombobox.addItems(aisles.aisle.tolist()) layout.addWidget(newOrderButton) layout.addSpacerItem(verticalSpacer) layout.addWidget(orderInfoLabel) layout.addWidget(scroll) layout.addSpacerItem(verticalSpacer) layout.addLayout(chooseItemLayout) layout.addSpacerItem(verticalSpacer) itemsInTheCartLabel = QLabel("<b>Items in the Cart<b>") layout.addWidget(itemsInTheCartLabel) itemsInTheCartLabel.setTextFormat(Qt.RichText) layout.addWidget(currentCartItems) layout.addSpacerItem(verticalSpacer) currentRecommendationsLabel = QLabel( "<b>Current Recommendations<b>") layout.addWidget(currentRecommendationsLabel) currentRecommendationsLabel.setTextFormat(Qt.RichText) currentRecommendationsLabel.setVisible(False) layout.addLayout(recommendationsLayout) layout.addSpacerItem(verticalSpacer) layout.addLayout(currentItemLayout) runAutoButton = QPushButton("Run and Watch. TRUST ME, IT IS FUN!") layout.addWidget(runAutoButton) runAutoButton.clicked.connect(handleRunAutomatically) dialog.setLayout(layout) handleNewOrderButtonClicked() dialog.exec_() return
def create_table(self): try: data = json.loads(get_domain_data(self.domain_input_field.text())) grid = QGridLayout() #title_label = QLabel() # title_label.repaint() # title_label.setText(f'Showing results for {data["domain"]}') # title_label.setFont(QFont("Times New Roman", 15)) self.title_label2.repaint() self.title_label2.setText(f'Showing results for {data["domain"]}') self.title_label2.setFont(QFont("Times New Roman", 15)) #language_label = QLabel() #language_label.setText(f'Language: {data["language"]}') self.language_label.repaint() self.language_label.setText(f'Language: {data["language"]}') email_label = QLabel() self.email_label.repaint() self.email_label.setText("Emails:") phone_label = QLabel() self.email_label.repaint() self.phone_label.setText("Phone numbers:") country_label = QLabel() self.country_label.repaint() self.country_label.setText(f'Country: {data["country"]}') phone_numbers = QListWidget() emails = QListWidget() self.phone_numbers.clear() self.emails.clear() self.phone_numbers.repaint() self.emails.repaint() if data["phone_numbers"]: self.phone_numbers.addItems(data["phone_numbers"]) else: self.phone_numbers.addItems(["No phone numbers found"]) if data["emails"]: self.emails.addItems(data["emails"]) else: self.emails.addItems(["No emails found"]) last_updated_label = QLabel() self.last_updated_label.repaint() self.last_updated_label.setText( f'Last updated at: {data["updated_at"]}') grid.addWidget(self.title_label2, 0, 0, 1, 2, alignment=Qt.AlignCenter) grid.addWidget(self.language_label, 1, 0) grid.addWidget(self.country_label, 2, 0) grid.addWidget(self.email_label, 3, 0) grid.addWidget(self.phone_label, 3, 1) grid.addWidget(self.emails, 4, 0) grid.addWidget(self.phone_numbers, 4, 1) grid.addWidget(self.last_updated_label, 5, 0, 1, 2, alignment=Qt.AlignRight) self.response_window.setLayout(grid) self.response_window.show() return except json.decoder.JSONDecodeError: data = get_domain_data(self.domain_input_field.text()) message_box = QMessageBox() message_box.setText(data) message_box.setIcon(QMessageBox.Icon.Question) message_box.exec_()
def __init__(self, subject_name): QMainWindow.__init__(self) self.setWindowTitle("Edit Reports: {} - {} {}".format( subject_name, config.APP_NAME, config.APP_VERSION)) self.setMinimumWidth(1200) self.setStyleSheet(config.STYLESHEET) self.subject = could_try_harder.load(subject_name) self.student = {} # Used to keep track of current student self.s_index = 0 self.load_student() # Widgets self.previous_student_button = QPushButton("Previous Student") self.student_name_label = QLabel() self.student_name_label.setProperty("styleClass", "title") self.next_student_button = QPushButton("Next Student") self.intro_comment_label = QLabel("Introductory Comment") self.intro_comment_label.setProperty("styleClass", "heading") self.intro_comment = QLabel() self.comment_bank_label = QLabel("Comment Bank") self.comment_bank_label.setProperty("styleClass", "heading") self.comment_bank_listwidget = QListWidget() self.add_comment_button = QPushButton("Add Selected Comment") self.comment_label = QLabel("Student Comment") self.comment_label.setProperty("styleClass", "heading") self.comment_textedit = QTextEdit() self.cancel_button = QPushButton("Cancel") self.save_button = QPushButton("Save") # Layout self.layout = QVBoxLayout() self.top_layout = QHBoxLayout() self.top_layout.addWidget(self.previous_student_button, 0, Qt.AlignLeft) self.top_layout.addWidget(self.student_name_label, 1, Qt.AlignCenter) self.top_layout.addWidget(self.next_student_button, 0, Qt.AlignRight) self.layout.addLayout(self.top_layout) self.middle_layout = QVBoxLayout() self.middle_layout.addWidget(self.intro_comment_label) self.middle_layout.addWidget(self.intro_comment) self.middle_layout.addWidget(self.comment_bank_label) self.middle_layout.addWidget(self.comment_bank_listwidget) self.middle_layout.addWidget(self.add_comment_button) self.middle_layout.addWidget(self.comment_label) self.middle_layout.addWidget(self.comment_textedit) self.layout.addLayout(self.middle_layout) self.bottom_layout = QHBoxLayout() self.bottom_layout.addWidget(self.cancel_button, 0, Qt.AlignLeft) self.bottom_layout.addWidget(self.save_button, 0, Qt.AlignRight) self.layout.addLayout(self.bottom_layout) # Slots self.previous_student_button.clicked.connect(self.do_previous_student) self.next_student_button.clicked.connect(self.do_next_student) self.comment_bank_listwidget.itemSelectionChanged.connect( self.do_update_comment_bank_selection) self.add_comment_button.clicked.connect(self.do_add_comment) self.cancel_button.clicked.connect(self.do_cancel) self.save_button.clicked.connect(self.do_save) # Initial UI Update self.update_ui() self.widget = QWidget() self.widget.setLayout(self.layout) self.setCentralWidget(self.widget)
def init_ui(self): self.vbox = QVBoxLayout() self.hbox = QHBoxLayout() # Set layout self.setLayout(self.vbox) # Group list vbox3 = QVBoxLayout() group_frame = QGroupBox("Device Groups") group_frame.setLayout(QVBoxLayout()) self.group_list = QListWidget() self.group_list.itemPressed.connect(self.group_selected) group_frame.layout().addWidget(self.group_list) vbox3.addWidget(group_frame) # Sliders self.group_toggle = QCheckBox("Power") self.group_toggle.setEnabled(False) vbox3.addWidget(self.group_toggle) vbox3.addWidget(QLabel("Brightness")) self.group_brightness_slider = QSlider(Qt.Orientation.Horizontal) self.group_brightness_slider.setEnabled(False) self.group_brightness_slider.sliderMoved.connect( self.group_brightness_changed) vbox3.addWidget(self.group_brightness_slider) vbox3.addWidget(QLabel("Color Temperature")) self.group_color_slider = QSlider(Qt.Orientation.Horizontal) self.group_color_slider.setEnabled(False) self.group_color_slider.sliderMoved.connect(self.group_color_changed) vbox3.addWidget(self.group_color_slider) self.hbox.addLayout(vbox3) # moods mood_frame = QGroupBox("Moods") mood_frame.setLayout(QVBoxLayout()) self.mood_list = QListWidget() self.mood_list.itemPressed.connect(self.mood_selected) mood_frame.layout().addWidget(self.mood_list) self.hbox.addWidget(mood_frame) # Devices in group vbox2 = QVBoxLayout() device_frame = QGroupBox("Devices in Group") device_frame.setLayout(QVBoxLayout()) self.device_list = QListWidget() self.device_list.setEnabled(False) self.device_list.itemPressed.connect(self.device_selected) device_frame.layout().addWidget(self.device_list) vbox2.addWidget(device_frame) # Sliders self.device_toggle = QCheckBox("Power") self.device_toggle.setEnabled(False) vbox2.addWidget(self.device_toggle) vbox2.addWidget(QLabel("Brightness")) self.brightness_slider = QSlider(Qt.Orientation.Horizontal) self.brightness_slider.setEnabled(False) self.brightness_slider.sliderMoved.connect(self.brightness_changed) vbox2.addWidget(self.brightness_slider) vbox2.addWidget(QLabel("Color Temperature")) self.color_slider = QSlider(Qt.Orientation.Horizontal) self.color_slider.setEnabled(False) self.color_slider.sliderMoved.connect(self.color_changed) vbox2.addWidget(self.color_slider) self.hbox.addLayout(vbox2) self.vbox.addLayout(self.hbox) # Settings button icon = QIcon(resource_path('icons/settings.png')) self.settings_button = QPushButton(icon, "Settings") self.settings_button.pressed.connect(self.settings_pressed) self.vbox.addWidget(self.settings_button) self.setWindowTitle('TradfriGUI') self.re_init()
def __init__(self, parent=None): super().__init__(parent) self.setMinimumSize(800, 600) self.setWindowTitle(self.tr("Preferences")) self._preferences = Preferences() # # Content self._generalPage = PreferencesGeneralPage() self._generalPage.setZeroMargins() self._generalPage.preferencesChanged.connect( self._onPreferencesChanged) self._documentsPage = PreferencesDocumentsPage() self._documentsPage.setZeroMargins() self._documentsPage.preferencesChanged.connect( self._onPreferencesChanged) self._documentPresetsPage = PreferencesDocumentPresetsPage() self._documentPresetsPage.setZeroMargins() self._documentPresetsPage.preferencesChanged.connect( self._onPreferencesChanged) stackedBox = QStackedWidget() stackedBox.addWidget(self._generalPage) stackedBox.addWidget(self._documentsPage) stackedBox.addWidget(self._documentPresetsPage) stackedBox.setCurrentIndex(0) listBox = QListWidget() listBox.addItem(self._generalPage.title()) listBox.addItem(self._documentsPage.title()) listBox.addItem(self._documentPresetsPage.title()) listBox.setCurrentRow(stackedBox.currentIndex()) listBox.currentRowChanged.connect(stackedBox.setCurrentIndex) preferencesBox = QHBoxLayout() preferencesBox.addWidget(listBox, 1) preferencesBox.addWidget(stackedBox, 3) # Button box buttonBox = QDialogButtonBox(QDialogButtonBox.RestoreDefaults | QDialogButtonBox.Ok | QDialogButtonBox.Apply | QDialogButtonBox.Cancel) self._buttonApply = buttonBox.button(QDialogButtonBox.Apply) buttonBox.button(QDialogButtonBox.RestoreDefaults).clicked.connect( self._onButtonDefaultsClicked) buttonBox.accepted.connect(self._onButtonOkClicked) buttonBox.button(QDialogButtonBox.Apply).clicked.connect( self._onButtonApplyClicked) buttonBox.rejected.connect(self.close) # Main layout layout = QVBoxLayout(self) layout.addLayout(preferencesBox) layout.addWidget(buttonBox) self._updatePreferences() self._buttonApply.setEnabled(False)
import sys from PySide2.QtWidgets import QApplication, QListWidget if __name__ == '__main__': """ Simple QListWidget showing some items """ app = QApplication(sys.argv) # Let's make the QListWidget show this data data = ["ONE", "TWO", "THREE", "FOUR", "FIVE"] list_widget = QListWidget() list_widget.show() list_widget.addItems(data) sys.exit(app.exec_())
def __init__(self): super().__init__(QListWidget()) self._layout.addWidget(self._instance) self.__items = []
def __init__(self): QMainWindow.__init__(self) signal.signal(signal.SIGINT, self.exit_app) self.setWindowTitle("Steam Account Switcher") self.setMinimumSize(300, 200) self.resize(300, 300) # Logo self.switcher_logo = QIcon("logo.png") self.setWindowIcon(self.switcher_logo) if platform.system() == "Windows": # windows taskbar app icon fix import ctypes win_appid = 'github.tommis.steam_account_switcher' ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( win_appid) from steamswitcher import SteamSwitcher self.switcher = SteamSwitcher() self.args = self.switcher.args self.main_widget = QWidget() if self.args.gui or self.switcher.settings.get( "show_on_startup", True) and not self.args.no_gui: self.show() elif self.args.no_gui and self.args.no_tray: self.exit_app() self.menu_bar = self.menuBar() self.file_menu = self.menu_bar.addMenu(_("File")) self.settings_menu = self.menu_bar.addMenu(_("Settings")) self.size_menu = self.menu_bar.addMenu(_("Size")) refresh_action = QAction(_("Refresh"), self) import_action = QAction(_("Import accounts"), self) open_skinsdir_action = QAction(_("Skins dir"), self) about_action = QAction(_("About"), self) exit_action = QAction(_("Exit"), self) refresh_action.triggered.connect(Accounts.steamapi_refresh) import_action.triggered.connect( lambda: DialogImportAccount.import_accounts_dialog(self)) open_skinsdir_action.triggered.connect(self.open_skinsdir) about_action.triggered.connect(lambda: DialogAbout.about_dialog(self)) exit_action.triggered.connect(self.exit_app) refresh_action.setShortcut("F5") exit_action.setShortcut("Ctrl+Q") self.file_menu.addActions([ refresh_action, import_action, open_skinsdir_action, about_action ]) self.file_menu.addSeparator() self.file_menu.addAction(exit_action) set_steamapi_key = QAction(_("Set steamapi key"), self) show_avatars = QAction(_("Show avatars"), self, checkable=True) use_systemtray = QAction(_("Use systemtray"), self, checkable=True) after_login_menu = QMenu(_("After login")) after_login_behaviour_group = QActionGroup(after_login_menu) nothing_behaviour = QAction(_('Nothing'), after_login_behaviour_group, checkable=True, data="nothing") close_behaviour = QAction(_('Close'), after_login_behaviour_group, checkable=True, data="close") minimize_behaviour = QAction(_('Minimize to taskbar'), after_login_behaviour_group, checkable=True, data="minimize") minimize_tray_behaviour = QAction(_('Minimize to tray'), after_login_behaviour_group, checkable=True, data="minimize_tray") after_login_menu.addActions([ nothing_behaviour, close_behaviour, minimize_behaviour, minimize_tray_behaviour ]) behaviour_switcher = { "close": lambda: close_behaviour.setChecked(True), "minimize": lambda: minimize_behaviour.setChecked(True), "minimize_tray": lambda: minimize_tray_behaviour.setChecked(True) } behaviour_switcher.get(self.switcher.settings["behavior_after_login"], lambda: nothing_behaviour.setChecked(True))() after_login_menu.triggered.connect(self.set_after_login_action) self.systemtray(self.main_widget) set_steamapi_key.triggered.connect(lambda: self.steamapi_key_dialog()) show_avatars.triggered.connect(lambda: self.set_show_avatars()) use_systemtray.triggered.connect(lambda: self.set_use_systemtray()) self.settings_menu.addAction(set_steamapi_key) self.settings_menu.addSeparator() self.settings_menu.addActions([show_avatars, use_systemtray]) self.settings_menu.addMenu(after_login_menu) show_avatars.setChecked(self.switcher.settings.get("show_avatars")) use_systemtray.setChecked(self.switcher.settings.get("use_systemtray")) set_size_small = QAction(_("Small"), self) set_size_medium = QAction(_("Medium"), self) set_size_large = QAction(_("Large"), self) set_size_small.triggered.connect(lambda: self.set_size("small")) set_size_medium.triggered.connect(lambda: self.set_size("medium")) set_size_large.triggered.connect(lambda: self.set_size("large")) self.size_menu.addActions( [set_size_small, set_size_medium, set_size_large]) set_size_small.setShortcut("Ctrl+1") set_size_medium.setShortcut("Ctrl+2") set_size_large.setShortcut("Ctrl+3") self.add_button = QPushButton(_("Add account")) self.edit_button = QPushButton(_("Edit account")) self.edit_button.setDisabled(True) self.buttons = QHBoxLayout() self.buttons.addWidget(self.add_button) self.buttons.addWidget(self.edit_button) self.layout = QVBoxLayout() self.main_widget.setLayout(self.layout) self.accounts_list = QListWidget() self.accounts_list.setDragDropMode(QAbstractItemView.InternalMove) self.layout.addWidget(self.accounts_list) self.layout.addLayout(self.buttons) self.layout.setSpacing(10) self.accounts_list.setSpacing(1) self.import_accounts_window = QDialog() self.load_accounts() def edit_button_enabled(): if self.accounts_list.selectedItems(): self.edit_button.setEnabled(True) else: self.edit_button.setEnabled(False) # Signals and Slots self.add_button.clicked.connect(lambda: self.account_dialog(True)) self.edit_button.clicked.connect(lambda: self.account_dialog(False)) self.accounts_list.itemSelectionChanged.connect(edit_button_enabled) self.accounts_list.doubleClicked.connect(lambda: self.steam_login( self.accounts_list.currentIndex().data(5))) self.accounts_list.setContextMenuPolicy(Qt.CustomContextMenu) self.accounts_list.customContextMenuRequested.connect( lambda: RightClickMenu.show_rightclick_menu(self)) #self.accounts_list.layoutChanged.connect(lambda: self.account_reordered) #self.accounts_list.dropEvent(self.dropEvent(QDropEvent)) self.setCentralWidget(self.main_widget) if self.args.no_tray: print("test") elif self.switcher.settings.get("use_systemtray") or self.args.tray: self.tray_icon.show() if self.switcher.first_run or self.args.first_run: self.steamapi_key_dialog() elif not self.switcher.first_run and \ not self.is_valid_steampi_key(self.switcher.settings["steam_api_key"]): self.tray_icon.showMessage("No api key", "Set the steam web api key.", self.switcher_logo)
import sys from PySide2.QtWidgets import QApplication, QListWidget, QListWidgetItem from PySide2.QtCore import Qt if __name__ == '__main__': app = QApplication(sys.argv) lw = QListWidget() for i in range(5): text = f'Item {i}' item = QListWidgetItem(text) item.setCheckState(Qt.Unchecked) lw.addItem(item) lw.setDragDropMode(lw.InternalMove) lw.show() sys.exit(app.exec_())
def initUI(self): # Define buttons # Button to calculate lunar dates self.calculate_lunar = QPushButton('음력날짜 계산', self) self.calculate_lunar.clicked.connect(self.calculate_lunar_date) self.calculate_lunar.setGeometry(20, 260, 130, 35) self.calculate_lunar.setStatusTip('음력 날짜를 계산합니다.') self.calculate_lunar.setShortcut('Return') # Button to save ICS file to local directory self.ICS_save_button = QPushButton('ICS 파일 저장', self) self.ICS_save_button.clicked.connect(self.create_ics_file) self.ICS_save_button.setGeometry(175, 260, 130, 35) self.ICS_save_button.setStatusTip('ICS 파일을 컴퓨터에 저장합니다.') # Define labels # Define label for lunar date to convert lunar_date_text = QLabel(self) lunar_date_text.setText('계산할 음력 날짜') lunar_date_text.setGeometry(25, 15, 240, 25) # Define label for name of event event_name_text = QLabel(self) event_name_text.setText('이벤트 이름 입력') event_name_text.setGeometry(25, 50, 240, 25) # Define label for repetition event_name_text = QLabel(self) event_name_text.setText('몇년치나 할까요?') event_name_text.setGeometry(25, 85, 240, 25) # Define ListWidget to display results self.result_console = QListWidget(self) self.result_console.setGeometry(25, 118, 275, 133) self.result_console.setStatusTip('올해부터 매년 양력날짜가 출력됩니다.') # Define user input areas # Define lunar date to convert to solar date self.user_date_input = QLineEdit(self) self.user_date_input.setGeometry(180, 15, 120, 27) self.user_date_input.setAlignment(Qt.AlignCenter) self.user_date_input.setPlaceholderText('YYYYMMDD') self.user_date_input.setStatusTip('날짜를 YYYYMMDD로 입력하세요.') # Define name of event to use in ICS file self.user_event_name = QLineEdit(self) self.user_event_name.setGeometry(180, 50, 120, 27) self.user_event_name.setAlignment(Qt.AlignCenter) self.user_event_name.setPlaceholderText('이벤트 이름') self.user_event_name.setStatusTip('이벤트 이름을 입력하세요.') # Define number of years to convert self.user_repetition = QLineEdit(self) self.user_repetition.setGeometry(180, 84, 120, 27) self.user_repetition.setAlignment(Qt.AlignCenter) self.user_repetition.setText('10') self.user_repetition.setStatusTip('생성할 햇수를 입력하세요.') # Define size of main window self.setGeometry(200, 320, 325, 330) self.setWindowTitle('날짜') self.statusBar() self.show()
def __init__(self, alid=0, db=0, mode=0): super().__init__() self.font = mainfont self.resize(1000, 600) layout = QGridLayout() self.layout = layout self.buttext = [] self.dictViewer = QWidget() self.linedits = {} self.last_eid = 0 self.photo_ids = 0 self.QLABELM_TYPE = type(QLabelM()) self.listWidget = QListWidget() self.listWidget.itemDoubleClicked.connect(self.doubleClick) self.listWidget.itemSelectionChanged.connect(self.itemChanged) self.setFont(mainfont) self.db = db self.alid = alid self.event_ids = db.get_all_event_ids(self.alid) self.photo_gallery = QLabel() #self.photo_gallery.setAlignment(Qt.AlignCenter) #self.photo_gallery.setPixmap(QPixmap('f.png').scaled(400,400,Qt.KeepAspectRatio)) print(self.event_ids) if self.event_ids: for eid in self.event_ids: event = db.get_event_data(self.alid, eid) print(event) if event: text = '' text = event['event_head'] if type(event) == type( {}) and 'event_head' in event.keys( ) and event['event_head'] != '' else text item = QListWidgetItem(text) if type(event) == type({}) and 'eid' in event.keys(): item.setWhatsThis(str(event['eid'])) self.listWidget.addItem(item) if self.listWidget.count(): self.listWidget.setCurrentRow(0) self.mode = mode def openMenu(position): # Создание PopupMenu menu = QMenu() if mode > 0: addAction = menu.addAction('Добавить событие') #menu.addSeparator() editAction = menu.addAction('Переименовать событие') #menu.addSeparator() delAction = menu.addAction('Удалить событие') delAllAction = menu.addAction('Удалить все события') menu.addSeparator() else: addAction, editAction, delAction, delAllAction = QAction( ), QAction(), QAction(), QAction() quitAction = menu.addAction('Выход') action = menu.exec_(self.mapToGlobal(position)) # Привязка событий к Actions if action == addAction: text, ok = QInputDialog().getText(self, "Название события", "Ввкдите название события:", QLineEdit.Normal, '') if ok: text = 'Новое событие' if text == '' else text res = self.db.add_event({ 'alid': self.alid, 'event_head': text }) if len(res) == 1: event = res[0] text = event['event_head'] if type(event) == type( {} ) and 'event_head' in event.keys( ) and event['event_head'] != '' else 'Новое событие' item = QListWidgetItem(text) item.setWhatsThis(str(event['eid'])) self.listWidget.addItem(item) db.events.save() #self.changed = True self.event_ids = db.get_all_event_ids(self.alid) if action == editAction: eid = self.listWidget.currentItem() if eid is not None: eid = self.listWidget.currentItem().whatsThis() last_name = self.db.get_event_data(self.alid, eid)['event_head'] text, ok = QInputDialog().getText( self, "Название события", "Ввкдите новое название события:", QLineEdit.Normal, str(last_name)) if ok: event = self.db.edit_event({ 'alid': self.alid, 'eid': eid, 'event_head': text }) self.listWidget.currentItem().setText(text) self.db.events.save() if event: event = self.db.get_event_data(alid, eid) #b = layout.takeAt(1) self.dictViewer.close() #b.widget().deleteLater() self.dictViewer = DictViewer( event, 1, self.db.events.invizible_fields, self.db.events.editable_fields) self.layout.addWidget(self.dictViewer, 0, 2) self.event_ids = db.get_all_event_ids(self.alid) if action == delAction: res = QMessageBox.question( self, 'ВНИМАНИЕ!!!', "Вы действительно хотите удалить событие?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if res == QMessageBox.Yes: eid = self.listWidget.currentItem() if eid is not None: eid = self.listWidget.currentItem().whatsThis() self.db.del_event({'alid': self.alid, 'eid': eid}) self.listWidget.takeItem(self.listWidget.currentRow()) self.db.events.save() #self.changed = True self.event_ids = db.get_all_event_ids(self.alid) if action == delAllAction: res = QMessageBox.question( self, 'ВНИМАНИЕ!!!', "Вы действительно хотите удалить все события?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if res == QMessageBox.Yes: if self.db.del_all_events(int(self.alid)): self.listWidget.clear() self.db.events.save() #self.changed = True self.event_ids = db.get_all_event_ids(self.alid) #db.photos.save() if action == quitAction: self.accept() self.listWidget.setContextMenuPolicy(Qt.CustomContextMenu) self.listWidget.customContextMenuRequested.connect(openMenu) layout.addWidget(self.listWidget, 0, 0, 1, 1) layout.addWidget(self.photo_gallery, 0, 1, 1, 1) self.setLayout(layout)
def _init_load_options_tab(self, tab): arch_layout = QHBoxLayout() arch_caption = QLabel(self) arch_caption.setText('Architecture:') arch_caption.setSizePolicy( QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)) arch_layout.addWidget(arch_caption) arch_combo = QComboBox(self) for arch in archinfo.all_arches: addendum = ' (P-code Engine)' if hasattr(arch, 'pcode_arch') else '' arch_combo.addItem( f'{arch.bits}b {arch.name} ({arch.memory_endness[-2:]}){addendum}', str(arch)) index = arch_combo.findData(str(self.arch)) arch_combo.setCurrentIndex(index) arch_layout.addWidget(arch_combo) self.option_widgets['arch'] = arch_combo if self.is_blob: blob_layout = QGridLayout() # load address base_addr_caption = QLabel(self) base_addr_caption.setText('Base Address:') blob_layout.addWidget(base_addr_caption, 1, 0) base_addr = QLineEdit(self) base_addr.setText('0') blob_layout.addWidget(base_addr, 1, 1) self.option_widgets['base_addr'] = base_addr # entry address entry_addr_caption = QLabel(self) entry_addr_caption.setText('Entry Address:') blob_layout.addWidget(entry_addr_caption, 2, 0) entry_addr = QLineEdit(self) entry_addr.setText('0') blob_layout.addWidget(entry_addr, 2, 1) self.option_widgets['entry_addr'] = entry_addr # load debug symbols load_debug_info = QCheckBox() load_debug_info.setText("Load debug information if available") load_debug_info.setChecked(True) self.option_widgets['load_debug_info'] = load_debug_info # auto load libs auto_load_libs = QCheckBox() auto_load_libs.setText( "Automatically load all libraries (slow, not recommended)") auto_load_libs.setChecked(False) self.option_widgets['auto_load_libs'] = auto_load_libs # dependencies list dep_group = QGroupBox("Dependencies") dep_list = QListWidget() self.option_widgets['dep_list'] = dep_list sublayout = QVBoxLayout() sublayout.addWidget(dep_list) dep_group.setLayout(sublayout) layout = QVBoxLayout() if self.is_blob: layout.addLayout(blob_layout) layout.addLayout(arch_layout) layout.addWidget(load_debug_info) layout.addWidget(auto_load_libs) layout.addWidget(dep_group) layout.addStretch(0) frame = QFrame(self) frame.setLayout(layout) tab.addTab(frame, "Loading Options")
def __init__(self): super().__init__() self.streamfile = "" self.streams = {} scriptdir = os.path.dirname(os.path.realpath(__file__)) icon = (scriptdir + os.path.sep + "icon/pyradio.ico") self.setWindowIcon(QtGui.QIcon(icon)) self.setStuff() # Tray self.tray = QSystemTrayIcon() self.tray.setIcon(QtGui.QIcon(icon)) self.tray.activated.connect(self.call) self.icon = QtGui.QIcon() self.icon.addFile(icon) self.setWindowIcon(self.icon) # tray menu self.trayIconMenu = QtWidgets.QMenu() self.quitAction = QtWidgets.QAction("&Quit", triggered=self.close) self.trayIconMenu.addAction(self.quitAction) self.tray.setContextMenu(self.trayIconMenu) self.trayIconMenu.setStyleSheet(open("css/main.css", "r").read()) # Media player self.radio = vlc.MediaPlayer() self.playing = False self.pal = QtGui.QPalette(self.palette()) self.playing_label = QLabel("Stopped") self.label = QLabel("Radios:") self.label.setAlignment(Qt.AlignCenter) self.playing_label.setAlignment(Qt.AlignCenter) self.btn = QPushButton("Play/Stop") self.btn.clicked.connect(self.control) self.list = QListWidget() self.list.itemDoubleClicked.connect(self.control) self.edit = QPushButton("Edit Radios") self.edit.clicked.connect(self.openfile) self.refresh = QPushButton("Refresh") self.refresh.clicked.connect(self.refreshstreams) self.slider = QSlider(QtGui.Qt.Horizontal) self.slider.setMaximum(100) self.slider.setValue(self.volume) self.slider.valueChanged.connect(self.changeVolume) self.setStyleSheet(open("css/main.css", "r").read()) self.refreshstreams() self.current = "" self.buttons = QHBoxLayout() self.layout = QVBoxLayout() self.layout.addWidget(self.label) self.layout.addWidget(self.list) self.layout.addWidget(self.playing_label) self.layout.addWidget(self.slider) self.buttons.addWidget(self.btn) self.buttons.addWidget(self.edit) self.buttons.addWidget(self.refresh) self.layout.addLayout(self.buttons) self.setLayout(self.layout)
def __init__(self, parent=None): # super().__init__() QMainWindow.__init__(self, parent) # const value self.dequeMax = 1000 self.notchCutOff = 60 self.notchQualityFactor = 15 self.lowPassCutOff = 50 self.lowPassOrder = 8 self.samplingRate = 500 self.two_16 = pow(2, 16) self.two_8 = pow(2, 8) self.max_uv = 407 self.two_resolution = 8388607 self.rawGraphFrame = 25 self.update_num = 20 self.timerCounter = 0 # value self.measure_time = 0 self.timerCount = 0 self.printIndex = 0 self.headerCount = 0 self.ch1_1_value = 0 self.ch1_2_value = 0 self.ch1_3_value = 0 self.ch2_1_value = 0 self.ch2_2_value = 0 self.ch2_3_value = 0 self.dataIndex = 0 self.read_state = parsingState.header1 self.ptr = 0 self.ptrFilter = 0 self.ptrTime = 0 self.boolPaused = True # UI self.pgWidget = QWidget() self.setCentralWidget(self.pgWidget) self.setGeometry(QRect(250, 120, 1600, 820)) self.dockingWidget = QDockWidget("개발용 텍스트") self.listWidget = QListWidget() self.listWidget.setFont("Courier") self.dockingWidget.setWidget(self.listWidget) self.dockingWidget.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) self.dockingWidget.setFloating(False) self.addDockWidget(Qt.RightDockWidgetArea, self.dockingWidget) self.vBoxLayout2 = QVBoxLayout(self.pgWidget) self.lLabel = QLabel("블루투스 자동연결을 실행합니다.") self.lLabel.resize(200, 45) self.lLabel.setMaximumHeight(45) self.lLabel.setMinimumHeight(30) self.lLabel.setStyleSheet("color: blue;" "border-style: solid;" "border-width: 1px;" "border-color: #c1f7fe;" "border-radius: 3px;" "background-color: #F7FFFE;") font1 = self.lLabel.font() font1.setPointSize(30) font1.setFamily('Times New Roman') font1.setBold(True) self.lLabel.setFont(font1) self.setWindowTitle('Brint Monitor') self.setWindowIcon(QIcon("./images/brainGreen.png")) # grpah self.ax3 = pg.PlotWidget() self.ax3.setMaximumHeight(340) self.ax3.setMinimumHeight(250) self.ax3.setDownsampling(mode='peak') self.ax3.setTitle("좌측 뇌파", color='w') self.ax3.setClipToView(True) self.ax3.setLabel('left', "뇌파 [uV]", color='white') self.ax3.setLabel('bottom', '시간 [초]', color='white') self.ax3.setRange(xRange=[-10, 0], yRange=[-150, 150]) self.ax4 = pg.PlotWidget() self.ax4.setMaximumHeight(340) self.ax4.setMinimumHeight(250) self.ax4.setDownsampling(mode='peak') self.ax4.setTitle("우측 뇌파", color='w') self.ax4.setClipToView(True) self.ax4.setRange(xRange=[-10, 0], yRange=[-150, 150]) self.ax4.setLabel('left', '뇌파 [uV]', color='white') self.ax4.setLabel('bottom', '시간 [초]', color='white', size=30) self.vBoxLayout2.addWidget(self.ax3) self.vBoxLayout2.addWidget(self.ax4) self.pen = pg.mkPen(color=(255, 0, 0)) self.line3 = self.ax3.plot(pen=self.pen) self.line4 = self.ax4.plot() self.data3 = np.zeros(500) self.data3_x = np.linspace(0, 499, 500) * 0.002 self.data4 = np.zeros(500) self.data4_x = np.linspace(0, 499, 500) * 0.002 self.vBoxLayout2.addWidget(self.lLabel) # database self.fData = deque(np.zeros(self.dequeMax), maxlen=self.dequeMax) self.fData2 = deque(np.zeros(self.dequeMax), maxlen=self.dequeMax) self.buffer = [] self.ch1_int_buffer = [] self.ch2_int_buffer = [] # xml self.user = ET.Element("userName") # bluetooth self.scanner = BleakScanner() self.macAddress = " " self.Read_UUID = "0000fff1-0000-1000-8000-00805f9b34fb" self.Rx_UUID = "a9da6040-0823-4995-94ec-9ce41ca28833" self.Tx_UUID = "a73e9a10-628f-4494-a099-12efaf72258f" self.client = None # "74:F0:7D:C0:52:0C" self.panaxAddress = "PAPA" # "BGX-76DE" self.find_device = False self.noexcept = False self.conBool = False self.autoScan() # event # create actions, file menu action self.save = QAction("&Save", self) self.save.setIcon(QIcon("./images/saveBlue.png")) self.save.setShortcut("Ctrl+S") self.save.setStatusTip("Save .xml file") self.save.triggered.connect(self.save_rx) self.exitAction = QAction("E&xit", self) self.exitAction.setIcon(QIcon("./images/Quit.png")) self.exitAction.setShortcut("Ctrl+Q") self.exitAction.setStatusTip("Exit the application") self.exitAction.triggered.connect(self.close) # control menu action self.start = QAction("S&tart", self) self.start.setIcon(QIcon("./images/recordRed.png")) self.start.setStatusTip("측정을 시작합니다") self.start.triggered.connect(self.startDialog) self.paused = QAction("P&ause", self) self.paused.setIcon(QIcon("./images/pauseBlue.png")) self.paused.setStatusTip("측정을 정지합니다") self.paused.triggered.connect(self.pausedMeasure) self.stop = QAction("&Stop", self) self.stop.setIcon(QIcon("./images/stopBlue.png")) self.stop.setStatusTip("측정을 멈춤니다") self.stop.triggered.connect(self.rx_stop) # view menu action # about self.aboutAction = QAction("&About", self) self.aboutAction.setStatusTip("Show the application's About box") self.aboutAction.triggered.connect(self.about) # createMenus fileMenu = self.menuBar().addMenu("&File") fileMenu.addAction(self.save) # fileMenu.addAction(self.load) fileMenu.addAction(self.exitAction) ControlMenu = self.menuBar().addMenu("&Control") ControlMenu.addAction(self.start) ControlMenu.addAction(self.paused) ControlMenu.addAction(self.stop) helpMenu = self.menuBar().addMenu("&Help") helpMenu.addAction(self.aboutAction) # createToolBar pgToolBar = self.addToolBar("&PG") pgToolBar.setObjectName("PGToolBar") pgToolBar.addAction(self.save) pgToolBar.addSeparator() pgToolBar.addAction(self.start) pgToolBar.addAction(self.paused) pgToolBar.addAction(self.stop) pgToolBar.addSeparator() pgToolBar.addAction(self.aboutAction) pgToolBar2 = self.addToolBar("PG2") pgToolBar2.setObjectName("PGToolBar2") # createStatusBar '''
def createOrderList(self): self.orderList = QListWidget() # Enable drag & drop ordering of items. self.orderList.setDragDropMode(QAbstractItemView.InternalMove)
def __init__(self, motors={}, listOfSequenceHandler=None, sequence=None, modifySequence=False): """ Initializtion of the window for creating a new sequence :param motors: The dictionary of all the motors :param listOfSequenceHandler: The handler of the list of sequence """ QDialog.__init__(self) # Set the window icon appIcon = QIcon(icon) self.setWindowIcon(appIcon) ## Flag if the sequence is a modified one or a new one self.__modifySequence = modifySequence ## The handler of the list of sequence self.__listOfSequenceHandler = listOfSequenceHandler ## The dictionary of all the motors self.__motors = motors ## The new sequence self.__sequence = sequence ## A dictionary of the positions of the new sequence self.__wantedPositions = {} ## The layout of the create sequence window self.__layout = QVBoxLayout(self) ## The widget for the name of the sequenc self.nameEntry = QLineEdit() self.nameEntry.setText(self.__sequence.getName()) ## The label for the widget in which the name of the sequence is written self.__nameLabel = QLabel("Sequence Name") ## The list of the different moves that forms the sequence self.__listOfMoveLabels = QListWidget() moveNumber = 1 for move in self.__sequence.getMoves(): # Set text for the move label labelText = "move " + str(moveNumber) + ": " moveNumber += 1 for motor in self.__motors: labelText += self.__motors[motor].getName() + " " + \ str(move.getMotorPosition(self.__motors[motor].getName())) + ", " label = moveLabel(move, labelText, self.__motors) # insert label to the head of the list self.__listOfMoveLabels.insertItem(0, label) # Put the sliders of the create sequence window in a list ## List of sliders in the create sequence window self.listOfSliders = [] dictOfSlider = dict() for motor in self.__motors: dictOfSlider[motor] = QSlider(Qt.Horizontal) dictOfSlider[motor].setMaximum(4095) dictOfSlider[motor].setValue( self.__motors[motor].getCurrentPosition()) dictOfSlider[motor].sliderMoved.connect( self.__motors[motor].setGoalPosition) self.listOfSliders.append(dictOfSlider[motor]) ## Message to make the user put a name to the sequence self.__noNameMessage = QMessageBox() self.__noNameMessage.setIcon(QMessageBox.Warning) self.__noNameMessage.setWindowIcon(appIcon) self.__noNameMessage.setText( "Please name your sequence before saving it") self.__noNameMessage.setStandardButtons(QMessageBox.Ok) # Renable the create sequence window and closes the message self.__noNameMessage.accepted.connect(self.enableWindow) ## Warning message to make sure the user doen't want to save the sequence self.__warningMessage = QMessageBox() self.__warningMessage.setIcon(QMessageBox.Warning) self.__warningMessage.setWindowIcon(appIcon) self.__warningMessage.setText( "Are you sure you want to close this window? Your sequence will not be saved" ) self.__warningMessage.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) # Close the create sequence window and the message self.__warningMessage.accepted.connect(self.reject) # Renable the create sequence window and closes the message self.__warningMessage.rejected.connect(self.enableWindow) # Set the text for the labels ## Labels for the motors in the UI self.__motorLabels = [] for motorNumber in range(0, len(motors)): self.__motorLabels.append( QLabel("Motor " + str(motorNumber + 1) + " position")) ## Button to add a move to the sequence and procede to the next move self.nextMoveButton = QPushButton("Save Move") ## Buttons to accept or cancel the creation of a sequence self.buttonBox = QDialogButtonBox() self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) # If ok pressed add the sequence to the list self.buttonBox.accepted.connect( lambda: self.addSequenceToList(self.__modifySequence)) # If cancel pressed close the create sequence window self.buttonBox.rejected.connect(self.__warningMessage.exec) # Renable the main window when the create sequence closes self.rejected.connect(self.__listOfSequenceHandler.enableUi) self.accepted.connect(self.__listOfSequenceHandler.enableUi) self.nextMoveButton.clicked.connect(self.addMovetoSequence) self.__listOfMoveLabels.itemDoubleClicked.connect( self.moveDoubleClicked) # Build the vertical layout with the different widgets self.__layout.addWidget(self.__nameLabel) self.__layout.addWidget(self.nameEntry) self.__layout.addWidget(self.__listOfMoveLabels) for motorNumber in range(len(self.__motors)): self.__layout.addWidget(self.__motorLabels[motorNumber]) self.__layout.addWidget(self.listOfSliders[motorNumber]) self.__layout.addWidget(self.nextMoveButton) self.__layout.addWidget(self.buttonBox) # Connect the qwidgetlist to the custom right click menu self.__listOfMoveLabels.setContextMenuPolicy(Qt.CustomContextMenu) self.__listOfMoveLabels.customContextMenuRequested.connect( self.rightClickMenu)
def __init__(self, parent): """ standard constructor: set up class variables, ui elements and layout """ # TODO: split current piece info into separate lineedits for title, album name and length # TODO: make time changeable by clicking next to the slider (not only # by dragging the slider) # TODO: add "about" action to open info dialog in new "help" menu # TODO: add option to loop current piece (?) # TODO: more documentation # TODO: add some "whole piece time remaining" indicator? (complicated) # TODO: implement a playlist of pieces that can be edited and enable # going back to the previous piece (also un- and re-shuffling?) # TODO: implement debug dialog as menu action (if needed) if not isinstance(parent, PiecesMainWindow): raise ValueError('Parent widget must be a PiecesMainWindow') super(PiecesPlayer, self).__init__(parent=parent) # -- declare and setup variables for storing information -- # various data self._set_str = '' # string of currently loaded directory sets self._pieces = {} # {<piece1>: [<files piece1 consists of>], ...} self._playlist = [] # list of keys of self._pieces (determines order) self._shuffled = True # needed for (maybe) reshuffling when looping # doc for self._history: # key: timestamp ('HH:MM:SS'), # value: info_str of piece that started playing at that time self._history = {} self._status = 'Paused' self._current_piece = {'title': '', 'files': [], 'play_next': 0} self._default_volume = 60 # in percent from 0 - 100 self._volume_before_muted = self._default_volume # set to true by self.__event_movement_ended and used by self.__update self._skip_to_next = False # vlc-related variables self._vlc_instance = VLCInstance() self._vlc_mediaplayer = self._vlc_instance.media_player_new() self._vlc_mediaplayer.audio_set_volume(self._default_volume) self._vlc_medium = None self._vlc_events = self._vlc_mediaplayer.event_manager() # -- create and setup ui elements -- # buttons self._btn_play_pause = QPushButton(QIcon(get_icon_path('play')), '') self._btn_previous = QPushButton(QIcon(get_icon_path('previous')), '') self._btn_next = QPushButton(QIcon(get_icon_path('next')), '') self._btn_volume = QPushButton(QIcon(get_icon_path('volume-high')), '') self._btn_loop = QPushButton(QIcon(get_icon_path('loop')), '') self._btn_loop.setCheckable(True) self._btn_play_pause.clicked.connect(self.__action_play_pause) self._btn_previous.clicked.connect(self.__action_previous) self._btn_next.clicked.connect(self.__action_next) self._btn_volume.clicked.connect(self.__action_volume_clicked) # labels self._lbl_current_piece = QLabel('Current piece:') self._lbl_movements = QLabel('Movements:') self._lbl_time_played = QLabel('00:00') self._lbl_time_left = QLabel('-00:00') self._lbl_volume = QLabel('100%') # needed so that everything has the same position # independent of the number of digits of volume self._lbl_volume.setMinimumWidth(55) # sliders self._slider_time = QSlider(Qt.Horizontal) self._slider_volume = QSlider(Qt.Horizontal) self._slider_time.sliderReleased.connect( self.__event_time_changed_by_user) self._slider_volume.valueChanged.connect(self.__event_volume_changed) self._slider_time.setRange(0, 100) self._slider_volume.setRange(0, 100) self._slider_volume.setValue(self._default_volume) self._slider_volume.setMinimumWidth(100) # other elements self._checkbox_loop_playlist = QCheckBox('Loop playlist') self._lineedit_current_piece = QLineEdit() self._lineedit_current_piece.setReadOnly(True) self._lineedit_current_piece.textChanged.connect( self.__event_piece_text_changed) self._listwidget_movements = QListWidget() self._listwidget_movements.itemClicked.connect( self.__event_movement_selected) # -- create layout and insert ui elements-- self._layout = QVBoxLayout(self) # row 0 (name of current piece) self._layout_piece_name = QHBoxLayout() self._layout_piece_name.addWidget(self._lbl_current_piece) self._layout_piece_name.addWidget(self._lineedit_current_piece) self._layout.addLayout(self._layout_piece_name) # rows 1 - 5 (movements of current piece) self._layout.addWidget(self._lbl_movements) self._layout.addWidget(self._listwidget_movements) # row 6 (time) self._layout_time = QHBoxLayout() self._layout_time.addWidget(self._lbl_time_played) self._layout_time.addWidget(self._slider_time) self._layout_time.addWidget(self._lbl_time_left) self._layout.addLayout(self._layout_time) # row 7 (buttons and volume) self._layout_buttons_and_volume = QHBoxLayout() self._layout_buttons_and_volume.addWidget(self._btn_play_pause) self._layout_buttons_and_volume.addWidget(self._btn_previous) self._layout_buttons_and_volume.addWidget(self._btn_next) self._layout_buttons_and_volume.addWidget(self._btn_loop) self._layout_buttons_and_volume.addSpacing(40) # distance between loop and volume buttons: min. 40, but stretchable self._layout_buttons_and_volume.addStretch() self._layout_buttons_and_volume.addWidget(self._btn_volume) self._layout_buttons_and_volume.addWidget(self._slider_volume) self._layout_buttons_and_volume.addWidget(self._lbl_volume) self._layout.addLayout(self._layout_buttons_and_volume) # -- setup hotkeys -- self._KEY_CODES_PLAY_PAUSE = [269025044] self._KEY_CODES_NEXT = [269025047] self._KEY_CODES_PREVIOUS = [269025046] self._keyboard_listener = keyboard.Listener(on_press=self.__on_press) self._keyboard_listener.start() QShortcut(QKeySequence('Space'), self, self.__action_play_pause) # -- various setup -- self._timer = QTimer(self) self._timer.timeout.connect(self.__update) self._timer.start(100) # update every 100ms self.setMinimumWidth(900) self.setMinimumHeight(400) # get directory set(s) input and set up self._pieces # (exec_ means we'll wait for the user input before continuing) DirectorySetChooseDialog(self, self.set_pieces_and_playlist).exec_() # skip to next movement / next piece when current one has ended self._vlc_events.event_attach(VLCEventType.MediaPlayerEndReached, self.__event_movement_ended)
def __init__(self): QMainWindow.__init__(self) self.twitch_client_id = config.TWITCH_API_CLIENT_ID self.twitch_oauth_token = config.TWITCH_API_OAUTH_TOKEN self.twitch_interface = TwitchInterface( api_client_id=config.TWITCH_API_CLIENT_ID, api_oauth_token=config.TWITCH_API_OAUTH_TOKEN, browser_client_id=config.TWITCH_BROWSER_OAUTH_TOKEN, browser_oauth_token=config.TWITCH_BROWSER_OAUTH_TOKEN) self.vlc_interface = VLCInterface(config.VLC_PATH) self.loaded_video = None self.main_layout = QVBoxLayout() self.launch_vlc_btn = QPushButton("Launch VLC") self.info_layout = QGridLayout() self.file_picker_layout = QHBoxLayout() self.file_path_field = QLineEdit() self.file_browser_btn = QPushButton(text="...") self.file_picker_layout.addWidget(self.file_path_field) self.file_picker_layout.addWidget(self.file_browser_btn) vod_filepath_label = QLabel("VOD Filepath") id_twitch_label = QLabel("ID Twitch") created_at_label = QLabel("Created at") duration_label = QLabel("Duration") title_label = QLabel("Title") streamer_label = QLabel("Streamer") self.id_twitch_field = QLineEdit() self.created_at_field = QLineEdit() self.duration_field = QLineEdit() self.title_field = QLineEdit() self.streamer_field = QLineEdit() self.id_twitch_field.setEnabled(False) self.created_at_field.setEnabled(False) self.duration_field.setEnabled(False) self.title_field.setEnabled(False) self.streamer_field.setEnabled(False) self.info_layout.addWidget(vod_filepath_label, 0, 0) self.info_layout.addWidget(id_twitch_label, 1, 0) self.info_layout.addWidget(created_at_label, 2, 0) self.info_layout.addWidget(duration_label, 3, 0) self.info_layout.addWidget(title_label, 4, 0) self.info_layout.addWidget(streamer_label, 5, 0) self.info_layout.addLayout(self.file_picker_layout, 0, 1) self.info_layout.addWidget(self.id_twitch_field, 1, 1) self.info_layout.addWidget(self.created_at_field, 2, 1) self.info_layout.addWidget(self.duration_field, 3, 1) self.info_layout.addWidget(self.title_field, 4, 1) self.info_layout.addWidget(self.streamer_field, 5, 1) self.segments_create_btn = QPushButton("Import Chapters") self.download_thumbnails_btn = QPushButton("Download Thumbnails") self.download_chatlog_btn = QPushButton("Download Chat Log") self.segments_list = QListWidget() self.segments_add_btn = QPushButton(text="+") self.segments_delete_btn = QPushButton(text="-") self.jump_start_btn = QPushButton(text="Jump To Start") self.jump_end_btn = QPushButton(text="Jump To End") self.set_start_btn = QPushButton(text="Set Start") self.set_end_btn = QPushButton(text="Set End") self.split_btn = QPushButton(text="Split") self.process_selected_btn = QPushButton( text="Process Selected Segment") self.process_all_btn = QPushButton(text="Process All Segments") self.jump_layout = QHBoxLayout() self.jump_layout.addWidget(self.jump_start_btn) self.jump_layout.addWidget(self.jump_end_btn) self.set_layout = QHBoxLayout() self.set_layout.addWidget(self.set_start_btn) self.set_layout.addWidget(self.set_end_btn) self.main_layout.addWidget(self.launch_vlc_btn) self.main_layout.addLayout(self.file_picker_layout) self.main_layout.addLayout(self.info_layout) self.main_layout.addWidget(self.segments_create_btn) self.main_layout.addWidget(self.download_thumbnails_btn) self.main_layout.addWidget(self.download_chatlog_btn) self.main_layout.addWidget(self.segments_list) self.main_layout.addWidget(self.segments_add_btn) self.main_layout.addWidget(self.segments_delete_btn) self.main_layout.addLayout(self.jump_layout) self.main_layout.addLayout(self.set_layout) self.main_layout.addWidget(self.split_btn) self.main_layout.addWidget(self.process_selected_btn) self.main_layout.addWidget(self.process_all_btn) self.main_widget = QWidget() self.main_widget.setLayout(self.main_layout) self.setCentralWidget(self.main_widget) self.segments_list.itemDoubleClicked.connect( self.on_segments_list_doubleclick) self.jump_start_btn.clicked.connect(self.jump_to_segment_start) self.jump_end_btn.clicked.connect(self.jump_to_segment_end) self.set_start_btn.clicked.connect(self.set_segment_start) self.set_end_btn.clicked.connect(self.set_segment_end) self.download_thumbnails_btn.clicked.connect(self.download_thumbnails) self.segments_add_btn.clicked.connect(self.create_segment) self.segments_delete_btn.clicked.connect(self.delete_segment) self.split_btn.clicked.connect(self.split_selected_segment) self.launch_vlc_btn.clicked.connect(self.on_launch_vlc) self.file_path_field.returnPressed.connect(self.on_video_url_changed) self.file_browser_btn.clicked.connect(self.on_filebrowse_btn_click) self.process_selected_btn.clicked.connect( self.process_selected_segment) self.process_all_btn.clicked.connect(self.process_all_segments)
def __init__(self, platforms, regions, genres, years): super(FilterDock, self).__init__() # QDockWidget settings self.setAllowedAreas(Qt.BottomDockWidgetArea) self.setFeatures(QDockWidget.DockWidgetClosable) self.setFixedHeight(150) self.setVisible(False) self.setWindowTitle("Filter options") # The selected items for each widget are saved in a set-dictionary self._selections = defaultdict(set) # Widget settings # Platform widgets self._platformLabel = QLabel("Platform") self._platforms = QListWidget() self._platforms.addItems(platforms) self._platforms.setSelectionMode(QAbstractItemView.MultiSelection) self._platforms.setMaximumWidth(200) self._platformVBox = QVBoxLayout() self._platformVBox.addWidget(self._platformLabel, 0) self._platformVBox.addWidget(self._platforms, 1) # Region widgets self._regionLabel = QLabel("Region") self._regions = QListWidget() self._regions.addItems(regions) self._regions.setSelectionMode(QAbstractItemView.MultiSelection) self._regions.setMaximumWidth(200) self._regionVBox = QVBoxLayout() self._regionVBox.addWidget(self._regionLabel, 0) self._regionVBox.addWidget(self._regions, 1) # Genre widgets self._genreLabel = QLabel("Genre") self._genres = QListWidget() self._genres.addItems(genres) self._genres.setSelectionMode(QAbstractItemView.MultiSelection) self._genres.setMaximumWidth(300) self._genreVBox = QVBoxLayout() self._genreVBox.addWidget(self._genreLabel, 0) self._genreVBox.addWidget(self._genres, 1) # Year widgets self._yearLabel = QLabel("Year") self._years = QListWidget() self._years.addItems(years) self._years.setSelectionMode(QAbstractItemView.MultiSelection) self._years.setMaximumWidth(75) self._yearsVbox = QVBoxLayout() self._yearsVbox.addWidget(self._yearLabel, 0) self._yearsVbox.addWidget(self._years, 1) # Inventory widgets self._itemType = {1: "Game", 2: "Console", 3: "Accessory"} self._item = QCheckBox(self._itemType[1]) self._item.setTristate(True) self._item.setCheckState(Qt.PartiallyChecked) self._manual = QCheckBox("Manual") self._manual.setTristate(True) self._manual.setCheckState(Qt.PartiallyChecked) self._box = QCheckBox("Box") self._box.setTristate(True) self._box.setCheckState(Qt.PartiallyChecked) self._inventoryLabelsVBox = QVBoxLayout() self._inventorySelectionsVBox = QVBoxLayout() self._inventorySelectionsVBox.addStretch(3) self._inventorySelectionsVBox.addWidget(self._item, 0) self._inventorySelectionsVBox.addWidget(self._box, 1) self._inventorySelectionsVBox.addWidget(self._manual, 2) self._inventorySelectionsVBox.setAlignment(Qt.AlignLeft) self._haveHBox = QHBoxLayout() self._haveHBox.addLayout(self._inventoryLabelsVBox, 0) self._haveHBox.addLayout(self._inventorySelectionsVBox, 1) self._inventoryGroup = QGroupBox("Inventory") self._inventoryGroup.setMaximumWidth(120) self._inventoryGroup.setLayout(self._haveHBox) # Clear and Apply button widgets self._clearBtn = QPushButton("Clear selection") self._clearBtn.setMaximumSize(self._clearBtn.sizeHint()) self._clearBtn.clicked.connect(self._clearFilters) self._btnHBox = QHBoxLayout() self._btnHBox.setAlignment(Qt.AlignBottom | Qt.AlignRight) self._btnHBox.addWidget(self._clearBtn, 0) # General layout mainHBox = QHBoxLayout() mainHBox.setAlignment(Qt.AlignLeft) mainHBox.addLayout(self._platformVBox, 0) mainHBox.addLayout(self._regionVBox, 0) mainHBox.addLayout(self._genreVBox, 0) mainHBox.addLayout(self._yearsVbox, 0) mainHBox.addWidget(self._inventoryGroup, 0) mainHBox.addLayout(self._btnHBox, 0) mainWidget = QWidget() mainWidget.setLayout(mainHBox) self.setWidget(mainWidget)