万能喊话器 Python 一键触达 3个版本 总有适合的!
hhs
撰写于 2024年 03月 11 日

嗯、、、

打扑克对门是个哈拉,还喷你。。

忍不了!

于是一个小代码
安装好各种库之后 ↓

import tkinter as tk
from tkinter import scrolledtext
import pyperclip
import keyboard
import random
import threading

class TextCopierApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Text Copier")

        self.text_box = scrolledtext.ScrolledText(root, height=15, width=50)
        self.text_box.pack()

        self.save_button = tk.Button(root, text="Save Text", command=self.save_text)
        self.save_button.pack()

        # 存储文本库
        self.text_lines = []

        # 设置热键,当按下'1'时阻止显示,并执行复制粘贴操作
        keyboard.add_hotkey('1', self.copy_and_paste, suppress=True)

    def save_text(self):
        # 获取文本框内容并分割为行
        text_content = self.text_box.get("1.0", tk.END).strip()
        self.text_lines = text_content.split('\n')
        print("Text saved.")

    def copy_and_paste(self):
        if self.text_lines:
            # 随机选择一行文本
            selected_text = random.choice(self.text_lines)
            # 复制到剪贴板
            pyperclip.copy(selected_text)
            # 在主线程之外执行粘贴,避免界面冻结
            self.paste_text()

    def paste_text(self):
        # 粘贴文本
        keyboard.send('ctrl+v')
        keyboard.send('enter')

# 创建Tkinter主窗口
root = tk.Tk()
app = TextCopierApp(root)
root.mainloop()

2024-03-11T14:00:42.png

2024-03-11T14:00:58.png

只需要按下数字“1”,自动选中文本 直接开喷~

上述版本可用


这里更方便操作,觉得还是增加一个自定义按键比较好一点

于是。。。

import tkinter as tk
from tkinter import scrolledtext, Label, Entry, Button
import pyperclip
import keyboard
import random
import threading

class TextCopierApp:
    def __init__(self, root):
        self.root = root
        self.root.title("文本复制器")

        self.text_box = scrolledtext.ScrolledText(root, height=15, width=50)
        self.text_box.pack()

        self.save_button = Button(root, text="保存文本", command=self.save_text)
        self.save_button.pack()

        self.hotkey_label = Label(root, text="输入热键(如 'ctrl+shift+a')然后按 '设置热键':")
        self.hotkey_label.pack()

        self.hotkey_entry = Entry(root)
        self.hotkey_entry.pack()

        self.set_hotkey_button = Button(root, text="设置热键", command=self.set_hotkey)
        self.set_hotkey_button.pack()

        self.hotkey_info = Label(root, text="未设置热键")
        self.hotkey_info.pack()

        # 存储文本库和当前热键
        self.text_lines = []
        self.current_hotkey = None  # 初始化时没有设置热键

    def save_text(self):
        text_content = self.text_box.get("1.0", tk.END).strip()
        self.text_lines = text_content.split('\n')
        print("文本已保存。")

    def set_hotkey(self):
        new_hotkey = self.hotkey_entry.get().strip()
        # 移除旧热键监听,如果有的话
        if self.current_hotkey and self.current_hotkey in keyboard.get_hotkey_name():
            keyboard.remove_hotkey(self.current_hotkey)
            self.hotkey_info.config(text=f"热键已移除: {self.current_hotkey}")

        # 设置新的热键,支持组合键
        self.current_hotkey = new_hotkey
        try:
            keyboard.add_hotkey(self.current_hotkey, self.copy_and_paste, suppress=True)
            self.hotkey_info.config(text=f"新热键已设置: {self.current_hotkey}")
        except ValueError as e:
            self.hotkey_info.config(text=f"设置热键失败: {e}")
        self.hotkey_entry.delete(0, tk.END)  # 清空输入框

    def copy_and_paste(self):
        if self.text_lines:
            selected_text = random.choice(self.text_lines)
            pyperclip.copy(selected_text)
            # 在新线程中执行粘贴,避免冻结界面
            threading.Thread(target=self.paste_text, daemon=True).start()

    def paste_text(self):
        # 模拟粘贴文本和回车操作
        keyboard.send('ctrl+v')
        keyboard.send('enter')

# 创建Tkinter主窗口
root = tk.Tk()
app = TextCopierApp(root)
root.mainloop()

这个版本有个bug

就是热键没有被取代

不过这也不错,我直接设置成108键,岂不是无限火力 ?


再迭代一波。
2024-03-11T14:24:12.png

看来已经好用了

热键也好用了,但就是需要手动输入

例如 ↓

2024-03-11T14:25:10.png

所以最终版本如下

import tkinter as tk
from tkinter import scrolledtext, Label, Entry, Button
import pyperclip
import keyboard
import random
import threading

class TextCopierApp:
    def __init__(self, root):
        self.root = root
        self.root.title("文本复制器")

        self.text_box = scrolledtext.ScrolledText(root, height=15, width=50)
        self.text_box.pack()

        self.save_button = Button(root, text="保存文本", command=self.save_text)
        self.save_button.pack()

        self.hotkey_label = Label(root, text="输入热键(如 'ctrl+shift+a')然后按 '设置热键':")
        self.hotkey_label.pack()

        self.hotkey_entry = Entry(root)
        self.hotkey_entry.pack()

        self.set_hotkey_button = Button(root, text="设置热键", command=self.set_hotkey)
        self.set_hotkey_button.pack()

        self.hotkey_info = Label(root, text="未设置热键")
        self.hotkey_info.pack()

        # 存储文本库和当前热键
        self.text_lines = []
        self.current_hotkey = None  # 初始化时没有设置热键

    def save_text(self):
        text_content = self.text_box.get("1.0", tk.END).strip()
        self.text_lines = text_content.split('\n')
        print("文本已保存。")

    def set_hotkey(self):
        new_hotkey = self.hotkey_entry.get().strip()

        # 使用threading确保键盘事件在后台线程中处理,避免阻塞UI
        threading.Thread(target=self.change_hotkey, args=(new_hotkey,), daemon=True).start()

    def change_hotkey(self, new_hotkey):
        # 移除旧热键监听,如果有的话
        if self.current_hotkey:
            try:
                keyboard.remove_hotkey(self.current_hotkey)
                self.hotkey_info.config(text=f"热键已移除: {self.current_hotkey}")
            except KeyError:
                # 如果尝试移除一个未注册的热键,忽略KeyError
                pass

        # 设置新的热键
        self.current_hotkey = new_hotkey
        try:
            keyboard.add_hotkey(self.current_hotkey, self.copy_and_paste, suppress=True)
            self.hotkey_info.config(text=f"新热键已设置: {self.current_hotkey}")
        except ValueError as e:
            self.hotkey_info.config(text=f"设置热键失败: {e}")
        self.hotkey_entry.delete(0, tk.END)  # 清空输入框

    def copy_and_paste(self):
        if self.text_lines:
            selected_text = random.choice(self.text_lines)
            pyperclip.copy(selected_text)
            # 在新线程中执行粘贴,避免冻结界面
            threading.Thread(target=self.paste_text, daemon=True).start()

    def paste_text(self):
        # 模拟粘贴文本和回车操作
        keyboard.send('ctrl+v')
        keyboard.send('enter')

# 创建Tkinter主窗口
root = tk.Tk()
app = TextCopierApp(root)
root.mainloop()

以上3个版本,输入完 内容,用回车换行,最后点击保存

为了以后直接拿来就用,于是做了封装

2024-03-11T14:34:15.png

大小还是可以的
2024-03-11T14:34:53.png
2024-03-11T14:35:07.png

直接运行就可以!

下课~!

下载地址
链接:https://pan.baidu.com/s/1_II3QUSXefyybaWkBPhPzw?pwd=jad4
提取码:jad4

由于是第二次发布,没做版本留存。。

提示!

2024-03-11T14:54:15.png

热键目前只能这样设置。。


版本不会再进行更新,反正基本上也够用了
2024-03-11T14:55:06.png
这里提示一下,输入wq等,没用+做连接 会报错,关了重开就行
2024-03-11T14:55:57.png
也就是说,只有两个按键中间用+做连接才行
2024-03-11T14:56:31.png

万能喊话器 Python 一键触达 3个版本 总有适合的!

嗯、、、

打扑克对门是个哈拉,还喷你。。

忍不了!

于是一个小代码
安装好各种库之后 ↓

import tkinter as tk
from tkinter import scrolledtext
import pyperclip
import keyboard
import random
import threading

class TextCopierApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Text Copier")

        self.text_box = scrolledtext.ScrolledText(root, height=15, width=50)
        self.text_box.pack()

        self.save_button = tk.Button(root, text="Save Text", command=self.save_text)
        self.save_button.pack()

        # 存储文本库
        self.text_lines = []

        # 设置热键,当按下'1'时阻止显示,并执行复制粘贴操作
        keyboard.add_hotkey('1', self.copy_and_paste, suppress=True)

    def save_text(self):
        # 获取文本框内容并分割为行
        text_content = self.text_box.get("1.0", tk.END).strip()
        self.text_lines = text_content.split('\n')
        print("Text saved.")

    def copy_and_paste(self):
        if self.text_lines:
            # 随机选择一行文本
            selected_text = random.choice(self.text_lines)
            # 复制到剪贴板
            pyperclip.copy(selected_text)
            # 在主线程之外执行粘贴,避免界面冻结
            self.paste_text()

    def paste_text(self):
        # 粘贴文本
        keyboard.send('ctrl+v')
        keyboard.send('enter')

# 创建Tkinter主窗口
root = tk.Tk()
app = TextCopierApp(root)
root.mainloop()

2024-03-11T14:00:42.png

2024-03-11T14:00:58.png

只需要按下数字“1”,自动选中文本 直接开喷~

上述版本可用


这里更方便操作,觉得还是增加一个自定义按键比较好一点

于是。。。

import tkinter as tk
from tkinter import scrolledtext, Label, Entry, Button
import pyperclip
import keyboard
import random
import threading

class TextCopierApp:
    def __init__(self, root):
        self.root = root
        self.root.title("文本复制器")

        self.text_box = scrolledtext.ScrolledText(root, height=15, width=50)
        self.text_box.pack()

        self.save_button = Button(root, text="保存文本", command=self.save_text)
        self.save_button.pack()

        self.hotkey_label = Label(root, text="输入热键(如 'ctrl+shift+a')然后按 '设置热键':")
        self.hotkey_label.pack()

        self.hotkey_entry = Entry(root)
        self.hotkey_entry.pack()

        self.set_hotkey_button = Button(root, text="设置热键", command=self.set_hotkey)
        self.set_hotkey_button.pack()

        self.hotkey_info = Label(root, text="未设置热键")
        self.hotkey_info.pack()

        # 存储文本库和当前热键
        self.text_lines = []
        self.current_hotkey = None  # 初始化时没有设置热键

    def save_text(self):
        text_content = self.text_box.get("1.0", tk.END).strip()
        self.text_lines = text_content.split('\n')
        print("文本已保存。")

    def set_hotkey(self):
        new_hotkey = self.hotkey_entry.get().strip()
        # 移除旧热键监听,如果有的话
        if self.current_hotkey and self.current_hotkey in keyboard.get_hotkey_name():
            keyboard.remove_hotkey(self.current_hotkey)
            self.hotkey_info.config(text=f"热键已移除: {self.current_hotkey}")

        # 设置新的热键,支持组合键
        self.current_hotkey = new_hotkey
        try:
            keyboard.add_hotkey(self.current_hotkey, self.copy_and_paste, suppress=True)
            self.hotkey_info.config(text=f"新热键已设置: {self.current_hotkey}")
        except ValueError as e:
            self.hotkey_info.config(text=f"设置热键失败: {e}")
        self.hotkey_entry.delete(0, tk.END)  # 清空输入框

    def copy_and_paste(self):
        if self.text_lines:
            selected_text = random.choice(self.text_lines)
            pyperclip.copy(selected_text)
            # 在新线程中执行粘贴,避免冻结界面
            threading.Thread(target=self.paste_text, daemon=True).start()

    def paste_text(self):
        # 模拟粘贴文本和回车操作
        keyboard.send('ctrl+v')
        keyboard.send('enter')

# 创建Tkinter主窗口
root = tk.Tk()
app = TextCopierApp(root)
root.mainloop()

这个版本有个bug

就是热键没有被取代

不过这也不错,我直接设置成108键,岂不是无限火力 ?


再迭代一波。
2024-03-11T14:24:12.png

看来已经好用了

热键也好用了,但就是需要手动输入

例如 ↓

2024-03-11T14:25:10.png

所以最终版本如下

import tkinter as tk
from tkinter import scrolledtext, Label, Entry, Button
import pyperclip
import keyboard
import random
import threading

class TextCopierApp:
    def __init__(self, root):
        self.root = root
        self.root.title("文本复制器")

        self.text_box = scrolledtext.ScrolledText(root, height=15, width=50)
        self.text_box.pack()

        self.save_button = Button(root, text="保存文本", command=self.save_text)
        self.save_button.pack()

        self.hotkey_label = Label(root, text="输入热键(如 'ctrl+shift+a')然后按 '设置热键':")
        self.hotkey_label.pack()

        self.hotkey_entry = Entry(root)
        self.hotkey_entry.pack()

        self.set_hotkey_button = Button(root, text="设置热键", command=self.set_hotkey)
        self.set_hotkey_button.pack()

        self.hotkey_info = Label(root, text="未设置热键")
        self.hotkey_info.pack()

        # 存储文本库和当前热键
        self.text_lines = []
        self.current_hotkey = None  # 初始化时没有设置热键

    def save_text(self):
        text_content = self.text_box.get("1.0", tk.END).strip()
        self.text_lines = text_content.split('\n')
        print("文本已保存。")

    def set_hotkey(self):
        new_hotkey = self.hotkey_entry.get().strip()

        # 使用threading确保键盘事件在后台线程中处理,避免阻塞UI
        threading.Thread(target=self.change_hotkey, args=(new_hotkey,), daemon=True).start()

    def change_hotkey(self, new_hotkey):
        # 移除旧热键监听,如果有的话
        if self.current_hotkey:
            try:
                keyboard.remove_hotkey(self.current_hotkey)
                self.hotkey_info.config(text=f"热键已移除: {self.current_hotkey}")
            except KeyError:
                # 如果尝试移除一个未注册的热键,忽略KeyError
                pass

        # 设置新的热键
        self.current_hotkey = new_hotkey
        try:
            keyboard.add_hotkey(self.current_hotkey, self.copy_and_paste, suppress=True)
            self.hotkey_info.config(text=f"新热键已设置: {self.current_hotkey}")
        except ValueError as e:
            self.hotkey_info.config(text=f"设置热键失败: {e}")
        self.hotkey_entry.delete(0, tk.END)  # 清空输入框

    def copy_and_paste(self):
        if self.text_lines:
            selected_text = random.choice(self.text_lines)
            pyperclip.copy(selected_text)
            # 在新线程中执行粘贴,避免冻结界面
            threading.Thread(target=self.paste_text, daemon=True).start()

    def paste_text(self):
        # 模拟粘贴文本和回车操作
        keyboard.send('ctrl+v')
        keyboard.send('enter')

# 创建Tkinter主窗口
root = tk.Tk()
app = TextCopierApp(root)
root.mainloop()

以上3个版本,输入完 内容,用回车换行,最后点击保存

为了以后直接拿来就用,于是做了封装

2024-03-11T14:34:15.png

大小还是可以的
2024-03-11T14:34:53.png
2024-03-11T14:35:07.png

直接运行就可以!

下课~!

下载地址
链接:https://pan.baidu.com/s/1_II3QUSXefyybaWkBPhPzw?pwd=jad4
提取码:jad4

由于是第二次发布,没做版本留存。。

提示!

2024-03-11T14:54:15.png

热键目前只能这样设置。。


版本不会再进行更新,反正基本上也够用了
2024-03-11T14:55:06.png
这里提示一下,输入wq等,没用+做连接 会报错,关了重开就行
2024-03-11T14:55:57.png
也就是说,只有两个按键中间用+做连接才行
2024-03-11T14:56:31.png


赞 (4)

猜您想看

评论区(1条评论)

我要评论


大名鼎鼎的博士生
LV2
  

这个可以 ୧(๑•̀◡•́๑)૭