#26 Le 06/06/2010, à 19:26
- LoseMagnet
Re : un chronomètre type jeu d'échec
Dans ce cas il y a un mystère car je viens de re-télécharger et Nautilus m'annonce 21 éléments, total 291,8 Kio
En fait juste une partie est importante :
chess/img=> tu dois trouver les caractères de 0 à 9, le blanc et le ';' sous forme d'images gif
Hors ligne
#27 Le 06/06/2010, à 20:18
- kriztof
Re : un chronomètre type jeu d'échec
j'y comprends rien je viens de tout recommencer une 4éme fois et là ça marche
j'ai forcément fait une bêtise mais je sais pas laquelle.
me reste plus qu'a me mettre au langage HTML
j'ai réussi a changer le fond, c'est un début !!
lol
merci de ton aide en tout cas
je marque pas résolu je vais encore ,avoir besoin d'aide pour développer ça
quelqu'un connait un bon tuto HTML ?
Hors ligne
#28 Le 06/06/2010, à 20:32
- VinsS
Re : un chronomètre type jeu d'échec
J'ai relu en détail tes posts pour voir ce que tu attendais comme personnalisation.
serais-ce ce style :
Uploaded with ImageShack.us
Sans barre de titre, sans status bar et en plein écran bien sur.
Hors ligne
#29 Le 06/06/2010, à 20:36
- LoseMagnet
Re : un chronomètre type jeu d'échec
j'y comprends rien je viens de tout recommencer une 4éme fois et là ça marche
J'ajouterais que l'auteur avait prévu une version offline téléchargeable via cette URL :
http://cf29.com/design/chess/chess_clock.zip
C'est indiqué dans le fichier aide de la page sur le site.
Tout était déjà prêt, en français et en anglais!
Et pendant que j'y suis, l'auteur se nomme C. Founes, n'hésite pas à le mettre dans le code source, au cas où tu utiliserait ce programme car je crois que ce n'est pas indiqué.
Dernière modification par LoseMagnet (Le 06/06/2010, à 22:28)
Hors ligne
#30 Le 06/06/2010, à 22:50
- kriztof
Re : un chronomètre type jeu d'échec
lose magnet je dois avouer je n'aurai pas su quoi en faire y a quelques heures
Vins, c'est exactement ce que je veux réussir a faire. Tu peux m'aider ?
Hors ligne
#31 Le 06/06/2010, à 22:52
- kriztof
Re : un chronomètre type jeu d'échec
losemagnet, comment j'introduis le nom de l'auteur dans un code source ? je le ferai avec plaisir.
Hors ligne
#32 Le 06/06/2010, à 22:57
- LoseMagnet
Re : un chronomètre type jeu d'échec
Tu peux mettre un readme.txt dans l'archive avec son nom, ou alors dans le fichier html une première ligne en commentaires :
<!-- texte avec le nom de l'auteur -->
Dernière modification par LoseMagnet (Le 06/06/2010, à 22:58)
Hors ligne
#33 Le 06/06/2010, à 22:58
- kriztof
Re : un chronomètre type jeu d'échec
merci
Hors ligne
#34 Le 06/06/2010, à 23:06
- kriztof
Re : un chronomètre type jeu d'échec
ah petit détail pas négligeable pour ceux qui se penchent sur mon probléme, nos émissions TV sont en 16/9donc si ont peu travailler sur une page dans ce format c'est mieux !!
Hors ligne
#35 Le 07/06/2010, à 05:50
- VinsS
Re : un chronomètre type jeu d'échec
Pas de soucis, mais -la nuit porte conseil- je me demande si il ne serait pas mieux d'insérer des images vidéo des candidats plutôt que des photos. Je vais jeter un oeil là dessus.
En fait, la partie chrono m'apparait maintenant la partie la plus triviale de l'ensemble.
L'exemple que je t'ai montré est une façade creuse, mais, cette après-midi je pendrai de mettre un peu de code derrière pour avoir un ébauche fonctionnelle.
Hors ligne
#36 Le 08/06/2010, à 19:02
- VinsS
Re : un chronomètre type jeu d'échec
Le même mais avec le code du timer
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# chronoGame.py
#
# Date : june 08 2010
# Author : Vincent Vande Vyvre <vins@swing.be>
#
# Use 's' to start the chrono
# 'space' to change player
# 'Alt+r' to reset the chronos
# 'Alt+p' to quit
# 'n' to pause ~ restart after pause or after reset
import sys
import time
from threading import Thread
from PyQt4 import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 450)
self.centralwidget = QtGui.QWidget(MainWindow)
self.gridLayout = QtGui.QGridLayout(self.centralwidget)
self.gridLayout.setMargin(0)
self.scene = QtGui.QGraphicsScene()
self.graphicsView = QtGui.QGraphicsView(self.scene)
self.gridLayout.addWidget(self.graphicsView, 0, 0, 20, 10)
self.gridLayout_1 = QtGui.QGridLayout()
self.gridLayout_1.setHorizontalSpacing(30)
self.label = QtGui.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("DejaVu Sans")
font.setPointSize(26)
font.setWeight(75)
font.setBold(True)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.gridLayout_1.addWidget(self.label, 0, 0, 1, 2)
self.scene_1 = QtGui.QGraphicsScene()
self.graphicsView_1 = QtGui.QGraphicsView(self.scene_1)
self.graphicsView_1.setMinimumSize(QtCore.QSize(200, 300))
self.graphicsView_1.setMaximumSize(QtCore.QSize(200, 300))
self.graphicsView_1.setVerticalScrollBarPolicy(QtCore.Qt.
ScrollBarAlwaysOff)
self.graphicsView_1.setHorizontalScrollBarPolicy(QtCore.Qt.
ScrollBarAlwaysOff)
self.gridLayout_1.addWidget(self.graphicsView_1, 1, 0, 1, 1)
self.scene_2 = QtGui.QGraphicsScene()
self.graphicsView_2 = QtGui.QGraphicsView(self.scene_2)
self.graphicsView_2.setMinimumSize(QtCore.QSize(200, 300))
self.graphicsView_2.setMaximumSize(QtCore.QSize(200, 300))
self.graphicsView_2.setVerticalScrollBarPolicy(QtCore.Qt.
ScrollBarAlwaysOff)
self.graphicsView_2.setHorizontalScrollBarPolicy(QtCore.Qt.
ScrollBarAlwaysOff)
self.gridLayout_1.addWidget(self.graphicsView_2, 1, 1, 1, 1)
self.label_2 = QtGui.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("DejaVu Sans")
font.setPointSize(14)
font.setWeight(75)
font.setBold(True)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.gridLayout_1.addWidget(self.label_2, 2, 0, 1, 1)
self.label_3 = QtGui.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("DejaVu Sans")
font.setPointSize(14)
font.setWeight(75)
font.setBold(True)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.gridLayout_1.addWidget(self.label_3, 2, 1, 1, 1)
self.label_4 = QtGui.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("DejaVu Sans Mono")
font.setPointSize(28)
font.setItalic(True)
self.label_4.setFont(font)
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.gridLayout_1.addWidget(self.label_4, 3, 0, 1, 1)
self.label_5 = QtGui.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("DejaVu Sans Mono")
font.setPointSize(28)
font.setItalic(True)
self.label_5.setFont(font)
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.gridLayout_1.addWidget(self.label_5, 3, 1, 1, 1)
self.gridLayout.addLayout(self.gridLayout_1, 2, 1, 16, 8)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.centralwidget.keyPressEvent = self.keyPressEvent
MainWindow.setWindowTitle("MainWindow")
self.label.setText("Nom du jeu")
self.label.setStyleSheet("QWidget { color: blue }")
self.label_2.setText("Candidat Romeo")
self.label_2.setStyleSheet("QWidget { color:"
"white; background-color: blue }")
self.label_3.setText("Candidate Juliette")
self.label_3.setStyleSheet("QWidget { color:"
"white; background-color: blue }")
self.label_4.setText("00:00")
self.label_4.setStyleSheet("QWidget { background-color: white }")
self.label_5.setText("00:00")
self.label_5.setStyleSheet("QWidget { background-color: white }")
"""
self.back = QtGui.QPixmap("background.jpg").scaled(800, 450,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self.candidat = QtGui.QPixmap("candidat1.jpg").scaled(200, 300,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self.candidate = QtGui.QPixmap("candidat2.jpg").scaled(200, 300,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self.scene.addPixmap(self.back)
self.scene_1.addPixmap(self.candidat)
self.scene_2.addPixmap(self.candidate)
"""
def keyPressEvent(self, event):
mod = QtGui.QApplication.keyboardModifiers()
if mod == QtCore.Qt.NoModifier:
if event.key() == QtCore.Qt.Key_Space:
# Change gamer
cnt.toggle()
if event.key() == 83:
# Start key 's'
cnt.go_play()
if event.key() == 78:
# Pause key 'n'
cnt.pause()
if mod == QtCore.Qt.AltModifier:
if event.key() == 82:
# Reset key 'r'
cnt.reset()
if event.key() == 80:
# Exit key 'p'
cnt.quit()
class Counter(object):
def __init__(self):
"""Initialise the settings of the gamers
"""
self.a_dig = Digit()
self.a_dig.score = ui.label_4
self.b_dig = Digit()
self.b_dig.score = ui.label_5
self.player = self.a_dig
self.player.score.setStyleSheet("QWidget { background-color: yellow }")
self.block = False
self.is_active = False
self.pause = False
def go_play(self):
"""Start playing.
"""
if self.is_active:
return
self.is_active = True
self.crn = Chronos()
self.crn.start()
def toggle(self):
"""Change gamer.
"""
self.block == True
self.player.score.setStyleSheet("QWidget { background-color: white }")
if self.player == self.a_dig:
self.player = self.b_dig
else:
self.player = self.a_dig
self.player.score.setStyleSheet("QWidget { background-color: yellow }")
def bip(self):
"""On bip it's one second.
"""
if self.block:
self.block = False
return
self.player.update_digit()
def reset(self):
"""Reset the timers.
"""
print "reset"
self.block = True
self.pause = True
chain = "00:00"
ui.label_4.setText(chain)
ui.label_5.setText(chain)
self.a_dig.sec = 0
self.a_dig.min = 0
self.b_dig.sec = 0
self.b_dig.min = 0
def pause(self):
if self.pause:
self.pause = False
else:
self.pause = True
def quit(self):
"""Exit quiet.
"""
self.crn.playing = False
del self.crn
sys.exit()
class Digit(object):
def __init__(self):
"""Create one gamer.
"""
self.sec = 0
self.min = 0
self.score = ""
def update_digit(self):
"""Update the current gamer's timer.
"""
self.sec += 1
if self.sec == 60:
self.sec = 0
self.min += 1
if self.min == 60:
self.min = 0
self.change_digit()
def change_digit(self):
"""Refresh the current gamer's timer.
"""
chain = "".join([format('%02d' % self.min), ":", format('%02d' % self.sec)])
self.score.setText(chain)
class Chronos(Thread):
def __init__(self):
"""Χρόνος
"""
self.playing = True
Thread.__init__(self)
def run(self):
while self.playing:
time.sleep(1)
if not cnt.pause:
cnt.bip()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
QtCore.QCoreApplication.processEvents()
cnt = Counter()
sys.exit(app.exec_())
Requière PyQt (version des dépôts officiels fait l'affaire).
Les commandes clavier sont mentionnées dans l'entête du fichier.
Dernière modification par VinsS (Le 09/06/2010, à 09:45)
Hors ligne
#37 Le 08/06/2010, à 19:55
- kriztof
Re : un chronomètre type jeu d'échec
euh !! désolé Vins mais j'en fais quoi de ce code ?
Hors ligne
#38 Le 08/06/2010, à 20:02
- VinsS
Re : un chronomètre type jeu d'échec
Ah oui, tu le colle dans ton bloc-note, tu l'enregistre, par exemple chronoGame.py
Ensuite tu vérifie avec synaptic si tu as déjà PyQt, sinon tu l'installe.
Puis, en console:
cd /chemin/dudossier/outula/enregistre
python chronoGame.py
voilà.
Hors ligne
#39 Le 08/06/2010, à 20:20
- kriztof
Re : un chronomètre type jeu d'échec
j'ai ça en retour
/Bureau/compt3$ python chronogame.py
File "chronogame.py", line 1
self.min = 0
^
IndentationError: unexpected indent
Hors ligne
#40 Le 08/06/2010, à 20:32
- kriztof
Re : un chronomètre type jeu d'échec
désolé mon copié collé n'était pas complet
en fait maintenant j'ai:
File "chronogame.py", line 106
self.label_2.setStyleSheet("QWidget { color: white;
^
SyntaxError: EOL while scanning string literal
Hors ligne
#42 Le 08/06/2010, à 21:17
- kriztof
Re : un chronomètre type jeu d'échec
wahouuuuuuu !! ça commence a prendre forme !
merci de t'intéresser a mes questions VinsS
pour continuer, je me dit que pour simplifier il suffirai de mettre une seule image de fond avec les noms et les photos des personnes non ? il suffirai d'avoir un modele de base a travailler sur gimp ou photoshop.
Par contre il faudrai pouvoir faire une pause pour arreter le temps et le reprendre.
Un aspect qui était intéressant sur ce chrono ( http://cf29.com/design/chess.php ) c'était la possibilité d'avoir un décompte paramétrable au lieu du temps écoulé, ça me parait mieux pour un débat.
C'est assez frustrant de se sentir aussi dépendant des autres en programmation va vraiment falloir que je m'y mette !! mais c'est une jungle assez effrayante ! lol
Hors ligne
#43 Le 08/06/2010, à 21:24
- VinsS
Re : un chronomètre type jeu d'échec
Faire une pause c'est simple, je vais le faire, un décompte paramètrable, tu veux dire que les deux personnes commencent avec un temps donné et les chronos seront, donc, dégressifs ?
Pour ça il faudrait que je fasse la boite de dialogue pour les paramètres.
Pour les images il est plus simple de les importer séparément que de d'insérer un montage collage qui posera des problèmes de dimensionnement.
Hors ligne
#44 Le 08/06/2010, à 21:27
- kriztof
Re : un chronomètre type jeu d'échec
oui c bien ça pour le décompte
Ok pour les images
Hors ligne
#45 Le 08/06/2010, à 21:32
- kriztof
Re : un chronomètre type jeu d'échec
au fait je sais pas si c'est possible a corriger mais si je ré-appuis le "s" après avoir démarré le temps accélère. c mieux de prévoir que quelqu'un finira bien par appuyer sur une autre touche en plein enregistrement du débat ! lol
Hors ligne
#46 Le 08/06/2010, à 22:03
- VinsS
Re : un chronomètre type jeu d'échec
J'ai ajouté une fonction pause sur la lettre n
c'est la même lettre qui sert à relancer les chronos après une pause ou un reset.
La touche s ne peut plus relancer un nouveau thread (cétait ça qui se passait)
J'ai parfois des refus de fermeture de la fenêtre, mais je regarderai ça demain.
Hors ligne
#47 Le 08/06/2010, à 22:13
- kriztof
Re : un chronomètre type jeu d'échec
encore merci VinsS a bientot
Hors ligne
#49 Le 09/06/2010, à 12:31
- VinsS
Re : un chronomètre type jeu d'échec
Quelques explications pour se servir du script et le personnaliser.
Ceux qui connaissent Python n'apprendront rien dans ce qui suit.
Les images sont définies dans les lignes 116 à 129:
"""
self.back = QtGui.QPixmap("background.jpg").scaled(800, 450,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self.candidat = QtGui.QPixmap("candidat1.jpg").scaled(200, 300,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self.candidate = QtGui.QPixmap("candidat2.jpg").scaled(200, 300,
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self.scene.addPixmap(self.back)
self.scene_1.addPixmap(self.candidat)
self.scene_2.addPixmap(self.candidate)
"""
Ces lignes sont encadrées par des triple guillemets, elles sont commentées et donc, ignorées par l'interpréteur, il suffit d'effacer ces deux lignes (la 116 et la 129) pour prendre en compte les images.
la ligne
self.back = QtGui.QPixmap("background.jpg").scaled(800, 450, ...
suppose que l'image s'appelle 'background.jpg' et qu'elle se trouve dans le même dossier que le script (jpg et PAS jpeg ni JPG), en outre elle sera redimensionnée à 800x450 pxl
Adaptez donc en conséquence, les images des concurrents s'appellent 'candidat1.jpg' et candidat2.jpg et seront dimensionnées à 200x300
Les commandes clavier sont définies dans la fonction keyPressEvent (ligne 132).
Le crible utilise cette forme:
if event.key() == 78:
# Pause key 'n'
cnt.pause()
où 78 n'est rien d'autre que le code de la lettre 'n'.
la ligne commençant par un '#' n'est qu'un commentaire et la troisième ligne est l'action qui doit se produire.
Les codes des lettres : de 'a' à 'z' >> de 65 à 90
Dernières choses, les textes sont définis dans les lignes 103 à 115, il suffit de changer le texte entre guillemets.
N'hésitez pas à faire des essais, contrairement aux idées reçues, Python ne mord pas.
Hors ligne
#50 Le 12/06/2010, à 13:31
- kriztof
Re : un chronomètre type jeu d'échec
Python ne mord pas mais quand on découvre on a du mal a reconnaitre la tête et la queue du serpent !!
dur dur de modifier selon mes envies ! le décompte par exemple !
Hors ligne