Beispiel #1
0
class HomeFeed(QWidget):
    def __init__(self):
        super(HomeFeed, self).__init__()
        self.run_get_feed_thread()

        self.feed = []
        self.page = 1
        self.loading = False

        self.layout = QStackedLayout()
        self.layout.setMargin(0)

        self.loading_label = QLabel('Loading...', alignment=Qt.AlignCenter)
        self.layout.addWidget(self.loading_label)
        self.layout.setCurrentWidget(self.loading_label)

        self.page_widget = QScrollArea()
        self.page_widget.setWidgetResizable(True)
        self.page_widget.viewport().installEventFilter(self)

        widget = QWidget(self.page_widget)
        widget.setMinimumWidth(350)
        self.page_widget.setWidget(widget)

        self.flow_layout = FlowLayout(widget)
        self.flow_layout.setContentsMargins(25, 25, 25, 25)

        self.layout.addWidget(self.page_widget)
        self.setLayout(self.layout)

    def run_get_feed_thread(self):
        self.thread = RunThread(self.get_feed, self.on_feed_receive)

    def eventFilter(self, source, event):
        if (event.type() == QEvent.Wheel
                and source is self.page_widget.viewport()
                and not self.loading):
            scrollbar = self.page_widget.verticalScrollBar()
            y = scrollbar.value()
            bottom = scrollbar.maximum()
            if y >= bottom:
                self.page += 1
                self.loading = True
                self.run_get_feed_thread()
        return super(HomeFeed, self).eventFilter(source, event)

    def get_feed(self):
        spider = CoreRadioSpider()
        self.feed = spider.get_home_feed(page=self.page)
        return True

    def on_feed_receive(self):
        if len(self.feed) > 0:
            for item in self.feed:
                preview_widget = SongPreview(artwork=item['artwork'],
                                             title=item['title'],
                                             url=item['href'])
                self.flow_layout.addWidget(preview_widget)
            self.loading = False
            self.layout.setCurrentWidget(self.page_widget)
        else:
            self.loading_label.setText(
                "Something wen't wrong, please try again")
Beispiel #2
0
class Window(QMainWindow):
    def __init__(self):
        # Application Settings:
        self.app = QApplication(sys.argv)
        self.app.setStyle("Fusion")
        #self.app.setWindowIcon(QIcon("gear_drop.ico"))
        super(Window, self).__init__()
        self.setWindowTitle("Nerd Lab - HTML Replace")
        self.main_widget = QWidget(self)
        self.main_layout = QGridLayout(self.main_widget)
        self.setStyleSheet("background-color: #333333; color: #dedede;")

        self.exit_command = QAction("Exit", self)
        self.exit_command.triggered.connect(self.close)

        self.main_menu = self.menuBar()
        self.file_menu = self.main_menu.addMenu("File")
        self.file_menu.addAction(self.exit_command)
        self.help_menu = self.main_menu.addMenu("Help")

        self.scroll_area = QScrollArea()
        self.scroll_area.setWidgetResizable(True)
        self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scroll_widget = QWidget()
        self.scroll_area.setWidget(self.scroll_widget)
        QScroller.grabGesture(self.scroll_area.viewport(),
                              QScroller.LeftMouseButtonGesture)

        html_dir_row = QWidget()
        html_dir_layout = QGridLayout(html_dir_row)
        self.html_dir_label = QLabel("Directory containing the Html files:")
        self.html_dir_entry = QLineEdit()
        self.html_dir_entry.setStyleSheet(
            "background-color: #434343; selection-background-color: darkgray;")
        self.html_dir_entry.setReadOnly(True)
        self.html_dir_entry.setCursor(Qt.IBeamCursor)
        self.html_dir_button = QPushButton("Browse")
        self.html_dir_button.clicked.connect(self.setHTMLDir)
        html_dir_layout.addWidget(self.html_dir_label, 0, 0)
        html_dir_layout.addWidget(self.html_dir_entry, 1, 0)
        html_dir_layout.addWidget(self.html_dir_button, 1, 1)

        self.html_files = []
        self.dir_name = "Replaced Html Files"

        self.scroll_layout = QGridLayout(self.scroll_widget)

        self.add_replace_button = QPushButton("Add Replace Entry")
        self.add_replace_button.clicked.connect(self.addReplaceRow)
        self.rmv_replace_button = QPushButton("Remove Replace Entry")
        self.rmv_replace_button.clicked.connect(self.removeReplaceRow)
        replace_button_row = QWidget()
        replace_button_row_layout = QGridLayout(replace_button_row)
        replace_button_row_layout.addWidget(self.add_replace_button, 0, 0)
        replace_button_row_layout.addWidget(self.rmv_replace_button, 0, 1)
        replace_button_row_layout.addWidget(self.filler(False), 0, 2)

        self.status_box = QTextEdit()
        self.status_box.setReadOnly(True)
        self.status_box.setCursor(Qt.IBeamCursor)
        self.status_box.setStyleSheet("background-color: #434343;")

        replace_row = QWidget()
        replace_layout = QGridLayout(replace_row)
        self.replace_button = QPushButton("Replace")
        self.replace_button.clicked.connect(self.replaceHTML)
        self.replace_button.setDisabled(True)
        replace_layout.addWidget(self.filler(False), 0, 0)
        replace_layout.addWidget(self.replace_button, 0, 1)

        self.replace_grid = QWidget()
        self.replace_grid_layout = QGridLayout(self.replace_grid)
        self.current_row = 0
        self.scroll_layout.addWidget(self.replace_grid)
        self.scroll_layout.addWidget(self.filler())

        self.main_layout.addWidget(html_dir_row)
        self.main_layout.addWidget(
            QLabel(
                'Enter the exact line of Html you want to replace in the "Find What:" entry.\nIn the "Replace With:" entry, enter the Html that will be replacing the found line of Html.'
            ))
        self.main_layout.addWidget(self.scroll_area)
        self.main_layout.addWidget(replace_button_row)
        self.main_layout.addWidget(self.status_box)
        self.main_layout.addWidget(replace_row)

        self.setCentralWidget(self.main_widget)

        self.replace_rows = []
        self.addReplaceRow()
        self.rmv_replace_button.setDisabled(True)
        self.createReplaceFolder()

    def start(self):
        self.showMaximized()
        sys.exit(self.app.exec_())

    def createReplaceFolder(self):
        try:
            if os.path.isdir(self.dir_name):
                for html_file in os.listdir(self.dir_name):
                    os.remove(self.dir_name + '/' + html_file)
            else:
                os.mkdir(self.dir_name)

        except Exception as e:
            print(str(e) + " on line {}".format(sys.exc_info()[-1].tb_lineno))

    def setHTMLDir(self):
        try:
            html_dir = QFileDialog.getExistingDirectory()
            if html_dir != "":
                self.html_dir_entry.setText(html_dir)
                self.replace_button.setEnabled(True)

        except Exception as e:
            print(str(e) + " on line {}".format(sys.exc_info()[-1].tb_lineno))

    def replaceHTML(self):
        try:
            extension = ""
            html_dir_path = self.html_dir_entry.text()
            first_line = True
            replace_count = 0
            self.status_box.clear()
            if html_dir_path != "":
                self.html_files = list(os.listdir(html_dir_path))
                for i in range(0, len(self.html_files)):
                    extension = os.path.splitext(self.html_files[i])[1]
                    if extension == ".html" or extension == ".htm":
                        if first_line:
                            replace_count = self.replaceHTMLInFile(
                                self.html_files[i])
                            self.status_box.insertHtml(self.html_files[i] +
                                                       "  <b>" +
                                                       str(replace_count) +
                                                       "</b> lines replaced.")
                            first_line = False
                        else:
                            replace_count = self.replaceHTMLInFile(
                                self.html_files[i])
                            self.status_box.insertHtml("<br />" +
                                                       self.html_files[i] +
                                                       "  <b>" +
                                                       str(replace_count) +
                                                       "</b> lines replaced.")

        except Exception as e:
            print(str(e) + " on line {}".format(sys.exc_info()[-1].tb_lineno))

    def findLineInHTML(self, html_line):
        for replace_row in self.replace_rows:
            replace_html_line = replace_row[1].text()
            replace_html_line = replace_html_line.strip()
            if html_line == replace_html_line:
                new_line = replace_row[3].text()
                return new_line.strip()
        return ""

    def replaceHTMLInFile(self, html_file):
        try:
            replace_html_line = ""
            replace_counts = 0
            with open(self.html_dir_entry.text() + '/' + html_file,
                      'r',
                      encoding='UTF-8') as h_f, open(
                          self.dir_name + '/' + html_file,
                          'w',
                          encoding='UTF-8') as new_h_f:
                for line in h_f:
                    replace_html_line = self.findLineInHTML(line.strip())
                    if replace_html_line == "":
                        new_h_f.write(line)
                    else:
                        new_h_f.write(replace_html_line)
                        replace_counts += 1

            return replace_counts

        except Exception as e:
            print(str(e) + " on line {}".format(sys.exc_info()[-1].tb_lineno))

    def addReplaceRow(self):
        try:
            replace_row = [
                QLabel(str(self.current_row + 1) + ")  Find What: "),
                QLineEdit(),
                QLabel("   Replace With: "),
                QLineEdit()
            ]
            replace_row[1].setStyleSheet(
                "background-color: #434343; selection-background-color: darkgray;"
            )
            replace_row[3].setStyleSheet(
                "background-color: #434343; selection-background-color: darkgray;"
            )
            column = 0
            for widget in replace_row:
                self.replace_grid_layout.addWidget(widget, self.current_row,
                                                   column)
                column += 1

            self.replace_rows.append(replace_row)
            self.current_row += 1
            if len(self.replace_rows) > 1:
                self.rmv_replace_button.setEnabled(True)

        except Exception as e:
            print(str(e) + " on line {}".format(sys.exc_info()[-1].tb_lineno))

    def removeReplaceRow(self):
        try:
            if len(self.replace_rows) > 1:
                for widget in self.replace_rows[len(self.replace_rows) - 1]:
                    self.replace_grid_layout.removeWidget(widget)
                    widget.deleteLater()

                del self.replace_rows[len(self.replace_rows) - 1]
                self.current_row -= 1
                if len(self.replace_rows) == 1:
                    self.rmv_replace_button.setDisabled(True)

        except Exception as e:
            print(str(e) + " on line {}".format(sys.exc_info()[-1].tb_lineno))

    def filler(self, vertical_filler=True):
        filler = QWidget()
        if vertical_filler:
            filler.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            return filler
        filler.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        return filler

    def breakLine(self):
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        return line
Beispiel #3
0
class DatasheetView(QMainWindow):
    def __init__(self, pdfPath=None, openPages=[1]):

        super().__init__()

        if pdfPath:
            self.myPdfContext = PDFContext(pdfPath, openPages)

        # store diretory for debugging purposes
        self.svgDirectory = self.myPdfContext.directory

        # window dimensions
        self.top = 300
        self.left = 800
        self.width = 860
        self.height = 980

        self.setGeometry(self.left, self.top, self.width, self.height)

        # window title
        self.setWindowTitle("BetterSheets")

        # sets up main layout -- splitters
        self.initUILayout()
        self.initUIToolbar()
        self.initToC()

        # self.initPdfViewer()  # must be called after initUI to ensure PDFContext object exists
        self.show()

        print(self.mainDisplay.getVisibleChild())

    def initUILayout(self):

        # set left-side, Dynamic View
        self.dynamicViewDisplay = QLabel()

        self.vBoxA = QVBoxLayout()
        self.vBoxA.addWidget(self.dynamicViewDisplay)

        self.groupA = QGroupBox()
        self.groupA.setTitle("Dynamic Veiw")
        self.groupA.setLayout(self.vBoxA)

        # set left-side, Static View
        self.staticViewDisplay = QLabel()

        self.vBoxB = QVBoxLayout()
        self.vBoxB.addWidget(self.staticViewDisplay)

        self.groupB = QGroupBox()
        self.groupB.setTitle("Static View")
        self.groupB.setLayout(self.vBoxB)

        # add Dynamic and Static Views to resizeable left-side Splitter
        self.altViewSplit = QSplitter(Qt.Vertical)
        self.altViewSplit.addWidget(self.groupA)
        self.altViewSplit.addWidget(self.groupB)

        # set up Tools View section
        self.toolsTabView = QTabWidget()
        self.toolsTabView.setTabsClosable(True)
        self.toolsTabView.setMovable(True)
        self.toolsTabView.setDocumentMode(True)
        # self.toolsTabView.setTabBarAutoHide(True)

        # add attribute for storing page notes
        self.notesDB = []
        self.notesDisplay = QListWidget(self)
        self.notesDisplay.setMaximumHeight(200)

        # add ToC to Tools View
        self.ToCListView = QListWidget()
        self.toolsTabView.addTab(self.ToCListView, "Table of Contents")

        # add notes list to tools view
        self.toolsTabView.addTab(self.notesDisplay, "Notes")

        # add tools view to the left-side splitter
        self.altViewSplit.addWidget(self.toolsTabView)

        # set up main viewport
        self.mainDisplay = QDatasheetPageDisplayWidget(self.myPdfContext)
        self.mainDisplay.renderPages(1, 4)

        self.mainScroller = QScrollArea(self)
        self.mainScroller.setWidget(self.mainDisplay)
        self.mainScroller.setWidgetResizable(True)
        self.mainScroller.setBackgroundRole(QtGui.QPalette.Dark)
        self.mainScroller.setFixedHeight(800)

        print(self.mainScroller.viewport().childrenRect())

        # set up document tools

        self.hBoxDocTools = QHBoxLayout()

        self.searchLabel = QLabel("Search: ")
        self.searchBox = QLineEdit()
        self.searchBox.setPlaceholderText("Search")

        # self.

        self.vBoxMain = QVBoxLayout()
        self.vBoxMain.addWidget(self.mainScroller)

        self.notesArea = QLineEdit()
        self.notesArea.setPlaceholderText("Add a note about this page...")
        self.notesArea.returnPressed.connect(self.onAddNote)

        self.vBoxMain.addWidget(self.notesArea)

        self.mainViewGroup = QGroupBox()
        self.mainViewGroup.setTitle("Main View")
        self.mainViewGroup.setLayout(self.vBoxMain)

        # join both sides together
        self.leftRightSplit = QSplitter(Qt.Horizontal)
        self.leftRightSplit.addWidget(self.altViewSplit)
        self.leftRightSplit.addWidget(self.mainViewGroup)

        self.setCentralWidget(self.leftRightSplit)

    def initUIToolbar(self):

        mainMenu = self.menuBar(
        )  # get the menu bar already in use by this QMainWindow subclass

        fileMenu = mainMenu.addMenu("File")
        editMenu = mainMenu.addMenu("Edit")
        LayoutMenu = mainMenu.addMenu("Layout")
        AboutMenu = mainMenu.addMenu("About")

        saveAction = fileMenu.addAction("Save")
        quitAction = fileMenu.addAction("Exit Bettersheets")
        quitAction.triggered.connect(self.quitApp)
        copyAction = editMenu.addAction("Copy")
        resetAction = LayoutMenu.addAction("Reset Default Layout")

        self.toolBar = self.addToolBar("Tools")
        self.toolBar.addAction(saveAction)
        self.toolBar.addAction(copyAction)

    def contextMenuEvent(self, event):
        # return super().contextMenuEvent(event)
        contextMenu = QMenu()

        selectAction = contextMenu.addAction("Select Area")
        extractAction = contextMenu.addAction("Extract Content")
        openAction = contextMenu.addAction("Open PDF")
        closeAction = contextMenu.addAction("Close PDF")
        quitAction = contextMenu.addAction("Quit")

        triggered_action = contextMenu.exec_(self.mapToGlobal(event.pos()))

        if triggered_action == quitAction:
            self.quitApp()

    def quitApp(self):
        self.close()

    def onAddNote(self):
        print("note added")

        text = self.notesArea.text()

        if text:
            self.notesDB.append(text)
            self.notesDisplay.clear()
            self.notesDisplay.addItems(self.notesDB)
            self.notesArea.clear()

    def initPdfViewer(self, openPages: int):
        pass

    def initToC(self):

        # get table of contents
        ToC = self.myPdfContext.getToC()
        ToC_headings_list = [x[1] for x in ToC]

        self.ToCListView.clear()
        self.ToCListView.addItems(ToC_headings_list)
Beispiel #4
0
    for x in range(im.width()):
        for y in range(im.height()):
            if x % 2 == 0:
                im.setPixel(x, y, QColor('white').rgb())
            else:
                im.setPixel(x, y, QColor('black').rgb())
            # im.setPixel(x, y, QColor(255, x*2.56, y*2.56, 255).rgb())
    im.save('test.png')


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = IconEditor()
    img = QImage()
    if img.load("./mouse.png"):
        print('Image loaded successfully')
        window.setIconImage(img)
    else:
        print('Failed to load mouse.png image')
    # window.show()

    scrollArea = QScrollArea()
    scrollArea.setWidget(window)
    scrollArea.viewport().setBackgroundRole(QPalette.Dark)
    scrollArea.viewport().setAutoFillBackground(True)
    scrollArea.setWindowTitle("Icon Editor")
    scrollArea.show()
    # testImage()
    sys.exit(app.exec_())