コード例 #1
0
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setObjectName("main_window")
        self.setEnabled(True)
        self.resize(608, 248)
        size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        size_policy.setHorizontalStretch(0)
        size_policy.setVerticalStretch(0)
        size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
        self.setSizePolicy(size_policy)
        self.setAcceptDrops(True)
        self.setWindowTitle("FileHookPi")

        self.central_widget = QWidget(self)
        self.central_widget.setObjectName("central_widget")

        self.horizontalLayout = QHBoxLayout(self.central_widget)
        self.horizontalLayout.setObjectName("horizontalLayout")

        self.text_box = QPlainTextEdit(self.central_widget)
        self.text_box.setAcceptDrops(False)
        self.text_box.setReadOnly(True)
        self.text_box.setObjectName("text_box")

        self.horizontalLayout.addWidget(self.text_box)

        self.buttons_vertical_layout = QVBoxLayout()
        self.buttons_vertical_layout.setObjectName("buttons_vertical_layout")

        self.open_file_button = QPushButton(self.central_widget)
        self.open_file_button.setText("Open File")
        self.open_file_button.setObjectName("open_file_button")
        self.open_file_button.clicked.connect(self.select_file)

        self.buttons_vertical_layout.addWidget(self.open_file_button)

        self.line_counter = QLineEdit(self.central_widget)
        size_policy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        size_policy.setHorizontalStretch(0)
        size_policy.setVerticalStretch(0)
        size_policy.setHeightForWidth(
            self.line_counter.sizePolicy().hasHeightForWidth())
        self.line_counter.setSizePolicy(size_policy)
        self.line_counter.setAcceptDrops(False)
        self.line_counter.setReadOnly(True)
        self.line_counter.setObjectName("line_counter")

        self.buttons_vertical_layout.addWidget(self.line_counter)

        self.next_line_button = QPushButton(self.central_widget)
        self.next_line_button.setText("Next Line")
        self.next_line_button.setObjectName("next_line_button")
        self.next_line_button.clicked.connect(self.advance_line)

        self.buttons_vertical_layout.addWidget(self.next_line_button)

        self.horizontalLayout.addLayout(self.buttons_vertical_layout)

        self.menuBar().addMenu(FileMenu(self))

        self.setCentralWidget(self.central_widget)

        self.current_file = None
        self.line_count = 0

    def select_file(self, *, advance=True):
        path, *_ = QFileDialog.getOpenFileName(self,
                                               "Open File",
                                               filter="Text Files (*.txt)")

        if not path:
            return

        self.open_file(path, advance=advance)

    def open_file(self, path, *, advance=True):
        if self.current_file is not None:
            self.cleanup()

        self.current_file = open(path, "r", encoding="utf-8")
        self.setWindowFilePath(path)

        if advance:
            self.advance_line()

    def advance_line(self):
        if self.current_file is None:
            return

        try:
            line = self.current_file.readline()
        except Exception as exc:
            message_box = QMessageBox(
                parent=self,
                text=f"Failed to read:\n{type(exc).__name__}: {exc}",
                icon=QMessageBox.Critical)
            message_box.setInformativeText("Close the file?")
            message_box.setStandardButtons(QMessageBox.No | QMessageBox.Yes)
            message_box.setDefaultButton(QMessageBox.Yes)

            if message_box.exec_() == QMessageBox.Yes:
                self.cleanup()

            return

        if not line:
            return

        self.line_count += 1
        self.line_counter.setText(str(self.line_count))
        QApplication.clipboard().setText(line.rstrip("\n"))
        self.text_box.setPlainText(line + self.text_box.toPlainText())

    def cleanup(self):
        if self.current_file is not None:
            self.current_file.close()
            self.current_file = None

        self.text_box.clear()
        self.line_count = 0
        self.line_counter.clear()
        self.setWindowFilePath("")

    def dragEnterEvent(self, event):
        urls = event.mimeData().urls()

        if urls and os.path.isfile(urls[0].path()):
            event.accept()

    def dropEvent(self, event):
        self.open_file(event.mimeData().urls()[0].path())

    def closeEvent(self, event):
        self.cleanup()
        event.accept()
コード例 #2
0
class EditWidget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.logData: Class.LogInfo = None
        self.resultMap = dict()
        self._initUI()
        self._initData()

    def getLogData(self):
        return self.logData

    def setLogData(self, data: Class.LogInfo):
        self.logData = data
        self.topText.setPlainText(self.logData.data)

    def toPlainText(self):
        return self.topText.toPlainText()

    def _initUI(self):
        self.mainLayout = QVBoxLayout(self)
        self.topText = QPlainTextEdit(self)
        self.topText.setLineWrapMode(QPlainTextEdit.NoWrap)
        self.topText.setCenterOnScroll(True)
        self.topText.setAcceptDrops(False)
        self.topText.verticalScrollBar()
        self.bottomText = QTabWidget(self)
        self.bottomText.setDocumentMode(True)
        self.bottomText.setMovable(True)
        self.bottomText.setTabsClosable(True)
        self.bottomText.tabCloseRequested.connect(self.tabCloseRequested)
        self.mainLayout.addWidget(self.topText, 1)
        self.mainLayout.addWidget(self.bottomText, 1)
        self.setLayout(self.mainLayout)

    def tabCloseRequested(self, index):
        self.bottomText.removeTab(index)

    def _initData(self):
        pass

    #     self.topText.setPlainText('''10-18 16:52:37.542544 13034 13073 D _V_CommonModel: [VivoVideo]onLoaded
    # 10-18 16:52:37.545425 13034 13034 D EventBus: No subscribers registered for event class com.vivo.video.baselibrary.lifecycle.PlayerStateChangeEvent
    # 10-18 16:52:37.545536 13034 13034 D EventBus: No subscribers registered for event class org.greenrobot.eventbus.g
    # 10-18 16:52:37.559381  2359  2359 I _V_MainThreadMonitor: scheduleCheck true, true, 900
    # 10-18 16:52:37.561130 13034 13034 D _V_LiveTabFragment: [VivoVideo]liveCategory load onsuccess
    # 10-18 16:52:37.561572   714   791 D BufferLayer: triger signalLayerUpdate
    # 10-18 16:52:37.561937 13034 13034 D _V_LiveCategoryFragmentAdapter: [VivoVideo]com.vivo.video.app.home.HomeActivity@489a20a
    # 10-18 16:52:37.565738 13034 13034 D _V_BaseFragment: [VivoVideo]init onCreateView
    # 10-18 16:52:37.576986 13034 13034 I RepluginBridge: getApi,clazz:interface com.unionyy.mobile.vivo.api.VV2YYInfoAction
    # 10-18 16:52:37.577233 13034 13034 I RepluginBridge: getApi,clazz:interface com.unionyy.mobile.vivo.api.VV2YYAuthAction
    # 10-18 16:52:37.577331 13034 13034 I RepluginBridge: getApi,clazz:interface com.unionyy.mobile.vivo.api.VV2YYInfoAction
    # 10-18 16:52:37.577359 13034 13034 I RepluginBridge: getApi,clazz:interface com.unionyy.mobile.vivo.api.VV2YYAuthAction''')

    def cursorPositionChanged(self):
        print("cursorPositionChanged")

    def handlerFilterResult(self, filterResult):
        result = self.resultMap.get(filterResult.orgTag)
        if result:
            print("已存在%s" % filterResult.orgTag)
            result.setPlainText(filterResult.value)
        else:
            print("未存在%s" % filterResult.orgTag)
            filterResultView = QPlainTextEdit(self)
            highlighter = LogQSyntaxHighlighter(filterResultView.document())
            highlighter.setHighlignterTags(filterResult.tag)
            filterResultView.setPlainText(filterResult.value)
            filterResultView.setLineWrapMode(QPlainTextEdit.NoWrap)
            filterResultView.cursorPositionChanged.connect(
                self.cursorPositionChanged)
            self.bottomText.addTab(filterResultView, filterResult.orgTag)
            self.bottomText.setCurrentIndex(self.bottomText.count() - 1)
            self.resultMap.setdefault(filterResult.orgTag, filterResultView)

    def destroy(self,
                destroyWindow: bool = ...,
                destroySubWindows: bool = ...):
        RxBus.instance.unRegister(self)
        super.destroy(destroyWindow, destroySubWindows)
        print("destroy")

    def create(self,
               arg__1: int = ...,
               initializeWindow: bool = ...,
               destroyOldWindow: bool = ...):
        super.create(arg__1, initializeWindow, destroyOldWindow)
        print("create")