问题描述
简单的代码,不起作用,还有什么需要做的吗? 这只是一个测试,我只想知道'volumemute'是否有效,其他特殊键(如“ capslock”和“ volumeup”)也不起作用。 “ volumemute”在做什么?会使系统静音吗?本来希望看到Mac的小音量窗口,但它也不会静音,例如,Firefox上的youtube视频...
import pyautogui
import time
confirm_window = pyautogui.alert()
if confirm_window == 'OK':
time.sleep(1)
pyautogui.press('volumemute') # Does not work
pyautogui.press('a') # Does work
pyautogui.press('b') # Does work
我已经尝试过此link上的解决方案,如果我将Phylliida的解决方案或kenorb的解决方案复制到新文件上,并调用相同示例的KeyPress(),则会发生相同的结果。
我还在pyautogui的github页面上看到mojave出现了权限问题,即使它不影响我,我还是在Accessibility中的列表中添加了PyCharm,Python Launcher和Terminal, image, 我希望能够在按下一个按钮同时执行其他操作(例如将光标移动到特定坐标等)时降低脚本中的音量。 另外,在2011年初的Macbook上,我可以升级OS达到最高水平
非常感谢
解决方法
嗯,这需要花点时间才能弄清楚。 :-)
发现错误:
事实证明pyautogui的众多问题之一是2015年以来的一个问题,抱怨press is not working for all keys in macOS,它已经在pull #213中提出了部分(!!)解决方案。在这种特定情况下,原始代码使用两个连续的if …
语句而不是if … elif …
来使代码中断。
如果您在GitHub上检查代码,则会发现.press()
方法是defined in init.py来引用依赖于平台的_keyup()
和_keydown()
{{3 }}。如果您从function calls defined here for macOS手动应用此修复程序,则仍然需要修复另一件事,
Pyautogui使用_keyup()
和_keydown()
中的所有行:
if key in special_key_translate_table:
但在执行此行之前,由于pull #213,“ key
”已转换为小写字母:
if len(key) > 1:
key = key.lower()
special_key_translate_table
this line in init.py的词典使用大写字母,例如“ KEYTYPE_MUTE
”,因此查找将无法正常工作!
修改代码:
首先,确定pyautogui代码在您的安装中的位置(即,确定站点软件包的安装位置)。最简单的方法是运行以下代码:
from pyautogui import press
press()
这应该引发如下错误消息:
Traceback (most recent call last):
File "pyautogui_test_2.py",line 6,in <module>
press()
File "/path/to/the/python/site-packages/pyautogui/__init__.py",line 586,in wrapper
returnVal = wrappedFunction(*args,**kwargs)
TypeError: press() missing 1 required positional argument: 'keys'
请注意,Traceback中的路径取决于您的安装,现在转到打开站点包(即“ / path / to / the / python / site-packages / pyautogui /”)中的pyautogui文件夹,然后在其中,将第219行附近的文件“ _pyautogui_osx.py”编辑为此:
def _keyDown(key):
if key.upper() in special_key_translate_table:
_specialKeyEvent(key.upper(),'down')
elif key not in keyboardMapping or keyboardMapping[key] is None:
return
else:
_normalKeyEvent(key,'down')
def _keyUp(key):
if key.upper() in special_key_translate_table:
_specialKeyEvent(key.upper(),'up')
elif key not in keyboardMapping or keyboardMapping[key] is None:
return
else:
_normalKeyEvent(key,'up')
既包含上述拉动#213的修复,也包含使用key.upper()
的更正查找功能。现在,您应该能够使用上述special_key_translate_table
字典中的所有键,例如通过在脚本中调用press(u'KEYTYPE_MUTE')
使系统音量静音。
请注意,所有特殊的键码也都在defined here上定义。