def __add_scroll_area__(self, username): sub_frame = QFrame() sub_frame.setContentsMargins(0, 0, 0, 0) sub_frame.setAccessibleName(sub_qframe_styles[0]) sub_frame.setStyleSheet(sub_qframe_styles[1]) user_profile_layout = QHBoxLayout() user_profile_layout.setContentsMargins(0, 0, 0, 0) self.username_icon = QPushButton() self.username_icon.setContentsMargins(0, 0, 0, 0) self.username_icon.setAccessibleName(username_icon_styles[0]) self.username_icon.setStyleSheet(username_icon_styles[1]) icon = QIcon('./assets/user.png') self.username_icon.setIcon(icon) self.username_icon.setIconSize(QSize(40, 40)) self.username_label = QLabel(username) self.username_label.setContentsMargins(0, 0, 0, 0) self.username_label.setAccessibleName(username_label_styles[0]) self.username_label.setStyleSheet(username_label_styles[1]) user_profile_layout.addWidget(self.username_icon) user_profile_layout.addWidget(self.username_label) sub_frame.setLayout(user_profile_layout) self.scroll_layout.addRow(sub_frame)
def manage_menu(self): self.table = QTableWidget() self.table.setStyleSheet("background:#fff") self.table.resize(self.width(), self.height()) self.table.setColumnCount(7) self.table.horizontalHeader().setSectionResizeMode( QHeaderView.ResizeToContents ) self.table.setHorizontalHeaderItem(0, QTableWidgetItem("License Plate")) self.table.setHorizontalHeaderItem(1, QTableWidgetItem("Car Brand")) self.table.setHorizontalHeaderItem(2, QTableWidgetItem("Owner Name")) self.table.setHorizontalHeaderItem(3, QTableWidgetItem("Space ID")) self.table.setHorizontalHeaderItem(4, QTableWidgetItem("Check-in time")) self.table.setHorizontalHeaderItem(5, QTableWidgetItem("Discount")) self.table.setHorizontalHeaderItem(6, QTableWidgetItem("ACTION")) self.refresh_manage_menu() frame = QFrame() layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(self.table) frame.setLayout(layout) frame.setContentsMargins(0, 0, 0, 0) frame.setMaximumWidth(self.width()) frame.setMinimumWidth(self.width()) frame.setMaximumHeight(self.height()) frame.setMinimumHeight(self.height()) self.vertical_3.addWidget(frame) self.vertical_3.addStretch()
def __add_inclued_paths_layout__(self): frame = QFrame() frame.setAccessibleName(inclued_paths_section_style[0]) frame.setStyleSheet(inclued_paths_section_style[1]) frame.setContentsMargins(10, 0, 10, 45) layout = QHBoxLayout() layout.addStretch() frame.setLayout(layout) radio_group = QButtonGroup() radio_button_login_finder = QRadioButton() radio_button_login_finder.setText("Login finder") radio_button_login_finder.setAccessibleName(radio_buttons_style[0]) radio_button_login_finder.setStyleSheet(radio_buttons_style[1]) radio_button_login_finder.setChecked(True) radio_group.addButton(radio_button_login_finder) layout.addWidget(radio_button_login_finder) label = QLabel("Paths") label.setAccessibleName(db_label_style[0]) label.setStyleSheet(db_label_style[1]) label.setContentsMargins(0, 0, 0, 40) layout.addWidget(label) self.v_main_layout.addWidget(frame)
def __add_languages_layout__(self): frame = QFrame() frame.setAccessibleName(inclued_paths_section_style[0]) frame.setStyleSheet(inclued_paths_section_style[1]) frame.setContentsMargins(10, 0, 10, 45) layout = QHBoxLayout() layout.addStretch() button_groups = QButtonGroup() radio_button_php = QRadioButton() radio_button_php.setText("PHP") radio_button_php.setChecked(True) radio_button_php.setAccessibleName(radio_buttons_style[0]) radio_button_php.setStyleSheet(radio_buttons_style[1]) button_groups.addButton(radio_button_php) layout.addWidget(radio_button_php) label = QLabel("Languages") label.setAccessibleName(db_label_style[0]) label.setStyleSheet(db_label_style[1]) label.setContentsMargins(0, 0, 0, 40) layout.addWidget(label) frame.setLayout(layout) self.v_main_layout.addWidget(frame)
def __add_widget__(self): """ this function return a q-frame to use in main layout """ main_frame = QFrame() main_frame.setContentsMargins(0, 10, 0, 0) main_frame.setAccessibleName(main_frame_styles[0]) main_frame.setStyleSheet(main_frame_styles[1]) frame_layout = QVBoxLayout() frame_layout.setContentsMargins(0, 0, 0, 0) frame_layout.setStretch(0, 0) frame_layout.setSpacing(0) self.table_widget = QTableWidget() self.table_widget.setAccessibleName(table_widget_styles[0]) self.table_widget.setStyleSheet(table_widget_styles[1]) self.table_widget.verticalHeader().hide() self.table_widget.setRowCount(0) self.table_widget.setColumnCount(4) self.table_widget.setHorizontalHeaderLabels(["IP Client", "Name", "Port", "System"]) header = self.table_widget.horizontalHeader() header.setAccessibleName(table_header_styles[0]) header.setStyleSheet(table_header_styles[1]) header.setSectionResizeMode(0, QHeaderView.Stretch) header.setSectionResizeMode(1, QHeaderView.Stretch) header.setSectionResizeMode(2, QHeaderView.Stretch) header.setSectionResizeMode(3, QHeaderView.Stretch) frame_layout.addWidget(self.table_widget) main_frame.setLayout(frame_layout) return main_frame
class Page(QWidget): Hiding = QtCore.pyqtSignal(int) Showing = QtCore.pyqtSignal(int) def __init__(self, index: int, page_name: str, parent: QWidget = None): super(Page, self).__init__(parent) self.myIndex: int = index self.setObjectName(page_name) self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.MinimumExpanding) self.setContentsMargins(0, 0, 0, 0) self.hboxlayout = QHBoxLayout(self) self.hboxlayout.setContentsMargins(0, 0, 0, 0) self.hboxlayout.setSpacing(0) self.setLayout(self.hboxlayout) scroll_area = QScrollArea(self) scroll_area.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) scroll_area.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.MinimumExpanding) scroll_area.setFrameShape(QFrame.NoFrame) scroll_area.setFrameShadow(QFrame.Plain) scroll_area.setLineWidth(0) scroll_area.setWidgetResizable(True) scroll_area.installEventFilter(TTScroller(scroll_area)) self.inner_area = QFrame() self.inner_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Ignored) self.inner_area.setProperty("TTPage", QtCore.QVariant(True)) self.inner_area.setContentsMargins(0, 0, 0, 0) self.inner_area.setFrameShape(QFrame.Box) self.inner_area.setLineWidth(0) self.innerLayout = QHBoxLayout(self.inner_area) self.innerLayout.setContentsMargins(0, 0, 0, 0) self.innerLayout.setSpacing(2) self.inner_area.setLayout(self.innerLayout) spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) self.innerLayout.addItem(spacer) scroll_area.setWidget(self.inner_area) self.hboxlayout.addWidget(scroll_area) def add_group(self, name: str): grp = group.Group(name, self.inner_area) self.innerLayout.insertWidget(self.innerLayout.count() - 1, grp) parent_toolbar = tabtoolbar.find_tabtoolbar(self) # type: ignore[attr-defined] if not parent_toolbar: raise Exception("Could not find Parent Tabtoolbar") parent_toolbar.adjust_verticalsize(grp.height()) return grp def hide(self): self.Hiding.emit(self.myIndex) def show(self): self.Showing.emit(self.myIndex)
def horizontalSpacer(): spacer = QFrame() spacer.setFrameShape(QFrame.HLine) spacer.setMaximumHeight(1) spacer.setContentsMargins(0, 0, 0, 0) # spacer.setLineWidth(0) # spacer.setFrameShadow(QFrame.Sunken) spacer.setStyleSheet('color: #434858') return spacer
def draw_boarder(parent, width, height): frame = QFrame() frame.setFixedSize(int(width), int(height)) frame.setFrameShape(QFrame.StyledPanel) frame.setLineWidth(2) frame.setContentsMargins(5, 5, 5, 5) parent.addWidget(frame) return frame
class QShadowFrame(QFrame): def __init__(self, master=None, only_pressed=True): super().__init__(master) self.only_pressed = only_pressed self._be_pressing = False self.build_inter() def build_inter(self): self.init_images() self.main_frame = QFrame() self.main_frame.setAlignment(Qt.AlignCenter) self.main_frame.setSizePolicy(self.sizePolicy()) self.main_frame.setContentsMargins(0, 0, 0, 0) self.left_lb = QLabel(self) self.setContentsMargins(0, 0, 0, 0) def init_images(self): self._left = Image.open(os.path.join(paths.IMAGE, "left_shadow.png")) self._right = left.rotate(180) self._top = Image.open(os.path.join(paths.IMAGE, "top_shadow.png")) self._bottom = top.rotate(180) self.left = self._left.toqpixmap() self.left.fill() self.right = self._right.toqpixmap() self.right.fill() self.top = self._top.toqpixmap() self.top.fill() self.bottom = self._bottom.toqpixmap() self.bottom.fill() self.adjust_size() def adjust_size(self): self.left = self.left.scaled(self.left.width(), self.main_frame.height() + 2 * self.top.height()) self.right = self.right.scaled(self.left.width(), self.left.height()) self.top = self.top.scaled(self.main_frame.width(), self.top.height()) self.bottom = self.bottom.scaled(self.top.width(), self.top.height()) def update_lb(self): self.left_lb.setPixmap(self.left) self.right_lb.setPixmap(self.right) self.top_lb.setPixmap(self.top) self.bottom.setPixmap(self.bottom) def mousePressEvent(self, *args, **kwargs): pass def resizeEvent(self): if self.only_pressed and not self._be_pressing: return self.adjust_size() self.update_lb()
def makeLCDframe(self, lcdUpper, lcd, lcdLower): lcdlayout = QVBoxLayout() lcdlayout.addWidget(lcdUpper, 1) lcdlayout.addWidget(lcd, 5) lcdlayout.addWidget(lcdLower, 1) lcdlayout.setSpacing(0) lcdlayout.setContentsMargins(0, 0, 0, 0) frame = QFrame() frame.setContentsMargins(0, 0, 0, 0) frame.setLayout(lcdlayout) return frame
def _createTopBar(self): topbar = QFrame() topbar.setFixedHeight(50) topbar.setLayout(QHBoxLayout()) topbar.setContentsMargins(10, 0, 0, 0) topbar.setSizePolicy(QSizePolicy(1, 0)) topbar.setObjectName("topbar") self.titleText = QLabel("Produtos") topbar.layout().addWidget(self.titleText) return topbar
def addManagePage(self): data = self.dbOperation.getCurrentVehicle() self.table = QTableWidget() self.table.setStyleSheet("background:#fff") self.table.resize(self.width(), self.height()) self.table.setRowCount(len(data)) self.table.setColumnCount(7) self.table.horizontalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) self.table.setHorizontalHeaderItem(0, QTableWidgetItem("ID")) self.table.setHorizontalHeaderItem(1, QTableWidgetItem("Name")) self.table.setHorizontalHeaderItem(2, QTableWidgetItem("VEHICLE No")) self.table.setHorizontalHeaderItem(3, QTableWidgetItem("MOBILE")) self.table.setHorizontalHeaderItem(4, QTableWidgetItem("VEHICLE TYPE")) self.table.setHorizontalHeaderItem(5, QTableWidgetItem("ENTRY TIME")) self.table.setHorizontalHeaderItem(6, QTableWidgetItem("ACTION")) loop = 0 for smalldata in data: self.table.setItem(loop, 0, QTableWidgetItem(str(smalldata[0]))) self.table.setItem(loop, 1, QTableWidgetItem(str(smalldata[1]))) self.table.setItem(loop, 2, QTableWidgetItem(str(smalldata[6]))) self.table.setItem(loop, 3, QTableWidgetItem(str(smalldata[2]))) self.table.setItem(loop, 4, QTableWidgetItem(str(smalldata[7]))) self.table.setItem(loop, 5, QTableWidgetItem(str(smalldata[3]))) self.button_exit = QPushButton("Exit") self.button_exit.setStyleSheet( "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white" ) self.table.setCellWidget(loop, 6, self.button_exit) self.button_exit.clicked.connect(self.exitCall) loop = loop + 1 frame = QFrame() layout = QVBoxLayout() button = QPushButton("Refresh") button.setStyleSheet( "color:#fff;padding:8px 0px;font-size:20px;background:green;border:1px solid white" ) button.clicked.connect(self.refreshManage) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(button) layout.addWidget(self.table) frame.setLayout(layout) frame.setContentsMargins(0, 0, 0, 0) frame.setMaximumWidth(self.width()) frame.setMinimumWidth(self.width()) frame.setMaximumHeight(self.height()) frame.setMinimumHeight(self.height()) self.vertical_3.addWidget(frame) self.vertical_3.addStretch()
def _init_editor_frame(self): editor_frame = QFrame() editor_frame.setContentsMargins(0, 0, 0, 0) editor_layout = QHBoxLayout() editor_layout.setContentsMargins(0, 0, 0, 0) self._editor = CodeEditor() self._editor.controlReturnKeyPressed.connect( self.controlReturnKeyPressedEvent.emit) self._editor.escapeKeyPressed.connect(self.escapeKeyPressedEvent.emit) editor_layout.addWidget(self._editor) editor_frame.setLayout(editor_layout) return editor_frame
def __init__(self, name: str, parent: QWidget): super(Group, self).__init__(parent) # self.setFrameShape(QFrame.NoFrame) # self.setLineWidth(0) self.setContentsMargins(0, 0, 0, 0) self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) seperator_layout = QHBoxLayout(self) seperator_layout.setContentsMargins(0, 0, 0, 0) seperator_layout.setSpacing(0) seperator_layout.setDirection(QBoxLayout.LeftToRight) self.setLayout(seperator_layout) outer_layout = QVBoxLayout() outer_layout.setContentsMargins(0, 0, 0, 0) outer_layout.setSpacing(0) outer_layout.setDirection(QBoxLayout.TopToBottom) seperator_layout.addLayout(outer_layout) seperator_layout.addWidget(self.create_separator()) inner_frame = QFrame(self) inner_frame.setFrameShape(QFrame.NoFrame) inner_frame.setLineWidth(0) inner_frame.setContentsMargins(0, 0, 0, 0) inner_frame.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Minimum) self.inner_layout = QHBoxLayout(inner_frame) self.inner_layout.setContentsMargins(2, 4, 2, 0) self.inner_layout.setSpacing(4) self.inner_layout.setDirection(QBoxLayout.LeftToRight) inner_frame.setLayout(self.inner_layout) outer_layout.addWidget(inner_frame) self.group_name = QLabel(name, self) self.group_name.setProperty("TTGroupName", QtCore.QVariant(True)) self.group_name.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) self.group_name.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter # type: ignore ) self.group_name.adjustSize() outer_layout.addWidget(self.group_name) parent_tabtoolbar = tabtoolbar.find_tabtoolbar(self) if not parent_tabtoolbar: raise Exception("Could not find Parent Tabtoolbar") group_maxheight = parent_tabtoolbar.group_maxheight rowcount = parent_tabtoolbar.rowcount() height = group_maxheight + self.group_name.height() + rowcount - 1 self.setMinimumHeight(height) self.setMaximumHeight(height)
def addTitle(self, title): label = QLabel(title) label.setContentsMargins(16, 4, 16, 4) vbox = VBoxLayout() vbox.addWidget(label) frame = QFrame() frame.setFrameShape(QFrame.StyledPanel) frame.setContentsMargins(4, 4, 4, 4) frame.setLayout(vbox) self.vbox.addWidget(frame)
def new_event(self, event): oneEventFrame = QFrame() heightSlot = event.duration * self.oneMinSlot #oneEventFrame.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)) #oneEventFrame.resize(Ui_MainWindow.widthSlot, heightSlot) oneEventFrame.setFixedHeight(heightSlot) oneEventFrame.setContentsMargins(0, 0, 0, 0) oneEventFrame.setStyleSheet("background-color: rgb(2, 116, 205); border-bottom: 1px solid rgb(128, 128, 255);") #color = QtGui.QColor(233, 10, 150) oneEventLayout = QHBoxLayout() oneEventLayout.setContentsMargins(0, 0, 0, 0) oneEventLayout.setObjectName("oneEventLayout") oneEventFrame.setLayout(oneEventLayout) oneEventLayout.setSpacing(0) labelNameEvent = QLabel() labelNameEvent.setToolTipDuration(10) labelNameEvent.setObjectName("labelNameEvent") #labelNameEvent.setText(event.time + " " + event.name) labelNameEvent.setAutoFillBackground(True) labelNameEvent.setFixedHeight(heightSlot) if event.link is not None: link = f'<a href="{event.link}">event.time + " " + event.name</a>' else: link = event.time + " " + event.name print(link) labelNameEvent.setText(link) labelNameEvent.setOpenExternalLinks(True) labelNameEvent.setStyleSheet("color: white;") sheet = "a { text-decoration: underline; color: white }" #labelNameEvent.setDefaultStyleSheet(sheet) #labelNameEvent.resize(Ui_MainWindow.widthSlot, oneEventFrame.height()) oneEventLayout.addWidget(labelNameEvent) print(event.link) if event.link is not None: labelLinkImg = QLabel(link) labelLinkImg.setOpenExternalLinks(True) labelLinkImg.setMouseTracking(False) labelLinkImg.setLayoutDirection(QtCore.Qt.RightToLeft) labelLinkImg.setText("") labelLinkImg.setPixmap(QtGui.QPixmap("linkk.png")) labelLinkImg.setCursor(QCursor(QtCore.Qt.PointingHandCursor)) #self.label_img.setOpenExternalLinks(True) #self.label_img.setObjectName("label_img") oneEventLayout.addWidget(labelLinkImg) return oneEventFrame
def set_new_pdf(self, files): """ Adds the files from the list onto the UI by creating the necessary buttons, layouts and Frames :param files: List of pdf names in the form of folder/filename.pdf :return: Nothing """ for file in files: self.pdf_files.append(file) # This layout is used to place the up/down button on top of each other up_down_layout = QVBoxLayout() up_button = QPushButton("\u2303") up_button.setFixedSize(self.move_button_size) down_button = QPushButton("\u2304") down_button.setFixedSize(self.move_button_size) up_button.clicked.connect(self.move_up) down_button.clicked.connect(self.move_down) self.up_button_list.append(up_button) self.down_button_list.append(down_button) up_down_layout.addWidget(up_button) up_down_layout.addWidget(down_button) up_down_layout.setSpacing(1) # The foldername isn't displayed on the label pdf_name = os.path.split(file)[1] label = QLabel(pdf_name) main_layout = QHBoxLayout() main_layout.setContentsMargins(0, 0, 0, 0) width = self.widgets.MERGE_LeftLayout.geometry().width() height = self.move_button_size.height() * 2 + 5 new_frame = QFrame() new_frame.setContentsMargins(0, 0, 0, 0) new_frame.setFixedSize(QSize(width, height)) new_frame.setLayout(main_layout) new_frame.setFrameStyle(QFrame.WinPanel | QFrame.Plain) self.frame_list.append(new_frame) main_layout.addLayout(up_down_layout) main_layout.addWidget(label) # because of spacer at the bottom self.widgets.MERGE_PDFsVLayout.insertWidget( len(self.up_button_list) - 1, new_frame)
def __init__(self, item, item_list, viewer): super().__init__(item, viewer) self.setObjectName("LootWidget") self.item = item self.item_list = item_list self.viewer = viewer name_frame = QFrame() name_frame.setContentsMargins(0, 0, 0, 0) name_frame.setLayout(QHBoxLayout()) self.name_label = NameLabel(item.name) self.name_label.setObjectName("LootWidget_name") name_frame.layout().addWidget(self.name_label) name_frame.layout().addStretch(1) self.reroll_button = RerollButton() self.reroll_button.clicked.connect(self.reroll_item) self.button_bar = QFrame() self.button_bar.setContentsMargins(0, 0, 0, 0) self.button_bar.setLayout(QHBoxLayout()) self.button_bar.setHidden(True) self.type_dropdown = QComboBox() self.type_dropdown.addItem("Any") self.type_dropdown.addItem("Weapon") self.type_dropdown.addItem("Armor") self.type_dropdown.addItems(self.item_list.unique_attr("type")) if self.item.type in ["Staff", "Melee", "Ranged", "Rod"]: self.type_dropdown.setCurrentText("Weapon") elif self.item.type in ["Light Armor, Medium Armor, Heavy Armor"]: self.type_dropdown.setCurrentText("Armor") else: self.type_dropdown.setCurrentText(self.item.type) self.rarity_dropdown = QComboBox() self.rarity_dropdown.addItems(self.item_list.unique_attr("rarity")) self.rarity_dropdown.setCurrentText(self.item.rarity) self.button_bar.layout().addWidget(self.type_dropdown) self.button_bar.layout().addWidget(self.rarity_dropdown) self.button_bar.layout().addStretch(1) self.button_bar.layout().addWidget(self.reroll_button) self.setLayout(QVBoxLayout()) QSpacerItem(50, 10) self.layout().setContentsMargins(20, 5, 10, 10) self.layout().addWidget(name_frame) self.layout().addWidget(self.button_bar) self.setFrameShape(QFrame.Box)
def __add_widget__(self): main_frame = QFrame() main_frame.setContentsMargins(0, 0, 0, 0) main_frame.setAccessibleName(main_frame_styles[0]) main_frame.setStyleSheet(main_frame_styles[1]) frame_layout = QHBoxLayout() frame_layout.setContentsMargins(0, 0, 0, 0) frame_layout.setStretch(0, 0) frame_layout.setSpacing(0) main_frame.setLayout(frame_layout) return main_frame
def __add_widget__(self): main_frame = QFrame() main_frame.setContentsMargins(0, 0, 0, 0) main_frame.setAccessibleName(main_frame_styles[0]) main_frame.setStyleSheet(main_frame_styles[1]) frame_layout = QHBoxLayout() frame_layout.setContentsMargins(0, 0, 0, 0) frame_layout.setStretch(0, 0) frame_layout.setSpacing(0) text_input = QTextEdit() text_input.setPlaceholderText("Type something...") # text_input.setAlignment(Qt.AlignCenter) text_input.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) text_input.setAlignment(Qt.AlignVCenter) text_input.setAccessibleName(input_text_styles[0]) text_input.setStyleSheet(input_text_styles[1]) attach_icon = QPushButton() attach_icon.setAccessibleName(attach_icon_styles[0]) attach_icon.setStyleSheet(attach_icon_styles[1]) icon_attach = QIcon('./assets/clip.png') attach_icon.setIcon(icon_attach) attach_icon.setIconSize(QSize(25, 25)) sticker_icon = QPushButton() sticker_icon.setAccessibleName(sticker_icon_styles[0]) sticker_icon.setStyleSheet(sticker_icon_styles[1]) icon_sticker = QIcon('./assets/smile.png') sticker_icon.setIcon(icon_sticker) sticker_icon.setIconSize(QSize(25, 25)) send_icon = QPushButton() send_icon.setAccessibleName(send_icon_styles[0]) send_icon.setStyleSheet(send_icon_styles[1]) icon_send = QIcon('./assets/paper-plane.png') send_icon.setIcon(icon_send) send_icon.setIconSize(QSize(25, 25)) frame_layout.addWidget(text_input) frame_layout.addWidget(attach_icon) frame_layout.addWidget(sticker_icon) frame_layout.addWidget(send_icon) main_frame.setLayout(frame_layout) return main_frame
def __add_widget__(self): main_frame = QFrame() main_frame.setContentsMargins(0, 0, 0, 0) main_frame.setAccessibleName(main_frame_styles[0]) main_frame.setStyleSheet(main_frame_styles[1]) frame_layout = QHBoxLayout() frame_layout.setContentsMargins(0, 0, 0, 0) frame_layout.setStretch(0, 0) frame_layout.setSpacing(0) user_icon = QPushButton() user_icon.setAccessibleName(user_icon_styles[0]) user_icon.setStyleSheet(user_icon_styles[1]) icon = QIcon('./assets/user.png') user_icon.setIcon(icon) user_icon.setIconSize(QSize(60, 60)) user_label = QLabel('Username') user_label.setFrameShape(QFrame.NoFrame) user_label.setAccessibleName(user_label_styles[0]) user_label.setStyleSheet(user_label_styles[1]) call_icon = QPushButton() call_icon.setAccessibleName(call_icon_styles[0]) call_icon.setStyleSheet(call_icon_styles[1]) icon_call = QIcon('./assets/Phone-icon.png') call_icon.setIcon(icon_call) call_icon.setIconSize(QSize(25, 25)) video_icon = QPushButton() video_icon.setAccessibleName(video_icon_styles[0]) video_icon.setStyleSheet(video_icon_styles[1]) icon_video = QIcon('./assets/communications.png') video_icon.setIcon(icon_video) video_icon.setIconSize(QSize(25, 25)) frame_layout.addWidget(user_icon) frame_layout.addWidget(user_label) frame_layout.addWidget(call_icon) frame_layout.addWidget(video_icon) main_frame.setLayout(frame_layout) return main_frame
def setup_ui(self, containers: QFrame, page_name: str): page_containers = QFrame(containers) page_containers.setFrameShape(QFrame.StyledPanel) page_containers.setFrameShadow(QFrame.Raised) page_containers.setObjectName("central_page_maker") vl_page_containers = QVBoxLayout(page_containers) vl_page_containers.setObjectName("vl_page_containers") scroll_area_page_containers = QScrollArea(page_containers) scroll_area_page_containers.setObjectName( CentralPageMakerStyle.scroll_area_page_containers_style[0]) scroll_area_page_containers.setStyleSheet( CentralPageMakerStyle.scroll_area_page_containers_style[1]) scroll_area_page_containers.setWidgetResizable(True) scroll_area_page_containers.setLayoutDirection(Qt.RightToLeft) scroll_area_contents_page_containers = QFrame() scroll_area_contents_page_containers.setObjectName( "scroll_area_contents_page_containers") scroll_area_contents_page_containers.setContentsMargins(45, 45, 45, 45) form_base_layout = QFormLayout(scroll_area_contents_page_containers) form_base_layout.setContentsMargins(0, 0, 0, 0) form_base_layout.setHorizontalSpacing(0) form_base_layout.setVerticalSpacing(100) form_base_layout.setObjectName("form_base_layout") if page_name.split('-')[0] == "[TOOL]": from ...pages.tools.tool_page_maker import ToolPageMaker ToolPageMaker( self, form_base_layout, scroll_area_contents_page_containers, tool_box=page_name.split('-')[2].split(' ')[0]).make_page() # lbl_title lbl_title = QLabel(scroll_area_contents_page_containers) lbl_title.setGeometry(QRect(441, 10, 281, 16)) lbl_title.setObjectName(CentralPageMakerStyle.lbl_title_style[0]) lbl_title.setStyleSheet(CentralPageMakerStyle.lbl_title_style[1]) vl_page_containers.addWidget(scroll_area_page_containers) scroll_area_page_containers.setWidget( scroll_area_contents_page_containers) return scroll_area_page_containers
class ScrollArea(QScrollArea): """包括一个ScrollArea做主体承载一个QFrame的基础类。""" scrollDown = pyqtSignal() def __init__(self, parent=None): super(ScrollArea, self).__init__() self.parent = parent self.frame = QFrame() self.frame.setContentsMargins(0, 0, 0, 0) self.frame.setObjectName('frame') # 用于发出scroll滑到最底部的信号。 self.verticalScrollBar().valueChanged.connect(self.sliderPostionEvent) self.setWidgetResizable(True) self.setWidget(self.frame)#必须设置Widget def noInternet(self): # 设置没有网络的提示。 self.noInternetLayout = QGridLayout() self.setLayout(self.mainLayout) self.Tip = QLabel("您已进入没有网络的异次元,打破次元壁 →", self) self.TipButton = QPushButton("打破次元壁", self) self.TipButton.setObjectName("TipButton") self.TipLayout = QHBoxLayout() self.TipLayout.addWidget(self.Tip) self.TipLayout.addWidget(self.TipButton) # self.indexAllSings.setLayout(self.TipLayout) self.noInternetLayout.addLayout(self.TipLayout, 0, 0, Qt.AlignCenter|Qt.AlignTop) self.frame.setLayout(self.noInternetLayout) def sliderPostionEvent(self): if self.verticalScrollBar().value() == self.verticalScrollBar().maximum(): self.scrollDown.emit() def maximumValue(self): return self.verticalScrollBar().maximum()
def set_paragraph(self, h2='', h3='', text='', img=None): if h2 != '': lbl_h2 = QLabel(h2, self.inner) fnt = lbl_h2.font() fnt.setPointSize(self.H2_FONT_SIZE) lbl_h2.setFont(fnt) lbl_h2.setFixedHeight(self.H2_HEIGHT) lbl_h2.setAlignment(Qt.AlignBottom) lbl_h2.setMargin(self.SIDE_MARGIN) self.vbox.addWidget(lbl_h2) frm = QFrame(self.inner) frm.setFrameShape(QFrame.HLine) frm.setContentsMargins(self.SIDE_MARGIN, 0, self.SIDE_MARGIN, 0) plt = frm.palette() plt.setColor(QPalette.WindowText, Qt.darkGray) frm.setPalette(plt) self.vbox.addWidget(frm) if text != '': lbl_txt = QLabel(text, self.inner) lbl_txt.setWordWrap(True) fnt = lbl_txt.font() fnt.setPointSize(self.TEXT_FONT_SIZE) lbl_txt.setFont(fnt) lbl_txt.setMargin(self.SIDE_MARGIN) self.vbox.addWidget(lbl_txt) if img is not None: if self.params.lang == 'en': img += '_en.png' else: img += '_jp.png' pixmap = QPixmap(img) if not pixmap.isNull(): lbl_img = QLabel(self.inner) lbl_img.setPixmap(pixmap) self.lbl_img_list.append(lbl_img) self.pixmap_list.append(pixmap.scaledToWidth(pixmap.width())) self.vbox.addWidget(lbl_img) self.inner.setLayout(self.vbox)
def _init_search_field(self): search_field_frame = QFrame() search_field_layout = QHBoxLayout() search_field_layout.addWidget(VSep(self)) self._search_field = SearchField(self) self._search_field.setIcon(qtawesome.icon("fa.search")) self._search_field.setPlaceholderText("Search codec") self._search_field.textChanged.connect(lambda text: {}) search_field_layout.addWidget(self._search_field) self._search_field_button = QToolButton() self._search_field_button.setIcon(qtawesome.icon("fa.arrow-circle-right")) self._search_field_button.setContentsMargins(0, 0, 0, 0) search_field_layout.addWidget(self._search_field_button) search_field_frame.setLayout(search_field_layout) search_field_frame.setContentsMargins(5, 0, 5, 5) # left, top, right, bottom search_field_frame.layout().setContentsMargins(0, 0, 0, 0) return search_field_frame
def __add_widget__(self): """ this function return a q-frame to use in main layout """ main_frame = QFrame() main_frame.setContentsMargins(0, 0, 0, 0) main_frame.setAccessibleName(main_frame_styles[0]) main_frame.setStyleSheet(main_frame_styles[1]) frame_layout = QHBoxLayout() frame_layout.setContentsMargins(0, 0, 0, 0) frame_layout.setStretch(0, 0) frame_layout.setSpacing(0) self.q_text_edit = QTextEdit() self.q_text_edit.setAccessibleName(q_text_edit_styles[0]) self.q_text_edit.setReadOnly(True) self.q_text_edit.setStyleSheet(q_text_edit_styles[1]) frame_layout.addWidget(self.q_text_edit) main_frame.setLayout(frame_layout) return main_frame
def construct_innerframe(self, spacing: int) -> QFrame: parent_toolbar = tabtoolbar.find_tabtoolbar(self) if not parent_toolbar: raise Exception("Could not find Parent Tabtoolbar") group_maxheight = parent_toolbar.group_maxheight rowcount = parent_toolbar.rowcount() frame = QFrame(self) frame.setFrameShape(QFrame.NoFrame) frame.setLineWidth(0) frame.setContentsMargins(0, 0, 0, 0) policy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred) policy.setHorizontalStretch(0) policy.setVerticalStretch(1) frame.setSizePolicy(policy) frame.setMaximumHeight(group_maxheight / rowcount) llayout = QHBoxLayout(frame) # layout.setMargin(0) llayout.setContentsMargins(0, 0, 0, 0) llayout.setSpacing(spacing) llayout.setDirection(QBoxLayout.LeftToRight) frame.setLayout(llayout) spacer = QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding) llayout.addItem(spacer) return frame
class NetworkPanel(QWidget): def __init__(self, parent): super().__init__() self.initUI() def initUI(self): self.centralFrame = QFrame(self) self.centralFrame.setFrameShape(QFrame.NoFrame) self.centralFrame.setFrameShadow(QFrame.Raised) self.centralFrame.setContentsMargins(0, 0, 0, 0) self.centralFrame.setStyleSheet("background: black;" "border: 1px solid gray;" "border-radius: 5px;") self.contentFrame = QFrame(self.centralFrame) self.contentFrame.setFrameShape(QFrame.NoFrame) self.contentFrame.setFrameShadow(QFrame.Raised) self.contentFrame.setContentsMargins(10, 10, 10, 10) self.contentFrame.setStyleSheet("border: none;") self.networkFrame = QFrame(self.contentFrame) self.networkFrame.setFrameShape(QFrame.NoFrame) self.networkFrame.setFrameShadow(QFrame.Raised) self.networkFrame.setContentsMargins(0, 0, 0, 0) self.networkFrame.setStyleSheet("border: none;") self.controlFrame = QFrame(self.networkFrame) self.controlFrame.setFrameShape(QFrame.NoFrame) self.controlFrame.setFrameShadow(QFrame.Raised) self.controlFrame.setContentsMargins(0, 0, 0, 0) self.controlFrame.setStyleSheet("border: none;") self.controlLabelFrame = QFrame(self.controlFrame) self.controlLabelFrame.setFrameShape(QFrame.NoFrame) self.controlLabelFrame.setFrameShadow(QFrame.Raised) self.controlLabelFrame.setContentsMargins(0, 0, 0, 0) self.controlLabelFrame.setStyleSheet("border: none;") self.controlLabel = Label(self.controlLabelFrame) self.controlLabel.setText("Network Controls") self.controlLabelLayout = QHBoxLayout(self.controlLabelFrame) self.controlLabelLayout.addWidget(self.controlLabel) self.controlLabelLayout.setContentsMargins(0, 0, 0, 0) self.controlLabelLayout.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) self.controlBtnsFrame = QFrame(self.controlFrame) self.controlBtnsFrame.setFrameShape(QFrame.NoFrame) self.controlBtnsFrame.setFrameShadow(QFrame.Raised) self.controlBtnsFrame.setContentsMargins(0, 0, 0, 0) self.controlBtnsFrame.setStyleSheet( "background-color: rgb(27, 29, 35);" "border: 1px solid gray;" "border-radius: 5px;" ) self.connectBtn = PushButton(self.controlBtnsFrame) self.connectBtn.setIcon(QIcon(resource_path("icons/cil-media-play"))) self.connectBtn.setIconSize(QSize(50, 50)) self.connectBtn.setToolTip("Scan for ANT+ devices") self.disconnectBtn = PushButton(self.controlBtnsFrame) self.disconnectBtn.setIcon(QIcon(resource_path("icons/cil-media-stop"))) self.disconnectBtn.setIconSize(QSize(50, 50)) self.disconnectBtn.setToolTip("Stop ANT+ connection") self.resetBtn = PushButton(self.controlBtnsFrame) self.resetBtn.setIcon(QIcon(resource_path("icons/cil-reload"))) self.resetBtn.setIconSize(QSize(50, 50)) self.resetBtn.setToolTip("Reset ANT+ session") self.controlBtnsLayout = QHBoxLayout(self.controlBtnsFrame) self.controlBtnsLayout.addWidget(self.connectBtn, alignment=Qt.AlignRight) self.controlBtnsLayout.addWidget(self.disconnectBtn, alignment=Qt.AlignRight) self.controlBtnsLayout.addWidget(self.resetBtn, alignment=Qt.AlignRight) self.controlBtnsLayout.setContentsMargins(5, 0, 0, 0) self.controlBtnsLayout.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) self.controlLayout = QVBoxLayout(self.controlFrame) self.controlLayout.addWidget(self.controlLabelFrame) self.controlLayout.addWidget(self.controlBtnsFrame) self.controlLayout.setContentsMargins(0, 0, 0, 0) self.devicesFrame = QFrame(self.contentFrame) self.devicesFrame.setFrameShape(QFrame.NoFrame) self.devicesFrame.setFrameShadow(QFrame.Raised) self.devicesFrame.setContentsMargins(0, 0, 0, 0) self.devicesFrame.setStyleSheet("border: none;") self.devicesListBox = ListBox(self.devicesFrame) self.devicesListBox.setStyleSheet( "background-color: rgb(27, 29, 35);" "border: 1px solid gray;" "border-radius: 5px;" ) self.devicesLabelFrame = QFrame(self.devicesFrame) self.devicesLabelFrame.setFrameShape(QFrame.NoFrame) self.devicesLabelFrame.setFrameShadow(QFrame.Raised) self.devicesLabelFrame.setContentsMargins(0, 0, 0, 0) self.devicesLabelFrame.setStyleSheet("border: none;") self.devicesLabel = Label(self.devicesLabelFrame) self.devicesLabel.setText("Broadcasting Devices") self.devicesLabel.setStyleSheet("border: none;") self.devicesLabelLayout = QHBoxLayout(self.devicesLabelFrame) self.devicesLabelLayout.addWidget(self.devicesLabel, alignment=Qt.AlignLeft) self.devicesLabelLayout.setContentsMargins(0, 0, 0, 0) self.devicesLabelLayout.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) self.devicesLayout = QVBoxLayout(self.devicesFrame) self.devicesLayout.addWidget(self.devicesLabelFrame) self.devicesLayout.addWidget(self.devicesListBox) self.devicesLayout.setContentsMargins(0, 0, 0, 0) self.devicesLayout.setAlignment(Qt.AlignTop | Qt.AlignLeft) self.sessionFrame = QFrame(self.contentFrame) self.sessionFrame.setFrameShape(QFrame.NoFrame) self.sessionFrame.setFrameShadow(QFrame.Raised) self.sessionFrame.setContentsMargins(0, 0, 0, 0) self.sessionFrame.setStyleSheet("border: none;") self.sessionLabelFrame = QFrame(self.sessionFrame) self.sessionLabelFrame.setFrameShape(QFrame.NoFrame) self.sessionLabelFrame.setFrameShadow(QFrame.Raised) self.sessionLabelFrame.setContentsMargins(0, 0, 0, 0) self.sessionLabelFrame.setStyleSheet("border: none;") self.sessionLabel = Label(self.sessionLabelFrame) self.sessionLabel.setText("Network Statistics") self.sessionLabel.setStyleSheet("border: none;") self.sessionLabelLayout = QHBoxLayout(self.sessionLabelFrame) self.sessionLabelLayout.addWidget(self.sessionLabel, alignment=Qt.AlignLeft) self.sessionLabelLayout.setContentsMargins(0, 0, 0, 0) self.sessionLabelLayout.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) self.sessionTextFrame = QFrame(self.sessionFrame) self.sessionTextFrame.setFrameShape(QFrame.NoFrame) self.sessionTextFrame.setFrameShadow(QFrame.Raised) self.sessionTextFrame.setContentsMargins(0, 0, 0, 0) self.sessionTextFrame.setStyleSheet( "background-color: rgb(27, 29, 35);" "border: 1px solid gray;" "border-radius: 5px;" ) self.sessionText = TextEdit(self.sessionTextFrame) self.sessionTextLayout = QHBoxLayout(self.sessionTextFrame) self.sessionTextLayout.addWidget(self.sessionText) self.sessionTextLayout.setContentsMargins(0, 0, 0, 0) self.sessionTextLayout.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.sessionLayout = QVBoxLayout(self.sessionFrame) self.sessionLayout.addWidget(self.sessionLabelFrame) self.sessionLayout.addWidget(self.sessionTextFrame) self.sessionLayout.setContentsMargins(0, 0, 0, 0) self.sessionLayout.setAlignment(Qt.AlignTop | Qt.AlignLeft) self.networkLayout = QVBoxLayout(self.networkFrame) self.networkLayout.addWidget(self.controlFrame) self.networkLayout.addWidget(self.devicesFrame) self.networkLayout.addWidget(self.sessionFrame) self.networkLayout.setContentsMargins(0, 0, 0, 0) self.infoFrame = QFrame(self.contentFrame) self.infoFrame.setFrameShape(QFrame.NoFrame) self.infoFrame.setFrameShadow(QFrame.Raised) self.infoFrame.setContentsMargins(0, 0, 0, 0) self.infoFrame.setStyleSheet("border: none;") self.graphicsFrame = QFrame(self.infoFrame) self.graphicsFrame.setFrameShape(QFrame.NoFrame) self.graphicsFrame.setFrameShadow(QFrame.Raised) self.graphicsFrame.setContentsMargins(0, 0, 0, 0) self.graphicsFrame.setStyleSheet("border: none;") self.fitnessGraphics = FitnessGraphics(self.graphicsFrame) self.graphicsLayout = QVBoxLayout(self.graphicsFrame) self.graphicsLayout.addWidget(self.fitnessGraphics) self.graphicsLayout.setContentsMargins(0, 0, 0, 0) self.infoLayout = QVBoxLayout(self.infoFrame) self.infoLayout.addWidget(self.graphicsFrame) self.infoLayout.setContentsMargins(0, 0, 0, 0) self.infoLayout.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.contentLayout = QHBoxLayout(self.contentFrame) self.contentLayout.addWidget(self.networkFrame, stretch=1) self.contentLayout.addWidget(self.infoFrame, stretch=1) self.contentLayout.setContentsMargins(0, 0, 0, 0) self.centralLayout = QHBoxLayout(self.centralFrame) self.centralLayout.addWidget(self.contentFrame) self.centralLayout.setContentsMargins(0, 0, 0, 0) self.uiLayout = QHBoxLayout(self) self.uiLayout.addWidget(self.centralFrame) self.uiLayout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.uiLayout) self.setContentsMargins(0, 0, 0, 0)
class TitleBar(QWidget): def __init__(self, ui_main): super().__init__() self.ui_main = ui_main self.initUI() self.minimizeBtn.clicked.connect(self.ui_main.showMinimized) self.resizeBtn.clicked.connect(self.resizeClicked) def initUI(self): self.sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.sizePolicy.setHorizontalStretch(0) self.sizePolicy.setVerticalStretch(0) self.centralFrame = QFrame(self) self.centralFrame.setMinimumSize(QSize(0, 40)) self.centralFrame.setMaximumSize(QSize(16777215, 42)) self.centralFrame.setStyleSheet(u"background-color: rgba(27, 29, 35, 255)") self.centralFrame.setFrameShape(QFrame.NoFrame) self.centralFrame.setFrameShadow(QFrame.Raised) self.centralFrame.setContentsMargins(0, 0, 0, 0) """ Title Frame, Label, and Layout """ self.titleFrame = QFrame(self.centralFrame) self.sizePolicy.setHeightForWidth(self.titleFrame.sizePolicy().hasHeightForWidth()) self.titleFrame.setSizePolicy(self.sizePolicy) self.titleFrame.setFrameShape(QFrame.NoFrame) self.titleFrame.setFrameShadow(QFrame.Raised) self.titleFrame.setContentsMargins(0, 0, 0, 0) self.titleFrame.setStyleSheet("border: none;") self.label = TitleBarLabel(self.titleFrame) self.titleFrameLayout = QHBoxLayout(self.titleFrame) self.titleFrameLayout.setSpacing(0) self.titleFrameLayout.setContentsMargins(5, 0, 10, 0) self.titleFrameLayout.addWidget(self.label) """ Buttons Frame, Buttons, and Layout """ self.btnsFrame = QFrame(self.centralFrame) self.sizePolicy.setHeightForWidth(self.btnsFrame.sizePolicy().hasHeightForWidth()) self.btnsFrame.setSizePolicy(self.sizePolicy) self.btnsFrame.setMaximumSize(QSize(120, 16777215)) self.btnsFrame.setFrameShape(QFrame.NoFrame) self.btnsFrame.setFrameShadow(QFrame.Raised) self.btnsFrame.setContentsMargins(0, 0, 0, 0) self.btnsFrame.setStyleSheet("border: none;") self.minimizeBtn = MinimizeButton(self.btnsFrame) self.resizeBtn = ResizeButton(self.btnsFrame) self.closeBtn = CloseButton(self.btnsFrame) self.btnsLayout = QHBoxLayout(self.btnsFrame) self.btnsLayout.addWidget(self.minimizeBtn) self.btnsLayout.addWidget(self.resizeBtn) self.btnsLayout.addWidget(self.closeBtn) self.btnsLayout.setSpacing(0) self.btnsLayout.setContentsMargins(0, 0, 0, 0) """ Central Layout """ self.centralLayout = QHBoxLayout(self.centralFrame) self.centralLayout.addWidget(self.titleFrame) self.centralLayout.addWidget(self.btnsFrame, 0, Qt.AlignRight) self.centralLayout.setSpacing(0) self.centralLayout.setContentsMargins(0, 0, 0, 0) """ UI Layout """ self.uiLayout = QVBoxLayout(self) self.uiLayout.addWidget(self.centralFrame) self.uiLayout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.uiLayout) def mouseMoveEvent(self, ev): self.ui_main.moveWindow(ev) def resizeClicked(self): if self.ui_main.windowState() == Qt.WindowMaximized: self.ui_main.showNormal() self.setToolTip("Maximize") self.resizeBtn.setIcon(QtGui.QIcon(resource_path("icons/cil-window-maximize.png"))) else: self.ui_main.showMaximized() self.setToolTip("Restore") self.resizeBtn.setIcon(QtGui.QIcon(resource_path("icons/cil-window-restore.png")))
def addStuff(self, posts): for post in posts: # xpanel holds one post xpanel_layout = QHBoxLayout() xpanel_layout.setSpacing(5) xpanel_layout.setContentsMargins(self.no_margin) xpanel = QFrame() xpanel.setContentsMargins(self.no_margin) xpanel.setLayout(xpanel_layout) avatar_label = self.updated_avatar(self.AVATAR_DEFAULT) # panel holds controls and view panel_layout = QVBoxLayout() panel_layout.setSpacing(0) panel_layout.setContentsMargins(self.no_margin) panel = QFrame() panel.setLayout(panel_layout) panel.setContentsMargins(self.no_margin) panel.setStyleSheet("background-color:green;") # control holds the controls at the top control_layout = QHBoxLayout() control_layout.setSpacing(0) control_layout.setContentsMargins(self.no_margin) controls = QFrame() controls.setStyleSheet("background-color:#ffeeee;") controls.setContentsMargins(self.no_margin) controls.setLayout(control_layout) # ctrl_ is inside control ctrl_url = QPushButton() ctrl_url.setContentsMargins(self.no_margin) ctrl_url.setStyleSheet("QPushButton { color: black; }") ctrl_url.setFlat(True) ctrl_url.setIcon(QIcon(self.ICON_URL)) ctrl_updated = QPushButton() ctrl_updated.setContentsMargins(self.no_margin) ctrl_updated.setStyleSheet("color:#000000;") ctrl_updated.setFlat(True) ctrl_updated.setIcon(QIcon(self.ICON_TIME)) ctrl_user = QPushButton() ctrl_user.setContentsMargins(self.no_margin) ctrl_user.setStyleSheet("QPushButton { color: black; }") ctrl_user.setFlat(True) ctrl_user.setIcon(QIcon(self.ICON_USER)) # view displays HTML view = WebView() #view.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) view.setMinimumHeight(200) view.setContentsMargins(self.no_margin) view.setStyleSheet("background-color:#eeeeff;") # set the data to the widgets domain = post["guid"].split('/')[0] path = "assets/{}_user.jpg".format(domain) avatar_label = self.updated_avatar(path) ctrl_url.setText(post["url"]) ctrl_updated.setText(post["edited_at"]) ctrl_user.setText(self.pynt.users[domain]["display_name"]) view.setHtml(post["body_html"]) # now put everything together control_layout.addWidget(ctrl_user) control_layout.addWidget(ctrl_updated) control_layout.addWidget(ctrl_url) panel_layout.addWidget(controls) panel_layout.addWidget(view) xpanel_layout.addWidget(avatar_label, 0, Qt.AlignTop) xpanel_layout.addWidget(panel) self.layout.addWidget(xpanel) return self
class TabToolbar(QToolBar): """[summary] Args: _TabToolbar ([type]): [description] Returns: [type]: [description] """ Minimized = QtCore.pyqtSignal() Maximized = QtCore.pyqtSignal() SpecialTabClicked = QtCore.pyqtSignal() StyleChanged = QtCore.pyqtSignal() def __init__(self, parent: QWidget = None, group_maxheight: int = 75, group_rowcount: int = 3): super(TabToolbar, self).__init__(parent) style.register_default_styles() self.group_rowcount = group_rowcount self.group_maxheight = group_maxheight self.has_specialtab = False self.current_index = 0 self.ignore_styleevent = False self.is_shown = True self._is_minimized = False self.maxheight = QtWidgets.QWIDGETSIZE_MAX self._style = style.StyleParams() self.setObjectName("TabToolbar") # self.tempShowTimer = QtCore.QTimer() # self.tempShowTimer.setSingleShot(True) # self.tempShowTimer.setInterval(QApplication.doubleClickInterval()) self.setProperty("TabToolbar", QtCore.QVariant(True)) self.layout().setContentsMargins(0, 0, 0, 0) self.layout().setSpacing(0) self.setContentsMargins(0, 0, 0, 0) self.setFloatable(False) self.setMovable(False) self.setAllowedAreas(QtCore.Qt.TopToolBarArea) self.tabBar = QTabWidget(self) self.tabBar.setProperty("TTWidget", QtCore.QVariant(True)) self.tabBar.tabBar().setProperty("TTTab", QtCore.QVariant(True)) self.tabBarHandle = self.addWidget(self.tabBar) self.tabBar.setUsesScrollButtons(True) self.cornerActions = QFrame(self) self.cornerActions.setFrameShape(QFrame.NoFrame) self.cornerActions.setLineWidth(0) self.cornerActions.setContentsMargins(0, 0, 0, 0) self.cornerActions.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Minimum) self.cornerLayout = QHBoxLayout(self.cornerActions) self.cornerLayout.setContentsMargins(0, 0, 0, 0) self.cornerLayout.setSpacing(0) self.cornerLayout.setDirection(QBoxLayout.LeftToRight) self.cornerActions.setLayout(self.cornerLayout) self.hideAction = QAction(self) self.hideAction.setCheckable(True) self.hideAction.setText("▲") self.hideButton = QToolButton(self.tabBar) self.hideButton.setProperty("TTHide", QtCore.QVariant(True)) self.hideButton.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly) self.hideButton.setDefaultAction(self.hideAction) self.hideButton.setAutoRaise(True) self.hideButton.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.hideAction.triggered.connect(self._hideaction) self.tabBar.tabBarDoubleClicked.connect(self.hideAction.trigger) self.tabBar.tabBarClicked.connect(self.current_tabchanged) self.tabBar.currentChanged.connect(self.focus_changed) self.cornerLayout.addWidget(self.hideButton) self.tabBar.setCornerWidget(self.cornerActions) self.set_style(style.get_defaultstyle()) def _hideaction(self): # self.tempShowTimer.start() self._is_minimized = self.hideAction.isChecked() self.hideAction.setText("▼" if self._is_minimized else "▲") self.hide_at(self.tabBar.currentIndex()) if self._is_minimized: self.Minimized.emit() else: self.Maximized.emit() def event(self, event: QtCore.QEvent): if event.type( ) == QtCore.QEvent.StyleChange and not self.ignore_styleevent: # TODO: Validatre if we need a timer stylename = (self._style.objectName() if self._style else style.get_defaultstyle()) self.set_style(stylename) return super(TabToolbar, self).event(event) def focus_changed(self, old: QWidget = None, now: QWidget = None): if now and now != self: if self.isMinimized() and self.is_shown: parent = now while parent: parent = parent.parent() if parent == self: return self.hide_at(self.current_index) def rowcount(self): return self.group_rowcount def group_maxheight(self): return self.group_maxheight * style.get_scalefactor(self) def set_style(self, stylename: str): self.ignore_styleevent = True self._style = style.create_style(stylename) stylesheet = style.get_stylesheet(self._style) self.setStyleSheet(stylesheet) self.ignore_styleevent = False self.StyleChanged.emit() def get_style(self) -> str: if self._style: return self._style.objectName() return "" def add_corneraction(self, action: QAction): action_button = QToolButton(self.tabBar) action_button.setProperty("TTInternal", QtCore.QVariant(True)) action_button.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) action_button.setDefaultAction(action) action_button.setAutoRaise(True) action_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.cornerActions.layout().addWidget(action_button) def set_specialtabenabled(self, enabled: bool): self.has_specialtab = enabled self.tabBar.tabBar().setProperty("TTSpecial", QtCore.QVariant(enabled)) if enabled and self.tabBar.count() > 0: self.tabBar.setCurrentIndex(1) def hide_action(self) -> QAction: return self.hideAction def tab_clicked(self, index: int): if self.tempShowTimer.isActive() or (index == 0 and self.has_specialtab): return if self._is_minimized: if self.is_shown and index != self.current_index: return self._is_minimized = self.is_shown self.hide_at(index) self._is_minimized = True def current_tabchanged(self, index: int): QtCore.QSignalBlocker(self.tabBar) if index == 0 and self.has_specialtab: self.tabBar.setCurrentIndex(self.current_index) self.SpecialTabClicked.emit() else: self.current_index = index @property def current_tab(self) -> int: return self.current_index def set_currenttab(self, index: int): self.tabBar.setCurrentIndex(index) def hide_at(self, index: int): if self._is_minimized: minheight = self.tabBar.tabBar().height() + 2 self.tabBar.setMaximumHeight(minheight) self.tabBar.setMinimumHeight(minheight) self.setMaximumHeight(minheight) self.setMinimumHeight(minheight) self.is_shown = False else: self.tabBar.setCurrentIndex(index) if not self.is_shown: self.tabBar.setMaximumHeight(self.maxheight) self.tabBar.setMinimumHeight(self.maxheight) self.setMaximumHeight(self.maxheight) self.setMinimumHeight(self.maxheight) self.tabBar.adjustSize() self.setFocus() self.is_shown = True def hide_tab(self, index: int): page = self.sender() QtCore.QSignalBlocker(page) for i in range(self.tabBar.count()): if self.tabBar.widget(i) == page: self.tabBar.removeTab(i) return self.current_index = self.tabBar.currentIndex() @QtCore.pyqtSlot(int) def _adjustverticalsize(self, vsize: int): self.maxheight = vsize + self.tabBar.tabBar().height() + 6 self.setMaximumHeight(self.maxheight) self.setMinimumHeight(self.maxheight) def adjust_verticalsize(self, vsize: int): QtCore.QTimer.singleShot(0, lambda: self._adjustverticalsize(vsize) ) # type: ignore[attr-defined] # self._AdjustVerticleSize(vSize) def show_tab(self, index: int): tab_page = self.sender() QtCore.QSignalBlocker(tab_page) self.tabBar.insertTab(index, tab_page, tab_page.objectName()) self.current_index = self.tabBar.currentIndex() def add_page(self, page_name: str) -> page.Page: tab_page = page.Page(self.tabBar.count(), page_name) QtCore.QSignalBlocker(tab_page) tab_page.Hiding.connect(self.hide_tab) tab_page.Showing.connect(self.show_tab) self.tabBar.addTab(tab_page, page_name) return tab_page
class DolphinUpdate(QMainWindow): APP_TITLE = 'DolphinUpdate 3.1' DOWNLOAD_PATH = os.path.join(os.getenv('APPDATA'), 'DolphinUpdate/') def __init__(self, user_data_control): super().__init__() sys.excepthook = self._displayError self._udc = user_data_control self.check = QPixmap("res/check.png") self.cancel = QPixmap("res/cancel.png") self.setGeometry(500, 500, 500, 465) self.init_ui() self.init_window() self.init_user_data() self.setWindowTitle(self.APP_TITLE) self.setWindowIcon(QIcon('res/rabbit.png')) center(self) self.show() # PyQt Error Handling def _displayError(self, etype, evalue, etraceback): tb = ''.join(traceback.format_exception(etype, evalue, etraceback)) QMessageBox.critical(self, "FATAL ERROR", "An unexpected error occurred:\n%s\n\n%s" % (evalue, tb)) def init_ui(self): """create the UI elements in the main window""" self.statusBar().showMessage('Ready') main = QWidget() self.setCentralWidget(main) self.dolphin_dir = QLineEdit(main) self.dolphin_dir.setPlaceholderText("Please Select a Dolphin Directory") self.dolphin_dir.setReadOnly(True) self.version = QLineEdit(main) self.version.setPlaceholderText("Installation Status Unknown") self.version.setReadOnly(True) self.current = QLineEdit(main) self.current.setPlaceholderText("Loading Current Version...") self.current.setReadOnly(True) self.changelog_frame = QFrame(main) changelog_vbox = QVBoxLayout(self.changelog_frame) self.changelog = QTextBrowser(main) self.changelog.setPlaceholderText("Loading Changelog...") self.changelog.setReadOnly(True) changelog_vbox.addWidget(QLabel('Changelog:')) changelog_vbox.addWidget(self.changelog) self.changelog_frame.setContentsMargins(0, 20, -7, 0) grid = QGridLayout() main.setLayout(grid) self.dolphin_dir_status = QLabel(main) self.dolphin_dir_status.setPixmap(self.cancel) self.version_status = QLabel(main) self.version_status.setPixmap(self.cancel) self.current_status = QLabel(main) self.current_status.setPixmap(QPixmap("res/info.png")) grid.addWidget(self.dolphin_dir_status, 0, 0, Qt.AlignCenter) grid.addWidget(QLabel('Dolphin Directory:'), 0, 2) grid.addWidget(self.dolphin_dir, 0, 3) grid.addWidget(self.version_status, 1, 0, Qt.AlignCenter) grid.addWidget(QLabel('Your Version:'), 1, 2) grid.addWidget(self.version, 1, 3) grid.addWidget(self.current_status, 2, 0, Qt.AlignCenter) grid.addWidget(QLabel('Current Version:'), 2, 2) grid.addWidget(self.current, 2, 3) grid.addWidget(self.changelog_frame, 3, 0, 1, 4) grid.setSpacing(10) grid.setVerticalSpacing(2) grid.setRowStretch(3, 1) def init_window(self): self.update_thread = UpdateThread() self.update_thread.current.connect(self.update_current) self.update_thread.changelog.connect(self.update_changelog) self.update_thread.error.connect(self.show_warning) self.update_thread.start() self.download_thread = DownloadThread() self.download_thread.status.connect(self.update_version) self.download_thread.error.connect(self.show_warning) open_action = QAction(QIcon('res/open.png'), '&Open', self) open_action.setShortcut('Ctrl+O') open_action.setStatusTip('Select Dolphin Folder') open_action.triggered.connect(self.select_dolphin_folder) self.hide_changelog_action = QAction('Hide Changelog', self) self.hide_changelog_action.setStatusTip('Hide Changelog Section') self.hide_changelog_action.setCheckable(True) self.hide_changelog_action.toggled.connect(self.hide_changelog) self.hide_changelog_action.setChecked(self._udc.get_hide_changelog()) update_action = QAction(QIcon('res/synchronize.png'), '&Refresh', self) update_action.setStatusTip('Refresh Current Version') update_action.triggered.connect(self.retrieve_current) download_action = QAction(QIcon('res/download.png'), '&Download', self) download_action.setStatusTip('Download Newest Version') download_action.triggered.connect(self.download_new) clear_action = QAction(QIcon('res/delete.png'), '&Clear Version', self) clear_action.setStatusTip('Reset Your Version') clear_action.triggered.connect(self.clear_version) exit_action = QAction(QIcon('res/exit.png'), '&Exit', self) exit_action.setShortcut('Ctrl+Q') exit_action.setStatusTip('Exit application') exit_action.triggered.connect(self.close) launch_dolphin_action = QAction(QIcon('res/dolphin.png'), '&Launch Dolphin', self) launch_dolphin_action.setShortcut('Ctrl+D') launch_dolphin_action.setStatusTip('Launch Dolphin') launch_dolphin_action.triggered.connect(self.launch_dolphin) file_menu = self.menuBar().addMenu('&File') file_menu.addAction(open_action) file_menu.addAction(update_action) file_menu.addAction(clear_action) file_menu.addAction(launch_dolphin_action) file_menu.addAction(exit_action) file_menu = self.menuBar().addMenu('&View') file_menu.addAction(self.hide_changelog_action) toolbar = self.addToolBar('Toolbar') toolbar.addAction(open_action) toolbar.addAction(update_action) toolbar.addAction(download_action) toolbar.addSeparator() toolbar.addAction(launch_dolphin_action) settings_frame = QFrame() settings_form = QFormLayout(settings_frame) self.auto_launch_check = QCheckBox(settings_frame) self.auto_launch_check.setChecked(self._udc.get_auto_launch()) settings_form.addRow("Auto Launch?", self.auto_launch_check) self.launch_qt_check = QCheckBox(settings_frame) self.launch_qt_check.setChecked(self._udc.get_qt()) settings_form.addRow("Launch QT Version?", self.launch_qt_check) settings_form.setContentsMargins(0, 1, 2, 0) self.statusBar().addPermanentWidget(settings_frame) def launch_dolphin(self): dolphin_dir = self.dolphin_dir.text() if not dolphin_dir: self.show_warning('Please select a dolphin folder.') return if (self.launch_qt_check.isChecked() == False): dolphinexe = 'Dolphin.exe' else: dolphinexe = 'DolphinQt2.exe' dolphin_path = os.path.join(dolphin_dir, dolphinexe) if not os.path.isfile(dolphin_path): self.show_warning('Could not find "' + dolphinexe + '".') return subprocess.Popen(dolphin_path, cwd=dolphin_dir) self.close() def update_version(self, message): if message == 'finished': self.version.setText(self.version.placeholderText()) self.version.setPlaceholderText("Installation Status Unknown") self.version_status.setPixmap(self.check) self._udc.set_user_version(self.version.text()) if self.auto_launch_check.isChecked() and QApplication.keyboardModifiers() != Qt.ShiftModifier: QTimer.singleShot(1000, self.launch_dolphin) else: self.version.setPlaceholderText(message) def download_new(self): dolphin_dir = self.dolphin_dir.text() version = self.version.text() if self.current.text() == version: self.show_warning('You already have the most recent version.') return elif not os.path.isdir(dolphin_dir): self.show_warning('Your dolphin folder path is invalid.') self.dolphin_dir_status.setPixmap(QPixmap("res/cancel.png")) return if not self.download_thread.isRunning(): if dir == 'Please Select a Dolphin Directory': self.show_warning('Please select a dolphin folder.') self.version.setText('') self.download_thread.update(dolphin_dir, version) self.download_thread.start() def update_changelog(self, message): self.changelog.setText(message) def show_warning(self, message): QMessageBox.warning(self, 'Uh-oh', message, QMessageBox.Ok) def clear_version(self): reply = QMessageBox.question(self, 'Clear', "Are you sure you want to reset your version?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: self.version.setText('') self.version_status.setPixmap(self.cancel) self._udc.set_user_version('') def retrieve_current(self): if ~self.update_thread.isRunning(): self.current.setText('') self.update_thread.start() def update_current(self, current): self.current.setText(current) if self.version.text() == self.current.text(): self.version_status.setPixmap(self.check) if self.auto_launch_check.isChecked() and QApplication.keyboardModifiers() != Qt.ShiftModifier: QTimer.singleShot(1000, self.launch_dolphin) else: self.version_status.setPixmap(self.cancel) if self.auto_launch_check.isChecked() and self.dolphin_dir.text(): self.download_new() def select_dolphin_folder(self): folder = str(QFileDialog.getExistingDirectory(self, 'Select Dolphin Directory')) if folder: self.dolphin_dir.setText(folder) self.dolphin_dir_status.setPixmap(QPixmap("res/check.png")) self._udc.set_user_path(folder) def hide_changelog(self, checked): self._udc.set_hide_changelog(checked) if checked: self.setMinimumHeight(250) self.changelog_frame.hide() self.resize(500, 250) else: self.setMinimumHeight(375) self.resize(500, 465) self.changelog_frame.show() def init_user_data(self): """initialize the dolphin path""" path, version = self._udc.load_user_data() if path: self.dolphin_dir.setText(path) if os.path.isdir(path): self.dolphin_dir_status.setPixmap(self.check) if version: self.version.setText(version) # PyQt closeEvent called on exit def closeEvent(self, event): self._udc.set_auto_launch(self.auto_launch_check.isChecked()) self._udc.set_qt(self.launch_qt_check.isChecked()) if self.download_thread.isRunning(): event.ignore() reply = QMessageBox.question(self, 'Exit', "Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: self.hide() self.download_thread.finished.connect(qApp.quit) else: event.accept()