
正文
pythonwx函数的简单介绍
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
通过自制的Python Wx问题,怎么解决
在github上下载了,安装了之后在idle上运行,好像是说Python不能上网。新手求助。现在问题已经解决,是ssl 证书的问题,不能用最新的
复制内容到剪贴板
代码:
sudo pip uninstall -y certifi
sudo pip install certifi==2015.04.28
bot=Bot()
Traceback (most recent call last):
File "D:\Python34\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen
chunked=chunked)
File "D:\Python34\lib\site-packages\urllib3\connectionpool.py", line 345, in _make_request
self._validate_conn(conn)
File "D:\Python34\lib\site-packages\urllib3\connectionpool.py", line 844, in _validate_conn
conn.connect()
File "D:\Python34\lib\site-packages\urllib3\connection.py", line 326, in connect
ssl_context=context)
File "D:\Python34\lib\site-packages\urllib3\util\ssl_.py", line 325, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "D:\Python34\lib\ssl.py", line 365, in wrap_socket
_context=self)
File "D:\Python34\lib\ssl.py", line 583, in __init__
self.do_handshake()
File "D:\Python34\lib\ssl.py", line 810, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Python34\lib\site-packages\requests\adapters.py", line 440, in send
timeout=timeout
File "D:\Python34\lib\site-packages\urllib3\connectionpool.py", line 630, in urlopen
raise SSLError(e)
urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Python34\lib\site-packages\itchat\utils.py", line 124, in test_connect
r = requests.get(config.BASE_URL)
File "D:\Python34\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "D:\Python34\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "D:\Python34\lib\site-packages\requests\sessions.py", line 502, in request
resp = self.send(prep, **send_kwargs)
File "D:\Python34\lib\site-packages\requests\sessions.py", line 612, in send
r = adapter.send(request, **kwargs)
File "D:\Python34\lib\site-packages\requests\adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
You can't get access to internet or wechat domain, so exit.
相关问答
Q1: python中gui编程wx,事件函数怎样调用
可以用Bind方法
self.Bind(wx.EVT_BUTTON,self.OnAppend,button)
self是继承framepythonwx函数的类
OnAppend是定义pythonwx函数的事件函数
button是在frame里增加pythonwx函数的按钮
这里有详细介绍
Q2: wxpython中bind怎么传递参数函数触发
最近捣鼓Python,也就自然捣鼓上了wxPython。我曾经用过Qt和Gtk+写GUI,但几乎所有的Python书都告诉我说最好用的是wxPython,我没有尝试PyQt和PyGtk就开始研究wxPython了。在Qt和Gtk+之间我更喜欢Qt,因为它跨平台做得很好,而且商业化也不错。但wxWidget给人的感觉就完全不同了。
如果说wxWidgets相对于Qt有什么优势的话,大概就只有体积较小了。从开发效率上看,如果不和Python组合真的比不上Qt;从商业支持上看wxWidgets根本没有。不过和Python组合之后,开发效率大大提高,虽然用来做很正式的商业软件并不合适,但写写小程序还是很方便的。
现在切入正题,wxWidgets是一个事件驱动的体系,对于触发的事件,需要给它挂上相应的事件处理函数。在Python中这个函数的形式是这样的:
wx.Frame.Bind(self, event, handler, source=None, id=-1, id2=-1)
在一般使用时,我们基本上只会给定event、handler和source,event是事件的名称,handler是处理函数,source是事件的发生者,比如一个Button1被单击而发生了EVT_BUTTON事件,如果我们用self.OnButton1()来处理,会这么写:
self.Bind(wx.EVT_BUTTON, self.OnButton1, self.Button1)
这里self是一个Frame(wxPython中的窗体这样的东西),而Button1是放在这个Frame下面的一个Button,self.OnButton1就是事件处理函数。而wxPython定死了事件处理函数的形式:
def handler(self,event):
...
事件处理函数只能接受两个参数,一个还是self。至于event,一看就知道是那个发生的事件。但这样就有一个问题了:如果我想批量创建一些按钮或者菜单键(我想这种事情是很普遍的),并且希望用同一个函数来处理它们,这个函数该怎样辨别是哪个按钮触发的事件呢?显然我们希望能多传一些参数。Qt实现这一点很容易,但wxWidgets就显得很棘手了。
我并没有用C++写过wxWidgets的程序——确切地讲是复制过一个example的,但是不知道是我英语太拆还是真的没有,我没能在wxWidgets的入门指南中找到编译指令,最后没法编译它。因此我不知道这个限制是不是C++也有,但是Python可以通过lambda来解决这个问题。以下的例子我用的是菜单。
首先我们建一个OnMenusClick函数:
def OnMenusClick(self, event, mark):
....
这个函数多接收一个mark,绑定的时候,就不是把OnMenusClick直接绑定上去,而是传递一个被lambda包装过的函数。下面这个例子就会建立一堆Menu的按键,并给他们编号,OnMenusClick就可以接收到它们的编号了:
menu=wx.Menu()
for i in range(0,N):
btn=menu.Append(wx.NewId(), str(i))
self.Bind(wx.EVT_MENU, lambda evt, mark=i : self.OnMenusClick(evt,mark) ,btn )
完成了!是不是感觉有点magic?关键在于这句lambda
lambda evt, mark=i : self.OnMenusClick(evt,mark)
这句实际上产生了只接收evt一个参数的函数,并将其传递给了self.OnMenusClick,这样就能够实现给事件处理函数传递更多参数的目的了。
Q3: 如何用python调用wxpython写的下拉框中的选项
你需要把你的ComboBox绑定(bind)一个动作,也就是一个需要执行的函数。把这个函数写成你需要的功能就可以了。
Q4: python 编写gui界面有哪些
安装wxPython
下面是wxPython特别基础的使用方法pythonwx函数,将以一个小程序为例来说明,它的功能是在一个文本框中输入文件名,点击open按钮,会在另一个文本框中显示其内容,可以进行修改,点击save可以保存修改。
wxPython的使用简介
创建应用程序对象:wx.App()
app=wx.App()
app.MainLoop()
窗口/框架:wx.Frame()
win=wx.Frame(None,title='example')
win.Show()
组件
按钮:wx.Button()
关键字label设置标签:
btn=wx.Button(win,label='open')
绑定事件:
btn.Bind(wx.EVT_BUTTON,load)
文本控件:wx.TextCtrl()
关键字style有wx.TE_MULTILINE(垂直滚动条),wx.HSXROLL(水平滚动条):
filename=wx.TextCtrl(win,style=wx.TE_MULTILINE|wx.HSXROLL)
同时pythonwx函数我们可以在读取或者写入其内容:
filename.GetValue() filename.SetValue('string')
布局:使用尺寸器(sizer)
wx.BoxSizer的原理是创建一个箱子一样的东西,只能横着或者竖着放组件,一个一个的加进去,除了基本大小外其余空间按比例分配。加完一行行的箱子后,创建一个竖着的箱子,将这些横着的箱子(也可以是其pythonwx函数他组件)加进去。
*背景组件:wx.Panel()
以窗口为参数构建,所有的组件依附其上,在设置完尺寸器后,使用bkg.SetSizer(box)
尺寸器的构建函数:wx.BoxSizer()
有一个决定它是垂直还是水平的参数(wx.HORIZONTAL水平,wx.VERTICAL垂直),默认为水平。
box=wx.BoxSizer(wx.VERTICAL)
Add方法
proportion参数决定这个组件在剩余空间中的分配比例,flag参数有wx.EXPAND(会确保组件会扩展到分配的空间里),wx.LEFT,wx.RIGHT,wx.TOP,wx.BOTTOM,wx.ALL(这五个决定边框参数会应用到那个边),border参数会确定边框的大小。
完整版的源代码如下:
#coding=utf-8
import wx
#设置函数
def load(event):
f=open(filename.GetValue(),'r')
content.SetValue(f.read())
f.close()
def save(event):
f=open(filename.GetValue(),'w')
f.write(content.GetValue())
f.close()
app=wx.App()
win=wx.Frame(None,title='simple editor',size=(410,330))
bkg=wx.Panel(win)
loadbutton=wx.Button(bkg,label='Open')
loadbutton.Bind(wx.EVT_BUTTON,load)
savebutton=wx.Button(bkg,label='Save')
savebutton.Bind(wx.EVT_BUTTON,save)
filename=wx.TextCtrl(bkg)
content=wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)
hbox=wx.BoxSizer()
hbox.Add(filename,proportion=1,flag=wx.EXPAND)
hbox.Add(loadbutton,proportion=0,flag=wx.LEFT,border=5)
hbox.Add(savebutton,proportion=0,flag=wx.LEFT,border=5)
vbox=wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion=0,flag=wx.ALL,border=5)
vbox.Add(content,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)
bkg.SetSizer(vbox)
win.Show()
app.MainLoop()`
Q5: python wxpython/Image模块的问题
wx的Image中确实没有getNewBitmap这个函数。
你可以尝试一下wx.py.images模块下的getPyBitmap()函数,应该效果差不多。
import wx.py.images
help(wx.py.images.getPyBitmap)
Help on function getPyBitmap in module wx.py.images:
getPyBitmap(shellName='PyCrust')
====================================
或者你详细告知一下你要达到什么效果,应该能找到合适的替代函数或方法。
希望能帮到你!
关于pythonwx函数和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







