Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Tom Pillot
Thymio Game
Commits
7229d008
Commit
7229d008
authored
Jun 29, 2020
by
Tom Pillot
Browse files
Improved timer
parent
f15f5054
Changes
6
Hide whitespace changes
Inline
Side-by-side
game/scoreboard.py
View file @
7229d008
from
PyQt5
import
QtWidgets
as
qtw
from
PyQt5
import
QtCore
as
qtc
from
PyQt5
import
QtGui
as
qtg
from
game.scoreboard_ui
import
ScoreWindowUi
DURATION
=
30
class
ScoreWindow
(
ScoreWindowUi
):
def
__init__
(
self
):
def
__init__
(
self
,
teams
):
super
().
__init__
()
self
.
time_left
=
DURATION
self
.
teams
=
teams
self
.
time_is_red
=
False
def
timer_start
(
self
):
self
.
time_
left
=
DURATION
def
timer_start
(
self
,
time
):
self
.
time_
edit
.
setTime
(
time
)
self
.
timer
.
timeout
.
connect
(
self
.
timer_timeout
)
self
.
timer
.
start
(
1000
)
self
.
update_gui
()
def
timer_timeout
(
self
):
self
.
time_left
-=
1
if
self
.
time_left
==
0
:
self
.
time_left
=
DURATION
self
.
update_gui
()
self
.
timer
.
start
(
1000
)
if
self
.
time_edit
.
time
()
==
qtc
.
QTime
(
0
,
0
,
0
,
0
):
if
self
.
time_is_red
:
self
.
time_edit
.
setStyleSheet
(
"color: black"
)
self
.
time_is_red
=
False
else
:
self
.
time_edit
.
setStyleSheet
(
"color: red"
)
self
.
time_is_red
=
True
else
:
self
.
update_gui
()
def
update_gui
(
self
):
self
.
timer_label
.
setText
(
str
(
self
.
time_left
))
self
.
time_edit
.
setTime
(
self
.
time_edit
.
time
().
addSecs
(
-
1
))
def
show_teams
(
self
):
for
team
in
self
.
teams
.
values
():
self
.
list_widget
.
addItem
(
team
.
name
)
game/scoreboard_ui.py
View file @
7229d008
...
...
@@ -12,12 +12,28 @@ class ScoreWindowUi(qtw.QMainWindow):
self
.
setCentralWidget
(
widget
)
self
.
list_widget
=
qtw
.
QListWidget
()
self
.
timer_label
=
qtw
.
QLabel
()
self
.
timer_label
.
setFont
(
qtg
.
QFont
(
"Arial"
,
80
,
qtg
.
QFont
.
Bold
))
self
.
time_edit
=
qtw
.
QTimeEdit
()
self
.
time_edit
.
setFont
(
qtg
.
QFont
(
"Arial"
,
80
,
qtg
.
QFont
.
Bold
))
self
.
time_edit
.
setDisplayFormat
(
"mm:ss"
)
self
.
time_edit
.
setAlignment
(
qtc
.
Qt
.
AlignCenter
)
self
.
time_edit
.
setReadOnly
(
True
)
self
.
time_edit
.
setStyleSheet
(
"""
QTimeEdit {
color: white;
selection-color: white;
selection-background-color: black;
background-color: black;
border-style: solid;
border-width: 4px;
border-color: rgb(100,100,100);
}
QTimeEdit::up-button {width: 0}
QTimeEdit::down-button {width: 0}
"""
)
self
.
timer
=
qtc
.
QTimer
(
self
)
vlayout
=
qtw
.
QVBoxLayout
()
vlayout
.
addWidget
(
self
.
time
r_label
,
alignment
=
qtc
.
Qt
.
AlignCenter
)
vlayout
.
addWidget
(
self
.
time
_edit
,
alignment
=
qtc
.
Qt
.
AlignCenter
)
vlayout
.
addWidget
(
self
.
list_widget
)
widget
.
setLayout
(
vlayout
)
game/team.py
0 → 100644
View file @
7229d008
class
Team
:
def
__init__
(
self
,
name
,
tag_id
):
self
.
name
=
name
self
.
tag_id
=
tag_id
self
.
points
=
0
def
add_points
(
self
,
points_added
):
self
.
points
+=
points_added
game/team_chooser.py
View file @
7229d008
...
...
@@ -2,6 +2,7 @@ from PyQt5 import QtCore as qtc
from
PyQt5
import
QtGui
as
qtg
from
game.detector
import
Detector
from
game.team_chooser_ui
import
TeamWindowUi
from
game.team
import
Team
class
TeamWindow
(
TeamWindowUi
):
...
...
@@ -19,7 +20,7 @@ class TeamWindow(TeamWindowUi):
super
().
__init__
()
self
.
detector
=
Detector
()
self
.
tag
_
ids
=
{}
self
.
teams
=
{}
# The keys are the
tag
ids
and the values are the teams
self
.
scan_button
.
clicked
.
connect
(
self
.
detect_tag
)
self
.
add_button
.
clicked
.
connect
(
self
.
add_team
)
...
...
@@ -41,6 +42,9 @@ class TeamWindow(TeamWindowUi):
self
.
tag_label
.
setText
(
str
(
tag_id
))
def
add_team
(
self
):
"""
Add a new team to the table
"""
tag_str
=
self
.
tag_label
.
text
()
name
=
self
.
name_input
.
text
()
if
self
.
is_valid
(
name
,
tag_str
):
...
...
@@ -55,9 +59,12 @@ class TeamWindow(TeamWindowUi):
self
.
tag_label
.
setText
(
""
)
self
.
tag_label
.
setStyleSheet
(
""
)
self
.
name_input
.
setText
(
""
)
self
.
t
ag_ids
[
name
]
=
tag_id
self
.
t
eams
[
tag_id
]
=
Team
(
name
,
tag_id
)
def
edit_team
(
self
):
"""
Edit the selected team
"""
selected
=
self
.
table_view
.
selectedIndexes
()
if
selected
:
item
=
selected
[
0
]
...
...
@@ -67,15 +74,18 @@ class TeamWindow(TeamWindowUi):
self
.
set_label_color
(
tag_id
)
self
.
name_input
.
setText
(
name
)
self
.
table_model
.
takeRow
(
item
.
row
())
del
self
.
t
ag_ids
[
name
]
del
self
.
t
eams
[
tag_id
]
def
delete_team
(
self
):
"""
Remove the selected team from the table
"""
selected
=
self
.
table_view
.
selectedIndexes
()
if
selected
:
item
=
selected
[
0
]
name
=
self
.
table_model
.
data
(
self
.
table_model
.
index
(
item
.
row
(),
self
.
NAME
))
tag_id
=
self
.
table_model
.
data
(
self
.
table_model
.
index
(
item
.
row
(),
self
.
TAG
))
self
.
table_model
.
takeRow
(
item
.
row
())
del
self
.
t
ag_ids
[
name
]
del
self
.
t
eams
[
tag_id
]
def
is_valid
(
self
,
new_name
,
new_tag_str
):
"""
...
...
@@ -90,11 +100,21 @@ class TeamWindow(TeamWindowUi):
return
False
new_tag_id
=
int
(
new_tag_str
)
for
name
,
tag_id
in
self
.
t
ag_id
s
.
items
():
if
name
==
new_name
:
for
tag_id
,
team
in
self
.
t
eam
s
.
items
():
if
team
.
name
==
new_name
:
self
.
status_bar
.
showMessage
(
"Une équipe avec ce nom existe déjà."
,
self
.
STATUS_TIME
)
return
False
elif
tag_id
==
new_tag_id
:
self
.
status_bar
.
showMessage
(
"Une équipe avec ce tag existe déjà."
,
self
.
STATUS_TIME
)
return
False
return
True
def
can_start_activity
(
self
):
"""
Check if the activity can be started
"""
if
len
(
self
.
teams
)
>
0
:
return
True
else
:
self
.
status_bar
.
showMessage
(
"Veuillez ajouter au moins une équipe."
,
self
.
STATUS_TIME
)
return
False
game/team_chooser_ui.py
View file @
7229d008
...
...
@@ -34,16 +34,19 @@ class TeamWindowUi(qtw.QMainWindow):
self
.
table_view
.
setModel
(
self
.
table_model
)
self
.
name_input
=
qtw
.
QLineEdit
()
self
.
tag_label
=
qtw
.
QLabel
(
""
)
self
.
tag_label
.
setAlignment
(
qtc
.
Qt
.
AlignCenter
)
self
.
add_button
=
qtw
.
QPushButton
(
"Ajouter"
)
self
.
edit_button
=
qtw
.
QPushButton
(
"Modifier"
)
self
.
delete_button
=
qtw
.
QPushButton
(
"Supprimer"
)
self
.
scan_button
=
qtw
.
QPushButton
(
"Scanner le tag"
)
self
.
activity_box
=
qtw
.
QComboBox
()
self
.
time_edit
=
qtw
.
QTimeEdit
()
self
.
start_button
=
qtw
.
QPushButton
(
"Démarrer l'activité"
)
self
.
tag_label
=
qtw
.
QLabel
(
""
)
self
.
tag_label
.
setAlignment
(
qtc
.
Qt
.
AlignCenter
)
self
.
time_edit
=
qtw
.
QTimeEdit
()
self
.
time_edit
.
setDisplayFormat
(
"mm'min 'ss's'"
)
hlayout1
=
qtw
.
QHBoxLayout
()
hlayout1
.
addWidget
(
qtw
.
QLabel
(
"Nom de l'équipe :"
))
hlayout1
.
addWidget
(
self
.
name_input
)
...
...
main.py
View file @
7229d008
...
...
@@ -10,7 +10,7 @@ class MainWindow(qtw.QWidget):
self
.
stacked_layout
=
qtw
.
QStackedLayout
()
self
.
team_window
=
TeamWindow
()
self
.
scoreboard_window
=
ScoreWindow
()
self
.
scoreboard_window
=
ScoreWindow
(
self
.
team_window
.
teams
)
self
.
stacked_layout
.
addWidget
(
self
.
team_window
)
self
.
stacked_layout
.
addWidget
(
self
.
scoreboard_window
)
...
...
@@ -18,8 +18,11 @@ class MainWindow(qtw.QWidget):
self
.
team_window
.
start_button
.
clicked
.
connect
(
self
.
start_activity
)
def
start_activity
(
self
):
self
.
scoreboard_window
.
timer_start
()
self
.
stacked_layout
.
setCurrentIndex
(
1
)
if
self
.
team_window
.
can_start_activity
():
self
.
scoreboard_window
.
show_teams
()
time
=
self
.
team_window
.
time_edit
.
time
()
self
.
scoreboard_window
.
timer_start
(
time
)
self
.
stacked_layout
.
setCurrentIndex
(
1
)
if
__name__
==
'__main__'
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment