Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 :

webgame.th.png

Uploaded with ImageShack.us

Sans barre de titre, sans status bar et en plein écran bien sur.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#29 Le 06/06/2010, à 20:36

LoseMagnet

Re : un chronomètre type jeu d'échec

kriztof a écrit :

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.


Vincent
Oqapy      Qarte      PaQager

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)


Vincent
Oqapy      Qarte      PaQager

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à.


Vincent
Oqapy      Qarte      PaQager

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

#41 Le 08/06/2010, à 20:53

VinsS

Re : un chronomètre type jeu d'échec

ben oui, j'ai des guillemets qui sont resté coincés dans le clavier

j'ai corrigé.


Vincent
Oqapy      Qarte      PaQager

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.


Vincent
Oqapy      Qarte      PaQager

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.


Vincent
Oqapy      Qarte      PaQager

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

#48 Le 09/06/2010, à 09:48

VinsS

Re : un chronomètre type jeu d'échec

J'ai changé le code du post #36 pour résoudre le problème de fermeture.

Je donnerai des détails sur le code pour ceux que cela intéresse, plus tard,


Vincent
Oqapy      Qarte      PaQager

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.


Vincent
Oqapy      Qarte      PaQager

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