gpt4 book ai didi

python - 使用 python gui 中的按钮从先前选择的外部应用程序复制文本

转载 作者:行者123 更新时间:2023-12-05 07:32:11 25 4
gpt4 key购买 nike

我正在尝试构建一个轻量级的文本转语音 GUI,我可以在其中选择文本,例如 Word 或 Chrome,然后在我的 GUI 中按下一个按钮并让它读取。

我已经想出了创建 GUI 和让 TTS 正常工作的所有部分,但我无法获得正确的外形尺寸。我正在尝试模仿 Dragon Naturally Speaking 的文本转语音的形式因素,因为它很简单而且我已经习惯了。

以下是我无法开始工作的用户故事中缺失的步骤,按顺序排列:

1) 用户用鼠标突出显示应用程序(word、chrome、记事本等)中的文本并按下 gui 按钮

2) 来自外部应用程序的数据被提取为 UTF-8 并存储在一个名为“text”的变量中

我知道有几个窗口可以选择文本的问题。我的解决方案是从最近选择的窗口中提取选定的文本。

现在,笨拙的解决方法是按 Ctrl-C 组合我想阅读的任何文本,然后按下按钮,因为我可以从剪贴板中提取数据,但这确实是一种非常糟糕的用户体验,而且令人困惑。我尝试使用 pyperclip 获取将文本放入剪贴板的按钮,但它似乎不起作用,所以我不确定剪贴板的想法是否是死胡同。

def select_text(self):
#copy
pyperclip.copy() # doesn't work

#get text
win32clipboard.OpenClipboard()
text = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()

#say it!
self.say_text(text)

我似乎在任何地方都找不到这样的东西,而且我不知道从哪里开始。任何帮助,将不胜感激。

最佳答案

我想我明白了。这很丑陋,但是可以用;我是编码初学者,这对我来说只是一种爱好。老实说,我很高兴它能正常工作。

我已将命令绑定(bind)到 Alt_L+Q;稍后我可能会添加 Alt_R+Q,但我永远不会使用它们。出于某种原因,单独使用没有 L 或 R 的 Alt 不起作用。

此外,如果没有第一个 sleep 语句,它根本不起作用。第二个 sleep 语句是预防性的。

# set clipboard data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('No text is currently selected.')
win32clipboard.CloseClipboard()

text = None #this is what will be read
chg_rate = 0 #reading speed +/- 0.0 to 1.0
chg_vol = 0 #volume +/- 0.0 to 1.0

def get_text():
#current_window = win32gui.GetForegroundWindow()
import pythoncom
pythoncom.CoInitialize()
cw = win32com.client.Dispatch('WScript.Shell')
time.sleep(.7)
cw.SendKeys('^c') #copies text
time.sleep(.2)

#get text
win32clipboard.OpenClipboard()
text = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()

return text


#define the hot key
def create_hotkey():
# The key combination to check
COMBINATIONS = [
{keyboard.Key.alt_l, keyboard.KeyCode(char='Q')},
{keyboard.Key.alt_l, keyboard.KeyCode(char='q')}
]

# The currently active modifiers
current = set()

def execute():
text = get_text()
if not isinstance(text, str):
text = "Selected input is not UTF-8 text."
say_text(text)

def on_press(key):
if any([key in COMBO for COMBO in COMBINATIONS]):
current.add(key)
if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
execute()

def on_release(key):
if any([key in COMBO for COMBO in COMBINATIONS]):
current.remove(key)

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()

#run hotkey
create_hotkey()

关于python - 使用 python gui 中的按钮从先前选择的外部应用程序复制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com