基于PyQT5制作一個(gè)桌面摸魚工具
前言
現(xiàn)在我能一整天都嚴(yán)肅地盯著屏幕,看起來就像在很認(rèn)真地工作,
利用摸魚,打開小說,可實(shí)行完美摸魚,實(shí)時(shí)保存進(jìn)度
用PYQT5 Mock一個(gè)摸魚軟件 類似于Thief
按鍵功能控制
q 退出
B 書簽功能
F 增加字體大小
Shift F 減小字體
O 打開文件,現(xiàn)在僅僅支持 utf8格式的txt文件
主要功能
FlameLess Window 無邊框窗口
一鍵快速退出
ini 文件讀寫
右鍵上下文菜單
核心代碼
pyqt 實(shí)現(xiàn)功能還是比較順暢的,總體功能實(shí)現(xiàn)代碼量不到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_())到此這篇關(guān)于基于PyQT5制作一個(gè)桌面摸魚工具的文章就介紹到這了,更多相關(guān)PyQT5桌面摸魚工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python網(wǎng)絡(luò)編程之TCP通信實(shí)例和socketserver框架使用例子
這篇文章主要介紹了python網(wǎng)絡(luò)編程之TCP通信實(shí)例和socketserver框架使用例子,需要的朋友可以參考下2014-04-04
Pycharm中Python環(huán)境配置常見問題解析
這篇文章主要介紹了Pycharm中Python環(huán)境配置常見問題,結(jié)合圖文形式分析了Pycharm中Python環(huán)境配置模塊路徑問題、虛擬環(huán)境創(chuàng)建、配置遠(yuǎn)程服務(wù)器、連接數(shù)據(jù)庫等常見問題與操作方法,需要的朋友可以參考下2020-01-01
python生成每日報(bào)表數(shù)據(jù)(Excel)并郵件發(fā)送的實(shí)例
今天小編就為大家分享一篇python生成每日報(bào)表數(shù)據(jù)(Excel)并郵件發(fā)送的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
python中把嵌套的列表合并成一個(gè)列表方法總結(jié)
python中l(wèi)ist這種數(shù)據(jù)結(jié)構(gòu)很常用到,下面這篇文章主要給大家介紹了關(guān)于python中把嵌套的列表合并成一個(gè)列表方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
python使用PIL縮放網(wǎng)絡(luò)圖片并保存的方法
這篇文章主要介紹了python使用PIL縮放網(wǎng)絡(luò)圖片并保存的方法,涉及Python操作網(wǎng)絡(luò)圖片的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Python基于pandas爬取網(wǎng)頁表格數(shù)據(jù)
這篇文章主要介紹了Python基于pandas獲取網(wǎng)頁表格數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Python高級(jí)技巧之利用psutil和subprocess實(shí)現(xiàn)程序監(jiān)控與管理
本文介紹了如何使用Python的psutil和subprocess模塊監(jiān)控程序運(yùn)行狀態(tài),并提供了一個(gè)案例腳本,用于監(jiān)控目標(biāo)程序并在停止時(shí)自動(dòng)重啟,詳細(xì)介紹了subprocess模塊的基本用法和psutil模塊的系統(tǒng)信息獲取、進(jìn)程管理及資源監(jiān)控功能,需要的朋友可以參考下2024-09-09
Python將GIF動(dòng)圖轉(zhuǎn)換為Base64編碼字符串的步驟詳解
在Web開發(fā)中,有時(shí)需要將圖像文件(如GIF動(dòng)圖)轉(zhuǎn)換為Base64編碼的字符串,以便在HTML或CSS中直接嵌入圖像數(shù)據(jù),本文給大家就介紹了一個(gè)簡單的教程,教你如何使用Python將GIF動(dòng)圖轉(zhuǎn)換為Base64編碼的字符串,需要的朋友可以參考下2025-02-02
Python中AI圖像識(shí)別實(shí)現(xiàn)身份證識(shí)別
圖像識(shí)別說白了就是把一張照片上面的文字進(jìn)行提取,提供工作效率,本文主要介紹了Python 身份證識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

