wxPython:此程序需要访问屏幕。

19

我想在以下最小化应用程序中使用 Python GUI wx(可通过pip install wxPython安装):

import wx
app = wx.App()

运行此代码段将返回以下结果:

This program needs access to the screen. Please run with a Framework
build of python, and only when you are logged in on the main display
of your Mac.

有人知道如何帮助wx "访问屏幕",或者什么是 "Python框架构建" 吗?我会非常感激其他人能够提供关于这些问题的任何帮助!


我认为这篇博客文章可能有解决方法 https://blurringexistence.net/wxpython-using-virtualenvwrapper-on-osx.html。不过我没来得及看整篇文章,所以不是完全确定。 - Christian Dean
@lanery你能否给我更多关于如何在pythonw中运行脚本的细节? - pill45
@pill45 尝试运行 which pythonw(假设您在UNIX上)。如果您得到输出,那么这意味着pythonw二进制文件在您的路径上,因此您可以使用:pythonw myscript.py。如果您在计算机上安装了Anaconda,则应该可以访问pythonw。 - duhaime
1
当我在安装了wx的虚拟环境中运行pythonw时,它显示没有名为wx的模块,我错过了什么? - pill45
@pill45,你尝试过我在下面发布的解决方案了吗?听起来你需要从Python内部安装你的模块,就像我下面展示的那样... - duhaime
显示剩余3条评论
7个回答

17

在虚拟环境中,Mac上的wxPython会引发此错误,如wxPython网站所述

如果您没有在虚拟环境中运行程序,但仍然收到此错误,请尝试使用"pythonw"而不是"python"来运行使用wxPython的脚本。例如:

pythonw hello.py

请查看Python文档中以下页面的“4.1.2在MacOS上运行带GUI的脚本”部分,以了解这个Python怪癖的解释:https://docs.python.org/3/using/mac.html


11

这解决了问题,但它可能不是最美观的解决方案:

# install anaconda
install anaconda

# uninstall all versions of pythonWx
pip uninstall pythonWx -y
conda remove pythonwx

# install the python.app binary through conda
conda install python.app

# determine where the conda binary lives
which conda

# that previous command returns something like: 
# /Users/yaledhlab/anaconda3/bin/conda
# replace the /conda with /python.app
# and run the result in a terminal
/Users/yaledhlab/anaconda3/bin/python.app

# that should open a Python terminal (you know you're in the Python
# terminal if you see >>> as a prefix for your shell)
# import the python package manager and install wxPython to
# your python.app version of Python
import pip
pip.main(['install', 'wxPython'])

# exit the python interpreter
exit()

# run the program
/Users/yaledhlab/anaconda3/bin/python.app main.py

4

我遇到了同样的问题。为了在Mac上使用anaconda的python可执行文件和wxPython,您需要运行“pythonw”(而不是“python”)。这将调用与wxPython兼容的python可执行文件。但是为了使它在我的Mac上正常工作,我必须通过运行以下命令来更新我的anaconda软件包:

conda install anaconda #you might not need this if anaconda is up to date

跟着来:
conda install wxPython

安装后,“pythonw”可执行文件位于“//anaconda3/bin”目录中(您可能在其他位置安装了Anaconda)。然后,我可以使用“pythonw”运行任何导入/包含并使用wx的“program_with_xwPython.py”程序,如下所示:
pythonw program_with_xwPython.py # Note: 'python program_with_xwPython.py' gives the error still, you need to run 'pythonw'

您可以使用以下命令启动 Python REPL(即 >>> 提示符),并使用 wxPython 进行操作:

pythonw # instead of 'python'

这使得你可以导入wx并在python CLI中运行wx应用程序。对我来说,它一直像冠军一样运作良好。


2
我一直都可以使用它,包括更新到Catalina之后,我从未需要运行一些愚蠢的pythonw而不是python,并且所有启用了wx的脚本都能正常运行。
某个时候,我的环境出了问题,我想这可能是因为pip-tools开始删除我的软件包而没有任何警告。不确定发生了什么,但已经造成了损害,突然间我看到了臭名昭著的

此程序需要访问屏幕。请使用python的Framework版本,并且只在Mac的主显示器上登录时运行。

我使用pyenv管理我的环境,当前的Python环境是3.4.7。假设问题中的脚本是tst.py,我运行
$ python tst.py 
This program needs access to the screen. Please run with a
Framework build of python, and only when you are logged in
on the main display of your Mac.

我确保使用 brew 安装了 wxpython。
$ brew info wxpython
wxpython: stable 4.1.1 (bottled)
Python bindings for wxWidgets
https://www.wxpython.org/
/usr/local/Cellar/wxpython/4.1.1 (1,227 files, 91.8MB) *
  Poured from bottle on 2021-03-04 at 14:52:18
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/wxpython.rb
License: LGPL-2.0-or-later with WxWindows-exception-3.1
==> Dependencies
Required: freetype ✔, jpeg ✔, libpng ✔, libtiff ✔, numpy ✔, python@3.9 ✔
==> Analytics
install: 643 (30 days), 2,701 (90 days), 12,659 (365 days)
install-on-request: 604 (30 days), 2,523 (90 days), 9,914 (365 days)
build-error: 0 (30 days)

wxPython wiki建议:

原因是因为像PyInstaller这样的第三方工具可能需要使用--enable-framework构建CPython安装。您需要在终端中运行$ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.x.x。

因此,我从头开始重新安装了3.7.4

$ pyenv uninstall 3.7.4
$ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.7.4

尝试脚本再次运行。
$ python tst.py 
2021-03-04 15:14:44.138 Python[18815:404240] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to (null)

当然它并没有完全解决它,但至少烦人的错误已经消失了...

2

$ pyenv uninstall 3.9.2 $ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.9.2

这对我在Mac上的pyenv安装问题解决了。


1

官方的wxPython网站提供了一个解决方案:

如果你使用conda:

>> conda install python.app # 这将安装最新的pythonw

>> pythonw your_app.py


0

@duhaime

官方的wxPython网站上有一个适用于OSX的安装程序。

只需下载并安装即可。

您不需要使用anaconda来安装和运行这样一个简单的应用程序。


你有链接吗?这是我在他们的下载页面上看到的:https://www.wxpython.org/pages/downloads/ 如果你说的是 https://sourceforge.net/projects/wxpython/files/wxPython/3.0.2.0/,那些安装程序在我的机器上根本无法工作 - 它们在你的机器上工作了吗? - duhaime
@duhaime,是的,确实如此。我猜Robin重新设计了网站并将wxPython推到了PyPI位置。您在尝试从SF安装时遇到了什么问题?您是否向wxPython邮件列表报告了这个问题? - Igor
我没有记录并且无法回想起我遇到的错误,虽然我刚刚下载并构建了代码,并且它通过了(尽管我仍然不确定如何使用这些应用程序文件运行Python脚本)。话虽如此,我花了一个小时帮助一位教授运行老的学生代码;我不太可能再次使用这个库... - duhaime
1
@duhaime,如果这是使用旧版wxPython编写的旧代码,则需要努力将其更新到新版本。根据它曾经使用的版本,这种努力可能会很大。但这与其他任何库没有区别-在一切都可以编译和运行顺畅之前,您仍然需要修复一些问题。简化的唯一方法是随着新版本逐步升级,而您的教授没有这样做。因此,一个小时听起来像一个非常好的时间框架。 - Igor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接