- 浏览: 235421 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hnraysir:
必须登录评论下,谢谢。by elesos.com
分库和分表 -
化蝶自在飞:
命运使然.前生来世都注定了的.
贫穷是罪恶之源 -
Kidwind:
出现这样的错误ViewDoesNotExist at /con ...
django的jsCalendar的widget -
hanyh:
我的项目比较小,就直接写在views.py里面了。你出现的是什 ...
django的jsCalendar的widget -
Kidwind:
请问JsCalendarWidget应该放在哪个位置,我的是放 ...
django的jsCalendar的widget
前些天wxpython做得简单代码,目标是:
比如说c:\photos\....下面有很多头像图片,这些图片在上面或下面有一个圆点,呈现图片一段时间,判断圆点在上面还是下面,按1,2进行反应,记录反应时间。
注:是帮朋友进行孤独症儿童注意力分配实验写的,后面因为在处理*.gif图片的时候响应速度不够好,改为用delphi7写了。
程序涉及:
wxpython
事件响应
图片缩放和GIF动画操作
比如说c:\photos\....下面有很多头像图片,这些图片在上面或下面有一个圆点,呈现图片一段时间,判断圆点在上面还是下面,按1,2进行反应,记录反应时间。
注:是帮朋友进行孤独症儿童注意力分配实验写的,后面因为在处理*.gif图片的时候响应速度不够好,改为用delphi7写了。
程序涉及:
wxpython
事件响应
图片缩放和GIF动画操作
# -*- coding: cp936 -*- import time import wx,os import wx.animate from operator import or_ from func import * from threading import * class M(object): idx = 0 total = 0 right = 0 wrong = 0 starticker = 0 #开始时间 steps = [] answer = 0 pause = 1000 pre = 'bmp' #0 is bmp,1 is if,2 is text class FullScreenPanel(wx.Panel): def __init__(self,parent): wx.Panel.__init__(self,parent,name="FullScreenPanel",style= wx.DEFAULT_FRAME_STYLE | wx.WANTS_CHARS ) self.SetBackgroundColour('black') self.TrialBtn = wx.Button(self,label="练习") self.TrialBtn.Bind(wx.EVT_BUTTON,self.BeginTrial) self.TestBtn = wx.Button(self,label="测试") self.TestBtn.Bind(wx.EVT_BUTTON,self.BeginTest) sizer = wx.BoxSizer(orient=wx.VERTICAL) sizer.AddStretchSpacer() sizer.Add(self.TrialBtn,0, wx.ALIGN_CENTER ) sizer.Add(self.TestBtn,0, wx.ALIGN_CENTER ) sizer.AddStretchSpacer() self.SetSizer(sizer) self.Layout() def hideImg(self): try: self.curImg.Show(False) except: pass def hideGif(self): try: self.curGif.Stop() self.curGif.Close() self.curGif.Show(False) except: print "hide gif error" pass def hideText(self): try: self.curText.Show(False) except: pass def KeyDownResponse(self,evt): code = evt.GetKeyCode() if code in (49,50): self.stopTimer() self.Bind(wx.EVT_KEY_DOWN,self.KeyDownNull) if code == 49: code = 1 else: code = 2 if code == M.answer: slapedTime = time.time() - M.starticker self.show(response['right']) M.right = M.right + 1 M.total = M.total + 1 rate = M.right/float(M.total) else: slapedTime = time.time() - M.starticker self.show(response['wrong']) M.wrong = M.wrong + 1 M.total = M.total + 1 rate = M.right/float(M.total) text = "正确率:%.3f 耗时:%.3f" % (rate,slapedTime) if self.practice: self.addText(text) self.fp.write(text+"\n") self.timer = wx.CallLater(M.pause,self.next) else: pass def addText(self,text): mm=wx.DisplaySize() x0 = 100 y0 = 600 self.curText = wx.StaticText(self,-1,text,(x0,y0),(160,0),wx.ALIGN_CENTER) font=wx.Font(18,wx.DECORATIVE,wx.NORMAL,wx.NORMAL) self.curText.SetFont(font) self.curText.SetForegroundColour("white") self.curText.SetBackgroundColour("black") self.curText.Show(True) def KeyDownNull(self,evt): pass def showText(self,text): mm=wx.DisplaySize() x0 = (mm[0] - 60) / 2 y0 = (mm[1] - 60) / 2 self.curText = wx.StaticText(self,-1,text,(x0,y0),(160,0),wx.ALIGN_CENTER) font=wx.Font(28,wx.DECORATIVE,wx.NORMAL,wx.NORMAL) self.curText.SetFont(font) self.curText.SetForegroundColour("white") self.curText.SetBackgroundColour("black") self.curText.Show(True) def showBmp(self,fpath): try: self.curImg.Show(False) except: pass mm=wx.DisplaySize() img = wx.Image(fpath, wx.BITMAP_TYPE_BMP) x0 = (mm[0] - img.GetWidth()) / 2 y0 = (mm[1] - img.GetHeight()) / 2 wxBitmap = img.ConvertToBitmap() # self.curImg.SetBitmap(wxBitmap) self.curImg = wx.StaticBitmap(self, -1, img.ConvertToBitmap(), (x0,y0), (img.GetWidth(), img.GetHeight())) self.curImg.Show(True) print "end.."+fpath def showGif(self,fpath): mm=wx.DisplaySize() img = wx.Image(fpath, wx.BITMAP_TYPE_GIF) x0 = (mm[0] - img.GetWidth()) / 2 y0 = (mm[1] - img.GetHeight()) / 2 self.curGif = wx.animate.GIFAnimationCtrl(self, -1, fpath, (x0,y0), (img.GetWidth(), img.GetHeight())) self.curGif.GetPlayer().UseBackgroundColour(True) self.curGif.Play() def show(self,fpath): type = getType(fpath) self.hideText() self.hideGif() if not type == M.pre: if type == "gif": self.hideText() self.hideImg() self.hideGif() elif type == "bmp": self.hideGif() self.hideText() else: self.hideImg() self.hideGif() M.pre = type print 'show '+fpath if type == "bmp": self.hideText() self.showBmp(fpath) elif type == "gif": self.hideText() self.showGif(fpath) elif type == "": self.showText(fpath) def stopTimer(self): self.timer.Stop() def timeout(self): self.stopTimer() self.Bind(wx.EVT_KEY_DOWN,self.KeyDownNull) self.show(response['timeout']) M.total += 1 rate = M.right / float(M.total) slapedTime = time.time() - M.starticker text = "正确率:%.3f %.3f" % (rate,slapedTime) if self.practice: self.addText(text) self.fp.write(text+"\n") self.timer = wx.CallLater(M.pause,self.next) def next(self): idx = M.idx if idx > len(M.steps)-1: self.stopTimer() print "over" return "" print 'current idx %s' %idx opType = M.steps[idx][0] fpath = M.steps[idx][1] type = getType(fpath) sepTime = M.steps[idx][2] M.idx = idx+1 self.show(fpath) if opType == 0: #退出 self.Bind(wx.EVT_KEY_DOWN,self.KeyDownOver) if opType == 1: #等待space self.Bind(wx.EVT_KEY_DOWN,self.KeyDownTrigger) elif opType in (2,3): #空操作 self.Bind(wx.EVT_KEY_DOWN,self.KeyDownNull) self.timer = wx.CallLater(sepTime, self.next) elif opType == 4: #等待反映,1500ms 后 self.Bind(wx.EVT_KEY_DOWN,self.KeyDownResponse) #多做一次也无所谓,让逻辑 M.starticker = time.time() self.timer = wx.CallLater(sepTime, self.timeout) elif opType == 9: M.answer = M.steps[idx][3] self.Bind(wx.EVT_KEY_DOWN,self.KeyDownResponse) self.timer = wx.CallLater(sepTime, self.next) def KeyDownOver(self,evt): self.stopTimer() self.hideGif() self.hideText() self.hideImg() self.TrialBtn.Show() self.TestBtn.Show() try: self.fp.close() except: pass M.steps = [] M.idx = 0 M.total = 0 M.right = 0 M.wrong = 0 M.starticker = 0 #开始时间 M.steps = [] M.answer = 0 def KeyDownTrigger(self,evt): if evt.GetKeyCode() == 32: self.next() def getSavePath(self): sp = time.strftime("%Y-%m-%d-%H-%M-%S",time.localtime())+".txt" return os.path.join(os.getcwd(),sp) def BeginTest(self,evt): fpath = self.getSavePath() self.fp = open(fpath, 'w') self.practice = False self.TrialBtn.Hide() self.TestBtn.Hide() M.steps = getSteps(testConf) print M.steps self.next() self.FullScreen(evt) def BeginTrial(self,evt): fpath = self.getSavePath() self.fp = open(fpath, 'w') self.practice = True self.TrialBtn.Hide() self.TestBtn.Hide() M.steps = getSteps(trialConf) self.next() self.FullScreen(evt) def GetFlags(self): res = [] val = "FULLSCREEN_ALL" res.append(getattr(wx,val)) return reduce(or_,res,0) def FullScreen(self,evt): top = self.GetTopLevelParent() top.OnFullScreen(evt) class MainFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, wx.ID_ANY, 'Test FullScreen', size=(600, 400)) self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) self.client = FullScreenPanel(self) mbar = wx.MenuBar() the_menu = wx.Menu() fullscreenMI = the_menu.Append(wx.ID_ANY,"Full Screen\tF12","Toggles Full Screen Mode") mbar.Append(the_menu,"File") self.SetMenuBar(mbar) self.Bind(wx.EVT_MENU,self.OnFullScreen,id=fullscreenMI.GetId()) def OnCloseWindow(self, event): self.Destroy() def OnFullScreen(self,event): flags = self.client.GetFlags() self.ShowFullScreen(not self.IsFullScreen(),flags) class MainApp(wx.App): def OnInit(self): self.main = MainFrame(None) self.main.Show() self.SetTopWindow(self.main) return True def main(): application = MainApp(redirect=False) application.MainLoop() if __name__=='__main__': main()
# -*- coding: cp936 -*- import os import random import wx def opj(path): st = apply(os.path.join, tuple(path.split('/'))) if path.startswith('/'): st = '/' + st return st imgTypeDict = { 'bmp':wx.BITMAP_TYPE_BMP, 'gif':wx.BITMAP_TYPE_GIF, 'png':wx.BITMAP_TYPE_PNG, 'jpg':wx.BITMAP_TYPE_JPEG } #获取后缀 def getType(o): if o.rfind(".") > -1: idx=o.rindex(".")+1 return o[idx:].lower() else: return "" p1 = opj('photos/right.bmp') p2 = opj('photos/wrong.bmp') p3 = opj('photos/no response.bmp') response = { 'right':p1, 'wrong':p2, 'timeout':p3 } sep = (2,'+',1000) sep0 = (2,'',1000) trialConf = ( (1,'photos/welcome.bmp'), (1,'photos/instruction.bmp'), (2,'+',1), #1000ms 文本 (3,'photos/practice/face1', 400,200,1500), #探测的文件目录时间(面空时间,探测点时间,等待回答时间) (0,'photos/goodbye.bmp',5000) ) testConf = ( (1,'photos/welcome.bmp'), (1,'photos/instruction.bmp'), (2,'+',1000), #1000ms 文本 (3,'photos/donghua', 400,50,1500), #探测的文件目录时间(面空时间,探测点时间,等待回答时间) (0,'photos/goodbye.bmp',5000) ) def getSteps(conf): steps=[] for x in conf: type = x[0] img = x[1] if type == 0: #end item = (0,opj(x[1]),-1) steps.append(item) if type == 1: #单个图片 item = (1,opj(x[1]),-1) #-1 means infinate steps.append(item) elif type == 2: # item = (2,x[1],x[2]) #内容,时间 steps.append(item) elif type == 3: dir1 = x[1] t1 = x[2] t2 = x[3] t3 = x[4] face=[] probe=[] for root, dirs, files in os.walk(dir1, topdown=False): for name in files: if name.endswith(".gif") or name.endswith(".bmp"): face.append(opj(os.path.join(root, name))) face.sort() print face count = len(face) i=0 while(i<count): curImg = face[i] i += 1 nextImg = face[i] if nextImg.find("_2") > 0: #存在2,就是下面有点 answer = 2 else: answer = 1 i += 1 curItem = (curImg,nextImg,answer) probe.append(curItem) # print face random.shuffle(probe) i=0 count = len(probe) # print probe while(i<count): curItem = probe[i] item = (3,curItem[0],t1) steps.append(item) item = (9,curItem[1],t2,curItem[2]) #马上要激活keyboard反应,并置相应的时间处理函数 #(类型4需要响应,图片路径,呈现时间,正确答案,超时时间, steps.append(item) item = (4,curItem[0],t3) steps.append(item) steps.append(sep0) steps.append(sep) i += 1 return steps
发表评论
-
pycrust真是个非常棒的包
2010-02-11 15:31 1451看wxpython in action相关的那一章,非常灵活的 ... -
等一次给rsplit加maxsplit参数
2010-02-05 13:57 1483用python很长时间,一直使用简单的split() 今天一用 ... -
email地址hash分片的python模块
2010-02-03 15:50 4577为了提高hash的速度,使用扩展模块。 #include ... -
ip地址反查python模块编写
2010-02-02 13:47 2176通过IP地址反查归属地的python模块 业务逻辑由其它C++ ... -
generator
2010-02-01 23:58 0generator是一强大的工具,用来处理管道,流等数据 i ... -
tandalone-django-scripts
2010-01-20 17:11 649http://www.b-list.org/weblog/20 ... -
doctest写测试非常爽:)
2009-11-12 17:57 1653最近用django作点小项目,直接使用doctest,用起来真 ... -
什么时候用save什么时候用signal
2009-11-05 16:45 912Always use the redefinition of ... -
自定义save方法避免名字重复
2009-11-05 16:26 921class CategoryNameRepeated( ... -
使用signal自动添加profile
2009-11-05 16:23 873class Profile(models.Model): ... -
python代码缩进的解决方案
2009-10-15 16:03 1617这个不是Python的问题,不管你用那个编程语言都会碰到这个问 ... -
python使用struct解析结构体
2009-10-14 23:20 5468http://blog.chinaunix.net/u2/79 ... -
http://blog.chinaunix.net/u2/79621/showart_1210923.html
2009-10-14 00:39 0http://blog.chinaunix.net/u2/79 ... -
udp server
2009-10-13 23:14 1065#!/usr/bin/env python import ... -
python网络编程1
2009-10-11 23:01 1298python的sendall和c的send对比 pyth ... -
工作时间记录
2009-09-06 18:27 816RT 9.6日4:30-->6:30两小时,创建工程数据 ... -
object_list参数导致的404
2009-07-13 21:33 897@login_required def issue_li ... -
django update 错误
2009-07-07 10:35 1112def issue_save(request): ... -
django的jsCalendar的widget
2009-07-02 10:47 1804要在form中输入时间 class JsCalendarW ... -
判断是否是素数
2009-06-05 11:47 955¬∃k ∈ [2, n) : n ≡ 0 mod k ...
相关推荐
本例移植自开源例程JMine 请在程序所在目录使用python PyMine.py启动例程需要先安装Python 3.11和wxPython 4.2Python WxPython开源扫雷游戏PyMine新版1.5迁徙到Python 3.11和wxPython 4.2。并将所有图像放大一倍,以...
wxPython是Python的一种扩展,是一个开源的GUI(图形用户界面)库,它为Python提供了一系列的图形控件和框架,让开发人员能够创建优雅且功能丰富的桌面应用程序。当涉及到处理用户交互,特别是鼠标事件时,wxPython...
这个压缩包包含了一系列的文件,用于演示如何利用Python内置的gettext模块为wxPython应用程序添加多语言支持。 【描述】在Python中,wxPython是一个流行的图形用户界面(GUI)工具包,它使得开发者能够创建原生外观...
Python 35例实例脚本项目是一套丰富的学习资源,旨在帮助初学者和有经验的开发者深入理解Python编程语言的应用。这些脚本涵盖了各种实际场景,包括数据处理、网络编程、文件操作、图形用户界面(GUI)开发以及自动化...
Python是一种强大的编程语言,广泛应用在各种领域,包括网络爬虫、数据分析、机器学习以及我们今天要讨论的主题——图形用户界面(GUI)开发。GUI能让复杂的程序操作变得直观易用,通过按钮、菜单、对话框等可视化...
首先,`tableWidget`在Python中通常通过`PyQt`或`wxPython`等库实现。这里我们以`PyQt5`为例,其中的`QTableWidget`是`QWidget`的一个子类,用于创建可交互的表格。`QTableWidget`提供了添加、删除行和列,以及编辑...
在本例中,开发者使用了Python的图形用户界面(GUI)库,可能包括PyQt或wxPython等,这些库允许开发者创建美观且功能丰富的交互式界面。QT Designer是一个用于创建GUI界面的工具,它可以拖放控件,设计布局,生成.ui...
wxPython是Python中的一个GUI库,用于创建桌面应用程序。在PetStore项目中,开发者可以利用wxPython设计并实现用户友好的图形界面,比如登录窗口、商品展示面板、购物车视图、订单管理界面等,提供用户交互功能。 ...
标题“Python桌面僵尸宠物”揭示了这是一个使用Python编程语言创建的桌面应用,其特色在于具有一个僵尸主题的互动元素。这个应用可能是一个小游戏或者桌面玩具,用户可以通过右键操作来切换僵尸的不同形态,增加了...
通过以上知识点的学习和实践,你不仅可以掌握wxPython库的使用,还能理解如何创建一个完整的、具有实际功能的GUI应用,如本例中的“简单python抽奖界面”。在实践中不断优化和改进,你将能够设计出更加复杂的用户...
wxPython是Python的一个GUI(图形用户界面)开发库,基于wxWidgets C++库。wxPython提供了一种简单的方式来创建具有图形用户界面的应用程序。在本示例中,wxPython被用作构建简易计算器界面的工具。通过使用wxGlade...
2. **wxPython**: wxPython是Python中用于构建GUI(图形用户界面)的应用程序的一个库,它是基于C++的wxWidgets库。它提供了许多预定义的组件,如按钮、文本框等,使得开发者能够快速创建具有原生外观的Windows应用...
在Python中,导入wxPython库并创建一个`wx.App`实例作为程序的核心。接着,使用`wx.Frame`创建窗口,设置窗口的标题和其他属性。按钮和文本框等控件可以通过`wx.Button`和`wx.TextCtrl`等类创建,同时指定它们的位置...
在本例中,它包含了一个基于Python的音乐系统的所有源代码和其他可能的资源文件。用户需要先解压才能查看和使用这些内容。 【标签解析】 "源码"标签表明这个压缩包包含的是可读的、未编译的程序代码,用户可以研究...
Python提供了许多库用于创建图形用户界面,如Tkinter、PyQt或wxPython。选择其中之一,开发者可以设计出包含图书列表、搜索框、借还书按钮等功能的交互式界面,提高用户的操作体验。 在系统设计文档中,通常会包含...
首先,我们要明白在Python中创建GUI通常会使用一些库,如Tkinter、PyQt、wxPython或Kivy等。以Tkinter为例,它是Python的标准GUI库,提供了许多预定义的控件,如按钮、文本框、列表框等。这些控件可以在程序设计阶段...
PyCharm支持多种UI库,如Tkinter(Python自带)、Qt(PyQt或PySide)和wxPython等。这里我们以Tkinter为例: 1. 首先,导入Tkinter库: ```python import tkinter as tk ``` 2. 创建主窗口: ```python root = tk....
Python有多个库可用于此目的,如Tkinter(Python标准库)、PyQt、wxPython等。用户可以通过GUI浏览、选择和下载壁纸。 6. **数据结构**: - 在处理文件列表时,可能会用到Python的数据结构,如列表(用于存储...
在本例中,我们关注的是名为`python3_albow-2.87-py3-none-any.whl`的Python库。这个库是专为Python 3设计的,版本号为2.87,它是一个wheel格式的文件,这是一种预编译的Python软件包格式,可以直接安装而无需构建源...
Python提供了多种库和框架来开发这类软件,比如Tkinter(Python的标准GUI库)、PyQt、wxPython等。这些库允许开发者创建交互式的窗体界面,用于各种目的,例如数据可视化、用户输入处理等。在本例中,窗体软件被特别...