基于PyQT5制作一个桌面摸鱼工具
作者:一枚程序圆 发布时间:2021-02-06 17:57:21
标签:PyQT5,桌面,摸鱼
前言
现在我能一整天都严肃地盯着屏幕,看起来就像在很认真地工作,
利用摸鱼,打开小说,可实行完美摸鱼,实时保存进度
用PYQT5 Mock一个摸鱼软件 类似于Thief
按键功能控制
q 退出
B 书签功能
F 增加字体大小
Shift F 减小字体
O 打开文件,现在仅仅支持 utf8格式的txt文件
主要功能
FlameLess Window 无边框窗口
一键快速退出
ini 文件读写
右键上下文菜单
核心代码
pyqt 实现功能还是比较顺畅的,总体功能实现代码量不到200行
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import sys,os
import configparser
# Q to quit app
# B Bookmark
# F increase Font size
# Shift F decrease Font size
# O Open *.txt file
class FisherReader(QMainWindow):
def __init__(self):
super().__init__()
# drag
self.pos =[0,0]
self.mouse_down = False
self.down = [0,0]
self.prev = [0,0]
# text
self.txtName = ''
self.text = []
self.index = 0
# style
self.show_info = False
self.font_size = 8
self.bgColor = QColor(255,255,255)
self.defPalette()
# self.read_Txt()
def mousePressEvent(self, event):
current = [event.pos().x(),event.pos().y()]
self.down = current
self.mouse_down = True
def mouseMoveEvent(self,event):
current = [event.pos().x(),event.pos().y()]
if self.mouse_down:
delta = [current[0]-self.down[0],current[1]-self.down[1]]
new = [self.pos[0]+delta[0],self.pos[1]+delta[1]]
self.move(new[0],new[1])
self.pos = new
# print(self.pos)
self.prev = current
def mouseReleaseEvent(self, event):
self.mouse_down = False
def keyPressEvent(self,event):
if event.key() == Qt.Key_Q:
app.quit()
if event.key() == Qt.Key_Down:
if self.index < len(self.text)-1:
self.index = self.index+1
self.update()
if event.key() == Qt.Key_Up:
if self.index > 0:
self.index = self.index-1
self.update()
if event.key() == Qt.Key_F:
if event.modifiers() & QtCore.Qt.ShiftModifier and self.font_size >2:
self.font_size -= 2
else:
self.font_size += 2
self.update()
if event.key() == Qt.Key_I:
self.show_info = not self.show_info
self.update()
if event.key() == Qt.Key_O:
self.open()
self.update()
if event.key() == Qt.Key_B:
self.addBookmark()
if event.key() == Qt.Key_R:
self.getBookmark()
def defPalette(self):
p = self.palette()
p.setColor(QPalette.Background,self.bgColor)
self.window().setPalette(p)
def paintEvent(self,event):
painter = QPainter(self)
painter.setRenderHints(QPainter.Antialiasing)
if len(self.text)>0:
painter.setFont(QFont('SimSun',self.font_size))
painter.drawText(QtCore.QRectF(10,10,600,50),Qt.AlignLeft,self.text[self.index])
if self.show_info:
painter.drawText(QtCore.QRectF(610,10,50,50),Qt.AlignLeft,"{}/{}".format(self.index+1,len(self.text)))
def open(self):
path, _ = QFileDialog.getOpenFileName(self, "打开文件",os.getcwd(), "Text files (*.txt)")
if path:
self.txtName = path
self.read_Txt_smart(path)
self.update()
def read_Txt(self,file):
with open(file,'r',encoding="UTF-8") as f:
self.text = f.readlines()
def cut(self,text,length):
return [text[i:i+length] for i in range(0,len(text),length)]
def wheelEvent(self, e):
if e.angleDelta().y() < 0:
if self.index < len(self.text)-1:
self.index = self.index+1
elif e.angleDelta().y() > 0:
if self.index > 0:
self.index = self.index-1
self.update()
def addBookmark(self):
config = configparser.ConfigParser()
path = "bookmark.ini"
config.add_section('bookmark')
config.set('bookmark','path',self.txtName)
config.set('bookmark','bookmark',str(self.index))
config.write(open(path,'w'))
def getBookmark(self):
config = configparser.ConfigParser()
path = "bookmark.ini"
config.read(path)
if config.has_option('bookmark','path'):
self.txtName = config.get('bookmark','path')
self.index = int(config.get('bookmark','bookmark'))
self.read_Txt_smart(self.txtName);
self.update()
def read_Txt_smart(self,file):
with open(file,'r',encoding="UTF-8") as f:
text_buffer = []
lines = f.readlines()
for line in lines:
cline = self.cut(line,30)
for cl in cline:
if len(cl)>1:
text_buffer.append(cl)
self.text = text_buffer
if __name__ == '__main__':
app = QApplication(sys.argv)
fisher = FisherReader()
fisher.resize(660,45)
fisher.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint)
fisher.show()
fisher.setWindowTitle("小鱼")
sys.exit(app.exec_())
来源:https://blog.csdn.net/weixin_45634056/article/details/122906211
0
投稿
猜你喜欢
- with语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下问题。这样做能避免错误并减少样板代码,因此API能更安全,更易
- 1 自动微分我们在《数值分析》课程中已经学过许多经典的数值微分方法。许多经典的数值微分算法非常快,因为它们只需要计算差商。然而,他们的主要缺
- 一、介绍我想做的是基于人脸识别的表情(情绪)分析。看到网上也是有很多的开源库提供使用,为开发提供了很大的方便。我选择目前用的比较多的dlib
- 本文实例讲述了Python简单实现TCP包发送十六进制数据的方法。分享给大家供大家参考,具体如下:举例: 0x12, 0x34可以直接拼成
- goland如果当前project用了版本控制器,其下面新建的所有的项目默认都是加入到版本控制里面,所以项目名称和文件都是红色的。解决办法:
- 本文实例讲述了mysql设置指定ip远程访问连接的方法,分享给大家供大家参考。具体实现方法如下:1. 授权用户root使用密码jb51从任意
- 1. 读取CSV文件 csv.reader()该方法的作用相当于就是通过 ',' 分割csv格式的数据,并将分割好的每行数据
- python之参数,定义时小括号中的参数,用来接收参数用的,称为 “形参”调用时小括号中的参数,用来传递给函数用的,称为 “实参”。1、思考
- 英文文档:format(value[, format_spec])Convert a value to a “formatted” repr
- 箱形图概念后面的图形都是一些专业的统计图形,当然也会是我们可视化的对象。箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显
- 任务队列主线程:正在执行的代码,会生成函数调用栈。macro-task(宏任务,新名:task)包括:script(整体代码), setTi
- 代码如下:--CAST 和 CONVERT 函数 Percentage DECLARE @dec decimal(5,3), @var va
- 这个技巧将教你如何用css做出漂亮的文本按钮,有活力的按钮将节省你很多制作图片的时间,也能让你一天的工作中成为一个快乐的人,让我们一起看看效
- 为了UED前端团队更好的协作开发同时提高项目编码质量,我们需要将Web前端使用工程化方式构建;目前需要一些简单的功能:
- CSS命名规范一.文件命名规范全局样式:global.css;框架布局:layout.css;字体样式:font.css;链接样式:link
- 本文实例讲述了Python中shape计算矩阵的方法。分享给大家供大家参考,具体如下:看到机器学习算法时,注意到了shape计算矩阵的方法接
- 前言PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了。PyInstall
- 网上找的协程安全的map都是用互斥锁或者读写锁实现的,这里用单个协程来实现下,即所有的增删查改操作都集成到一个goroutine中,这样肯定
- 以下内容来自CHATGPT,其中PGADMIN经实验,有效1、在MYSQL中使用:可以使用GROUP_CONCAT函数来实现相同名称的多行字
- 最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现。需求实现一个