吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1293|回复: 23
收起左侧

[Python 转载] 小说阅读器

  [复制链接]
wangzherongyao2 发表于 2024-12-18 17:18
[Python] 纯文本查看 复制代码
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem, QTextEdit, QDockWidget, QWidget, \
    QHBoxLayout, QPushButton, QFileDialog
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QPalette
from PyQt5.Qt import QTextCursor
import random
import re



class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(800, 600)
        self.setWindowTitle("小说阅读器")
        self.pattern1 = "第[1234567890]*章.*"
        title_win = QWidget(self)
        title_layout = QHBoxLayout()
        title_win.setLayout(title_layout)
        read_button = QPushButton("读取文本")
        big_font = QPushButton("字体变大")
        small_font = QPushButton("字体变小")
        background_color = QPushButton("随机背景颜色")
        title_layout.addWidget(read_button)
        title_layout.addWidget(big_font)
        title_layout.addWidget(small_font)
        title_layout.addWidget(background_color)
        read_button.clicked.connect(self.read_book)
        self.menu_dock = QDockWidget('菜单', self)
        self.menu_dock.setWidget(title_win)
        self.menu_dock.setFloating(False)
        self.menu_dock.setFeatures(QDockWidget.NoDockWidgetFeatures)  # 设置不可脱离

        self.list_dock = QDockWidget('目录栏', self)
        # 创建目录侧边栏
        self.tree_widget = QTreeWidget()
        self.main_text = QTextEdit()
        self.font_size = 12
        self.main_text.setFontPointSize(self.font_size)
        self.setCentralWidget(self.main_text)
        self.list_dock.setWidget(self.tree_widget)
        self.list_dock.setFloating(False)
        self.tree_widget.setHeaderHidden(True)  # 隐藏表头
        # self.list_dock.setFeatures(QDockWidget.NoDockWidgetFeatures)  # 设置不可脱离
        # self.list_dock.setMinimumSize(200, 100)  # 宽度,高度
        # self.list_dock.setMaximumSize(200, 600)  # 宽度,高度
        self.addDockWidget(Qt.LeftDockWidgetArea, self.list_dock)
        self.addDockWidget(Qt.TopDockWidgetArea, self.menu_dock)
        # 设置点击事件
        big_font.clicked.connect(self.font_big)
        small_font.clicked.connect(self.font_small)
        background_color.clicked.connect(self.update_back)
        self.tree_widget.itemClicked.connect(self.on_item_clicked)
        # 随机设置背景颜色

    def on_item_clicked(self, item, column):
        # 获取点击的章节名称
        chapter_name = item.text(column)
        # 根据章节名称进行跳转操作
        tc = self.main_text.textCursor()
        tc.setPosition(self.chapter_index_dict[chapter_name][0], QTextCursor.MoveAnchor)
        tc.setPosition(self.chapter_index_dict[chapter_name][1], QTextCursor.KeepAnchor)
        self.main_text.setTextCursor(tc)

    def read_book(self):
        file_dialog = QFileDialog()
        file_dialog.setNameFilter("Text files (*.txt)")
        file_dialog.exec_()
        selected_files = file_dialog.selectedFiles()
        if selected_files:
            file_path = selected_files[0]
            with open(file_path, "r", encoding='utf-8') as f:
                self.content = f.read()
                # print(self.content)
                res = [i.span() for i in re.finditer(self.pattern1, self.content)]
                self.chapter_index_dict = {}
                root_item = QTreeWidgetItem(self.tree_widget, ["目录"])
                for item in res:
                    self.chapter_index_dict[self.content[item[0]:item[1]]] = item
                    tmp_chapter = QTreeWidgetItem(root_item, [self.content[item[0]:item[1]]])
                self.main_text.setText(self.content)


    def font_big(self):
        self.font_size += 1
        self.main_text.setFontPointSize(self.font_size)
        self.main_text.setText(self.content)

    def font_small(self):
        self.font_size -= 1
        self.main_text.setFontPointSize(self.font_size)
        self.main_text.setText(self.content)

    def update_back(self):
        random_color = QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        palette = QPalette()
        palette.setColor(QPalette.Base, random_color)
        self.main_text.setPalette(palette)


if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

截图

截图

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Jaxxhh886 + 1 + 1 好东西啊

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| wangzherongyao2 发表于 2024-12-18 20:08
coocoocoo3 发表于 2024-12-18 20:03
原来是阅读器。但是我在python里运行,读取小说,咋程序就没了?
不兼容?

你看下错误信息,还有代码有一处需要根据情况改动self.pattern1 = "第[1234567890]*章.*" 这个是匹配模式,根据txt来修改,可能是 self.pattern1 =  "第[一二三四五六七八九十]*章.*  
holm2008 发表于 2024-12-18 19:59
想试试,怎么下载?                                    
lifelike 发表于 2024-12-18 17:47
yrycw 发表于 2024-12-18 18:00
不错的一款阅读器
delphier 发表于 2024-12-18 18:14
优秀, 感谢分享,简洁无广告,自己做出来的东西就是好用
太阳tt123 发表于 2024-12-18 18:22
感谢分享
L57860598 发表于 2024-12-18 18:32
支持楼主。。。。
chouding68 发表于 2024-12-18 19:01
下载链接呢
coocoocoo3 发表于 2024-12-18 19:13
哪里有填网址?
是我眼花么?没找到?
wanghaiqi 发表于 2024-12-18 19:56
链接真的没找到~~~~~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-7 19:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表