我有FigureCanvasWxAgg一个图表显示在框架上的实例.如果用户点击画布,FigureCanvasWxAgg则会显示另一个包含相同图形的新框架.到现在为止,关闭新帧会导致破坏图中的C++部分,使其无法用于第一帧.
我怎么能保存这个数字?复制模块中的Python深层复制在这种情况下不起作用.
提前致谢.
我有一个(单行)TextCtrl.用户将数据输入到此中.当他们按回车键时,需要提取该框的内容以便对其进行处理.我无法弄清楚如何抓住进入被按下.
根据该文档,与风格wx.TE_PROCESS_ENTER我TextCtrl设置,它应该在的盒子,我会再搭上被按下时输入生成wx.EVT_COMMAND_TEXT_ENTER事件.然而,wx.EVT_COMMAND_TEXT_ENTER似乎不存在(我得到"模块没有属性EVT_COMMAND_TEXT_ENTER),所以我有点卡住.谷歌搜索只是得到几个人抱怨wx.EVT_COMMAND_TEXT_ENTER不起作用,所以我想我需要另一种方式.
在此帮助页面上
http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/python.1.html
Apple说:
改变默认的PYTHON
运用
Run Code Online (Sandbox Code Playgroud)% defaults write com.apple.versioner.python Version 2.5运行python和pythonw命令时,将使版本2.5成为用户默认值(versioner是所用版本选择软件的内部名称).
这根本行不通!
tppllc-Mac-Pro:~ swirsky$ python --version
Python 2.7
tppllc-Mac-Pro:~ swirsky$ defaults write com.apple.versioner.python Version 2.5
tppllc-Mac-Pro:~ swirsky$ python --version
Python 2.7
Run Code Online (Sandbox Code Playgroud)
并且切换不使32位python成为默认值
64位支持
版本2.6支持64位执行(默认情况下处于启用状态).2.5版仅支持32位执行.
与Python的版本一样,python命令可以在32位和64位执行之间进行选择(当两者都可用时).使用:
Run Code Online (Sandbox Code Playgroud)% defaults write com.apple.versioner.python Prefer-32-Bit -bool yes使用户默认的32位执行(使用
/Library/Preferences/com.apple.versioner.python将设置系统范围的默认值).VERSIONER_PYTHON_PREFER_32_BIT也可以使用环境变量 (优先于首选项文件):Run Code Online (Sandbox Code Playgroud)% export VERSIONER_PYTHON_PREFER_32_BIT=yes #像伯恩一样的贝壳或
Run Code Online (Sandbox Code Playgroud)% setenv VERSIONER_PYTHON_PREFER_32_BIT yes #C型贝壳
我在这里下了一个rathole.我正试图让wxpython运行.但它不会在Apple Python 2.7上运行,因为没有64位碳支持,而且可靠性支持尚未在wx中完成.
===更新===
感谢你的帮助!这个谜团已经解决了.令我困惑的一件事是我在我的笔记本电脑(最近的i5 macbook pro)上运行(32位)wxpython没有问题,但它不能在我的桌面上运行(最近的i7 mac pro).
他们都有python 2.7,我认为它是相同的.但事实并非如此!
Mac Pro有x86_64版本
tppllc-Mac-Pro:~ swirsky$ file `which python`
/Library/Frameworks/Python.framework/Versions/2.7/bin/python: Mach-O …Run Code Online (Sandbox Code Playgroud) 我正在制作一个wxpython应用程序,我将使用各种冻结实用程序进行编译,以便为多个平台创建可执行文件.
该程序将成为基于图块的游戏引擎的地图编辑器
在这个应用程序中,我想提供一个脚本系统,以便高级用户可以修改程序的行为,如修改项目数据,将项目导出到不同的格式等.
我希望系统能像这样工作.
用户将他们希望运行的python脚本放入样式文本框中,然后按一个按钮执行脚本.
到目前为止,我很擅长这一切,这些都非常简单.从文本框中获取脚本作为字符串使用内置函数compile()将其编译为cod对象,然后使用exec语句执行脚本
script = textbox.text #bla bla store the string
code = compile(script, "script", "exec") #make the code object
eval(code, globals())
Run Code Online (Sandbox Code Playgroud)
问题是,我想确保此功能不会导致任何错误或错误,
如果脚本中有import语句.考虑到代码是用py2exe或py2app之类的东西编译的,这会导致任何问题吗?
我如何确保用户不能破坏程序的关键部分,如修改部分GUI,同时仍允许他们修改项目数据(数据保存在自己的模块中的全局属性中)?我认为这意味着修改传递给eval函数的全局变量dict.
如何确保此eval不会导致程序因长循环或无限循环而挂起?如何确保用户代码中引发的错误不会导致整个应用程序崩溃?
基本上,如何避免在允许用户运行自己的代码时可能出现的所有问题?
编辑:关于给出的答案
我觉得到目前为止任何答案都没有真正回答我的问题,是的,他们已经得到了部分回答,但并未完全回答.我很清楚,不可能完全停止不安全的代码.对于一个人(甚至是一个人)而言,人们过于聪明地想到绕过安全系统并阻止它们的所有方法.
事实上,如果他们这样做,我真的不在乎.我更担心一些人无意中打破了他们不知道的事情.如果有人真的想要他们可以通过脚本功能撕毁应用程序,但我不在乎.这将是他们的实例,他们创建的所有问题将在他们重新启动应用程序时消失,除非他们已经搞乱了HD上的文件.我想防止用户给某些东西愚蠢时出现的问题.
像IOError,SystaxErrors,InfiniteLoopErrors等.
现在关于范围的部分已得到解答.我现在明白如何定义可以从eval函数访问哪些函数和全局变量但是有没有办法确保如果它花费太长时间可以停止执行它们的代码?
也许是一个绿色线程系统?(绿色,因为它会让用户担心线程安全性)
此外,如果用户使用import module语句从甚至未在类的其余部分中使用的默认库加载模块.这会导致应用被Py2exe,Py2app或Freeze冻结的问题吗?如果他们称标准库的模态外?模态是否与冻结的可执行文件存在于同一目录中是否足够?
我想在没有创建新问题的情况下得到这些答案,但如果必须,我会这样做.
我想让我的GUI程序顶部框架垂直和水平对齐.
wx.Frame.__init__(self, parent=None, id= -1, title="Test Frame", pos=(-1, -1), size=(1280, 770), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX)
Run Code Online (Sandbox Code Playgroud)
我应该怎么做(除了计算以找到绝对位置)以pos=(-1, -1)使其显示在中间(无论是800*600还是1280*800等),还是需要一些其他属性设置?
我正在尝试读取一些图像(后来打算对它们执行某些任务),并且正在将图像读入内存.我想显示一个动画的'.gif'图片.为此我不得不使用Threads.现在它给出错误:
python: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
Run Code Online (Sandbox Code Playgroud)
有时它会给出错误:
python: Fatal IO error 0 (Success) on X server :0.0.
Run Code Online (Sandbox Code Playgroud)
(是错误消息几乎交替更改)我不知道为什么会发生此错误以及如何删除它.
import wx
from wx import animate
import thread
import os
class AniGif(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(300, 300))
buttonOk = wx.Button(self, id=3, label="Ok", pos=(75, 50), size=(50, 50))
self.Bind(wx.EVT_BUTTON, self.OnClick, id=3)
def OnClick(self, event) :
clock = "loading.gif"
showclock = wx.animate.GIFAnimationCtrl(self, -1, clock)
showclock.Play()
thread.start_new_thread(grabImages, ( ))
def grabImages():
global dirim …Run Code Online (Sandbox Code Playgroud) 我的问题是关于跨平台(Mac/Linux/Windows)分发GUI应用程序的容易性,我想知道使用户的工作最简单的那个.
我目前的理解是Tkinter应用程序对于用户来说是最容易的(安装),因为只要用户在她的框中安装了Python,我的应用程序就可以在该框上运行了.
对于用wxPython或pyQT编写的GUI应用程序,用户需要首先在她的盒子中安装wxWidget或QT,这是一个额外的步骤,然后安装我的GUI应用程序.(但我的Ubuntu盒子似乎默认安装了wxWidget库和QT库,这是一个规范还是只是Ubuntu发行版对用户更友好?我猜Windows和Mac可能不会通过defualt提供它们,即用户需要下载并安装它们作为额外步骤)
我需要做一个
slider = wx.Slider(self, 100, 25, 1, 100, (30, 60), (250, -1), wx.SL_HORIZONTAL)
Run Code Online (Sandbox Code Playgroud)

具有透明背景(因为它出现在具有不均匀背景的面板上).
更一般地说,如何才能将其外观改为这样的?

(.png如果需要,我可以使用小部件元素的文件.)
当我尝试安装wxPython时,它显示一个错误:
Run Code Online (Sandbox Code Playgroud)> The Installer could not install the software because there was no > software found to install.
我该如何解决?
用pip安装wxpython报错ModuleNotFoundError: No module named \'attrdict\'
py -3.10-64 -m pip install -U wxpython
\nCollecting wxpython\n Using cached wxPython-4.2.0.tar.gz (71.0 MB)\n Preparing metadata (setup.py) ... error\n error: subprocess-exited-with-error\n\n \xc3\x97 python setup.py egg_info did not run successfully.\n \xe2\x94\x82 exit code: 1\n \xe2\x95\xb0\xe2\x94\x80> [8 lines of output]\n Traceback (most recent call last):\n File "<string>", line 2, in <module>\n File "<pip-setuptools-caller>", line 34, in <module>\n File "C:\\Users\\Bernard\\AppData\\Local\\Temp\\pip-install-dokcizpt\\wxpython_662eefb4314c47eba7b194b4d07a8e18\\setup.py", line 27, in <module>\n from buildtools.config import Config, msg, opj, runcmd, canGetSOName, getSOName\n …Run Code Online (Sandbox Code Playgroud)