嗯、、、
打扑克对门是个哈拉,还喷你。。
忍不了!
于是一个小代码
安装好各种库之后 ↓
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()
只需要按下数字“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键,岂不是无限火力 ?
再迭代一波。
看来已经好用了
热键也好用了,但就是需要手动输入
例如 ↓
所以最终版本如下
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个版本,输入完 内容,用回车换行,最后点击保存
为了以后直接拿来就用,于是做了封装
大小还是可以的
直接运行就可以!
下课~!
下载地址
链接:https://pan.baidu.com/s/1_II3QUSXefyybaWkBPhPzw?pwd=jad4
提取码:jad4
由于是第二次发布,没做版本留存。。
提示!
热键目前只能这样设置。。
版本不会再进行更新,反正基本上也够用了
这里提示一下,输入wq等,没用+做连接 会报错,关了重开就行
也就是说,只有两个按键中间用+做连接才行
这个可以 ୧(๑•̀◡•́๑)૭