Skip to content

Instantly share code, notes, and snippets.

@DaniZz
Created December 7, 2012 01:55
Show Gist options
  • Save DaniZz/4230099 to your computer and use it in GitHub Desktop.
Save DaniZz/4230099 to your computer and use it in GitHub Desktop.
the whole thing
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.graphics import Color, Ellipse, Line
from kivy.graphics.instructions import Callback
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from kivy.interactive import InteractiveLauncher
from kivy.properties import NumericProperty
from kivy.event import EventDispatcher
import random
framePoints = [150, 250, 750, 250, 750, 600, 150, 600, 150, 250]
CIRCLEPOSITIONS = ([200,300],[350,300],[500,300],[650,300],[200,400],[350,400],[500,400],[650,400],[200,500],[350,500],[500,500],[650,500])
CIRCLESIZE = 80
RED = (0.3,0.3,0.3)
BLUE = (.6, .8, .6)
WHITE = (1,1,1)
NTRIALS = 12
itemGroups = {'YN': [[['T','TICK'],['T','POCK'],['Z','TICK'],['Z','POCK'],['M','TICK'],['M','POCK']],[['T','TICK'],['T','POCK'],['Z','TICK'],['Z','POCK'],['M','TICK'],['M','POCK']]]}
class Circles:
def __init__(self, posx, posy, color):
self.x = posx
self.y = posy
self.col = color
class Configuration:
def __init__(self, nred = 6, nblue = 6):
self.nred = nred
self.nblue = nblue
self.circles = []
self.setupConf()
def setupConf(self):
circlePosz = list(CIRCLEPOSITIONS)
for i in range(0,self.nred):
coord = circlePosz.pop(0)
self.circles.append(Circles(coord[0],coord[1],RED))
for i in range(0,self.nblue):
coord = circlePosz.pop(0)
self.circles.append(Circles(coord[0],coord[1],BLUE))
class Trials:
def __init__(self):
self.setup = None
self.question = None
self.ans = None
self.time = None
def evaluate (self, answer):
return True
class Session:
def __init__(self, tyype, number):
self.tyype = tyype
self.number = number
self.trials = []
self.makeSession()
def makeSession(self):
for group in itemGroups[self.tyype]:
random.shuffle(group)
for tr in group:
if tr[0] == 'T': nred = 12
if tr[0] == 'Z': nred = 0
if tr[0] == 'M': nred = random.randint(4,8)
thisTrial = Trials()
thisTrial.setup = Configuration(nred,12-nred)
thisTrial.question = tr[1]
self.trials.append(thisTrial)
# if self.tyype == 'YN':
# if self.tyype == 'COMPARISON':
class EventHandler(Widget):
trialDisplayed = NumericProperty(0)
def __init__(self, **kwargs):
super(EventHandler, self).__init__(**kwargs)
Window.bind(on_key_down=self.on_key)
def on_key(self, keycode, *args):
# print args[2]
if args[2] in ['m','z']:
self.trialDisplayed += 1
print self.trialDisplayed
events = EventHandler()
class DisplayWidget(Widget):
def __init__(self, frame, trials, **kwargs):
super(DisplayWidget, self).__init__(**kwargs)
self.trials = trials
self.frame = frame
# Window.clearcolor = (0.1, 0.1, 0.1, 1.)
with self.canvas:
Color(*WHITE)
Line(points=self.frame, width=2.5)
self.ntrial = events.trialDisplayed
events.bind(trialDisplayed=self.callcall)
# I want to redraw the circle after having changed self.ntrial
for circle in self.trials[self.ntrial].setup.circles:
Color(*circle.col)
d = CIRCLESIZE
Ellipse(pos=(circle.x , circle.y), size=(d, d))
self.cb = Callback(self.my_callback)
def my_callback (self, instr):
print 'called'
def callcall (self, *args):
self.ntrial = events.trialDisplayed
self.cb.ask_update()
class TiktokApp(App):
def build(self):
self.session = Session('YN',1)
layout = BoxLayout(orientation='vertical')
display = DisplayWidget(frame=framePoints,trials=self.session.trials)
text = Label(text=self.session.trials[0].question + ' cercles sont rouges')
layout.add_widget(display)
layout.add_widget(text)
return layout
def build_config(self, config):
config.setdefaults('graphics', {
'width': '1280',
'height': '1024'
})
if __name__ == '__main__':
TiktokApp().run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment