摸鱼 小说 python exe 透明


前言

  下面介绍一个阅读小工具,可以实现对字符文件(txt等)的读写,并显示到tk窗口上,能够进行简单的翻页,查询,隐藏,设置透明度等功能。

效果图

read.exe

一、代码介绍

1.引入库

代码如下(示例):

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import ttk
from tkinter import font
import tkinter.colorchooser as colorchooser
from pynput.mouse import Listener
import threading

2.界面

界面由三部分组成:sampleapp,StartPage,pageone
使用容器container 来加载StartPage,pageone两个界面,实现窗口内切换


1 SampleApp

代码如下(示例):

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        global flag_w
        flag_w=True
        self.title("阅读")
        self.geometry("400x95+500+200")
        
        self.container = tk.Frame(self)
        self.container.pack(side="top", fill="both", expand=True)
        # self.attributes("-alpha", 0.9)  # 设置透明度
        self.resizable(False,False)
        # self.maxsize(450,100)qq
        # self.minsize(400,65)
        self.container.configure(bg="#fbfbfb")
        self.frames = {}
        self.start_page = StartPage(self.container, self)
        self.frames[StartPage] = self.start_page
        self.start_page.grid(row=0, column=0, sticky="nsew")
        self.bind("q", self.show_update)
    def show_update(self,event):
        global flag_w
        print(flag_w)
        if flag_w :
            self.attributes('-topmost', True)
            self.geometry("400x{}+500+200".format(self.winfo_height()))
            self.attributes("-alpha", 0.9)  # 设置透明度
            
            flag_w=False
        else:
            self.attributes("-alpha", 0)  # 设置透明度
            flag_w=True
    def show_page_one(self, filename):
        self.start_page.get_selected_item()
        self.start_page.combo.configure(state="disabled")
        self.page_one = PageOne(self.container, self, filename)
        self.frames[PageOne] = self.page_one

        self.page_one.grid(row=0, column=0, sticky="nsew")
        
        self.page_one.tkraise()
    def show_page_start(self):
        self.set_first_line_value()
        self.start_page = StartPage(self.container, self)
        self.frames[StartPage] = self.start_page
        self.start_page.grid(row=0, column=0, sticky="nsew")
        
        self.start_page.entry.delete(0, tk.END)
        self.start_page.entry.insert(0, filename)
        self.start_page.entry.config(fg="black")

        self.start_page.tkraise()

该处使用容器容纳两个界面


2 StartPage

class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent,bg="#fbfbfb")
        # controller.configure(bg="white")
        self.controller=controller
        global font_first
        font_first="微软雅黑"
        
        self.entry = tk.Entry(self, fg="gray", width=45,bg="white")
        self.entry.insert(0, "Double Button1 Select a File")
        self.entry.bind("<Double-Button-1>", self.open_file)
        # self.entry.pack(side="left", padx=15, pady=30)
        self.entry.grid(row=1, column=0,columnspan=2,padx=15, pady=22,sticky="nsew")
        button2 = tk.Button(self, text="Go", command=self.load_page_one,bg="#fbfbfb")
        # button2.pack(side="left")
        button2.grid(row=1, column=2)
         # 创建下拉选择列表
        self.combo = ttk.Combobox(self,width=13)
        # self.combo.pack(side="bottom",anchor="sw",padx=10)
        self.combo.grid(row=2, column=0,padx=15,sticky="w")
        # 设置下拉选择列表的选项
        self.combo['values'] = font.families()
        # 设置默认选中项
        self.combo.set(font_first)
        
        # 定义函数,用于获取当前选择的选项
        global color_first
        color_first="black"
        self.entry1 = tk.Entry(self, fg="gray", width=25)
        self.entry1.insert(0, "Select or input a font color")
        self.entry1.bind("<Double-Button-1>", self.choose_color)
        self.entry1.grid(row=2, column=1,padx=15)

        self.entry2 = tk.Entry(self, width=3)
        self.entry2.insert(0, "0.9")
        self.entry2.bind("<Button-1>", self.get_alpha)
        self.entry2.grid(row=2, column=2)
        self.filename=self.entry.get()
        self.controller.attributes("-alpha", float(self.entry2.get()))

3 PageOne

class PageOne(tk.Frame):
    def __init__(self, parent, controller, afilename):
        tk.Frame.__init__(self, parent,bg="#fbfbfb")
        global filename
        global current_page
        
        filename=afilename
        self.canvas = tk.Canvas(self, width=400, height=60,bg="#fbfbfb")
        self.canvas.pack(side="top", fill="both",expand=True)
        # self.button = tk.Button(self, text="UP",font=(font_first, 9), command=self.prev_page, width=3, background="white")
        self.label = tk.Label(self, bd=1, relief="solid",font=(font_first, 9), background="white", width=12)
        # self.button1 = tk.Button(self, text="Down",font=(font_first, 9), command=self.next_page, width=4, background="white")
        self.entry = tk.Entry(self ,width=23,font=(font_first, 9),fg="gray")
        self.entry.insert(0, "输入页码或章节查询")
        self.entry.bind("<FocusIn>", self.on_entry_click)
        self.button2 = tk.Button(self,font=(font_first, 9), text="F&B", command=self.find_value,width=4, background="white")
        
        # 显示按钮、标签、文本输入框和按钮
        # self.button.pack(side="left", padx=3, pady=1)
        self.label.pack(side="left", padx=10, ipadx=3, pady=2)
        # self.button1.pack(side="left", padx=5, pady=1)
        self.button2.pack(side="right", padx=10, pady=2)
        self.entry.pack(side="right", ipadx=2,padx=3, pady=2)
    
        self.controller = controller

        self.load_text(filename)
        if lines[0] == '\n' or not lines[0].strip().isdigit():
            current_page = 1
        else:
            current_page = lines[0]
        # print("current_page",current_page)
        # 绑定画布双击事件
        self.canvas.bind("<Double-Button-1>", self.hide_all)
        self.canvas.bind("<ButtonPress-1>", self.on_drag_start)
        self.canvas.bind("<B1-Motion>", self.on_drag_motion)
        # 绑定键盘事件
        self.controller.bind("<Up>", self.prev_page)
        self.controller.bind("<Down>", self.next_page)
           #鼠标事件
        mouse_thread = threading.Thread(target=lambda: Listener(on_scroll=self.on_scroll).start())
        mouse_thread.start()
        mouse_thread.join()
        self.display_page()

总结

这段代码是一个简单的基于 Tkinter 的 GUI 应用程序的一部分,用于阅读文本文件

	SampleApp 类是整个应用程序的主类,继承自 tk.Tk 类。在 __init__ 方法中,它设置了应用程序的基本属性,如标题、大小和容器。然后创建了一个 StartPage 实例,并将其放置在容器中。
	
	StartPage 类是应用程序的起始页面,继承自 tk.Frame 类。在 __init__ 方法中,它创建了一个文本输入框 entry,一个按钮 button2 和一个下拉选择列表 combo。用户可以在文本输入框中双击以选择文件,然后点击按钮来加载选定的文件。下拉选择列表用于选择字体。
	
	PageOne 类表示应用程序的第二个页面,继承自 tk.Frame 类。在 __init__ 方法中,它创建了一个画布 canvas,一个标签 label,一个文本输入框 entry 和一个按钮 button2。这个页面用于显示文件内容,并且用户可以在文本输入框中输入页码或章节来跳转到特定位置。

总体而言,这段代码实现了一个简单的文本阅读应用程序,用户可以选择文件,选择字体,并在文本文件中进行浏览和搜索,以及隐藏窗口等功能

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值