1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
'''
Created on 11 Jan 2013
@author: cgueret
'''
from gi.repository import Gtk
import csv
import random
class Data(object):
'''
Class used to interface with the data
'''
def __init__(self):
'''
Constructor
'''
self._ranks = {}
with open('ranks.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in reader:
self._ranks[row[0]] = int(row[1])
def get_random_subset(self, size):
'''
Generate a random subset of pairs (country, rank)
'''
subset = {}
while len(subset.keys()) != size:
key = self._ranks.keys()[random.randint(0, len(self._ranks.keys())-1)]
if key not in subset:
subset[key] = self._ranks[key]
return subset
class Main(object):
def __init__(self):
'''
Constructor
'''
# Variable to count the number of points
self._points = 0
self._good_answer = -1
self._data = Data()
# Load the graphical user interface
self._gui = Gtk.Builder()
self._gui.add_from_file("GUI.glade")
# Connect the buttons
for number in range(1, 5):
button = self._gui.get_object("button%d" % number)
button.connect("clicked", self.on_button_clicked, number)
# Create a new question
self.make_new_question()
def get_widget(self):
'''
Return the main widget of the application
'''
return self._gui.get_object("main_box")
def get_score(self):
return self._points
def set_score(self, value):
self._points = value
self._gui.get_object("score_zone").set_label(str(self._points))
def make_new_question(self):
'''
Prepare a new question: pick a set of cities and update the buttons
'''
subset = self._data.get_random_subset(4).items()
self._good_answer = 1
for i in range(1, 5):
(country, rank) = subset[i - 1]
if rank > subset[self._good_answer-1][1]:
self._good_answer = i
self._gui.get_object("button%d" % i).set_label(country)
def on_button_clicked(self, button, number):
'''
Function called when one of the buttons is clicked
'''
# Check the answer picked
if number == self._good_answer:
self.set_score(self.get_score() + 1)
# Create a new question
self.make_new_question()
|