Forum python sur www.jchr.be

ENTRE mars 2008 et octobre 2017, un forum python écrit en PHP5 fonctionnait sur le site www.jchr.be. La dernière question datant de décembre 2013, il ne semblait plus nécessaire de le maintenir. Il s'agit d'un archivage : les questions portaient sur python2, qui n'est plus supporté depuis le premier janvier 2020. Vous pouvez toujours poser vos questions à l'adresse de contact ci-dessus.
1.  Fonction intersection
2.  Changer la couleur d'un champ de texte avec tkinter
3.  Division: from __future__ par défaut
4.  Sauvegarder un jeu de l'othello
5.  Réutilisation problématique de tkFileDialog
6.  Recherche Google avec Python
7.  PYTHON pour piloter un générateur de fonction DG1022

Votre avis sur les pages python de www.jchr.be

www.jchr.be
2008.03.22 – 16:58
1.

Vous êtes invité à donner un avis sur les pages "python" de ce site. Votre nom n'est pas obligatoire, mais bien le filtre antispam.

www.jchr.be
2010.10.28 – 21:55
2.

Réécriture du forum, avec possibilité de l'envoi automatique par mail des modifications d'un fil ou de chaque changement sur ce forum.

90.19.157.3
2012.02.22 – 22:44
3.

Grand merci pour tes pages. ça évite des heures de prise de tête.

p_g
90.60.30.178
2012.09.18 – 21:26
4.

J'aime beaucoup ce site sur lequel j'ai abouti en cherchant de la doc. sur Tkinter. J'ai trouvé la partie sur ce sujet utile quoique synoptique - j'étais assez frustré en cherchant des éclaircissements en la matière en anglais ou en français à partir d'un moteur de recherche.

Par ailleurs, derrière la dimension technique du site se profile un style.

p_b_d_g
83.196.128.152
2013.03.03 – 22:29
5.

Bravo et merci pour la clarté des explications. En cours de formation sur le langage python, je pense que je l'utiliserai très souvent et l'ai déjà mis dans mes favoris.

152.77.63.2
2015.03.13 – 10:27
6.

Merci pour ton site ! :P

1. Fonction intersection

83.134.18.134
2009.02.23 – 12:15
1.

à quoi sert la fonction en langage python intersection de deux listes entiers

www.jchr.be
2009.02.24 – 15:15
2.

Pour deux "ensembles" a et b

a=set("abc"); b=set(["b","c","d"])
print a.intersection(b)

donnera les éléments communs à a et b:

 set(['c', 'b'])

1. les "ensembles" de type set sont définis à partir de listes [ ], "chaines" ou tuples ( )
2. cette fonction ne fonctionne que pour le type "set", par pour les listes.

www.jchr.be
2010.11.19 – 13:39
3.

La question tkFileDialog a été déplacée, voir "Lister les questions"

2. Changer la couleur d'un champ de texte avec tkinter

81.56.168.189
2009.03.25 – 15:40
1.

bonjour tout le monde !

j'aimerais pouvoir changer de couleur mon texte avec le selecteur de tkinter mais j'ai une erreur:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:\Python24\python\test.py", line 26, in selectcouleur
texte.config(fg=couleur)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1139, in configure
return self._configure('configure', cnf, kw)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1130, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: unknown color name "{255 0 128} #ff0080"

voici mon code :

#------------------------------IMPORTATION--------------------#

import Tkinter
import tkFileDialog as Selector
import tkColorChooser

#------------------------------FONTION---------------------------#

def ouvrir(ev=None):
      #Selection du fichier avec filtre .txt :
      file2=Selector.askopenfilename(filetypes = [("Fichiers Texte","*.txt")])
      fd=open(file2, 'r')
      chaine=fd.read()
      texte.insert(Tkinter.END,chaine)
def sauvegarder(texte):
      #Fenêtre de sauvegarde
      sauvegarderfichier=Selector.asksaveasfilename(filetypes = [("Fichiers Texte","*.txt")])
      fd2=open(sauvegarderfichier, 'w')
      fd2.write(texte)

def ascenseur():
     scrollbar = Tkinter.Scrollbar(racine)
     scrollbar.pack(side=Tkinter.RIGHT, fill=Tkinter.BOTH)

def quitter(ev=None):
       racine.destroy()
def selectcouleur():
      couleur=tkColorChooser.askcolor()
      texte.config(fg=couleur)

#-----------------------------FENETRE-------------------------------#

racine=Tkinter.Tk()

#Mise en place du titre:
racine.title("Editeur de text")
#Mise de l'icone en haut a gauche de la fenetre :
racine.iconbitmap("py.ico")

#-----------------------------MENU---------------------------------#

#menu Fichier :

# Creation du systeme de menu (variable explicite sysdemenu):
sysdemenu = Tkinter.Menu(racine)
# Creation du menu Fichier :
Fichier = Tkinter.Menu(sysdemenu, tearoff=0)
#Partie Fichier :
sysdemenu.add_cascade(label="Fichier", menu=Fichier)
#Sous partie :
Fichier.add_command(label="Ouvrir             Ctrl + o", command=ouvrir)
Fichier.add_separator()
#Separateur (bar de separation grise)
Fichier.add_command(label="Sauvegarder  Ctrl + s", command=lambda: sauvegarder(texte.get(0., Tkinter.END)))
Fichier.add_separator()
#Separateur (bar de separation grise)
Fichier.add_command(label="Quitter Ctrl + q", command=quitter)

#Menu Edition :
#Creation du menu Edition :
Edition = Tkinter.Menu(sysdemenu, tearoff=0)
#Partie Edition :
sysdemenu.add_cascade(label="Edition", menu=Edition)
#Sous partie :
Edition.add_command(label="Couper   Ctrl + x")
Edition.add_command(label="Copier    Ctrl + c")
Edition.add_command(label="Coller      Ctrl + v")

#Menu Outils :
#Creation du menu Edition :
Outils = Tkinter.Menu(sysdemenu, tearoff=0)
#Partie Edition :
sysdemenu.add_cascade(label="Outils", menu=Outils)
#Sous partie :
Outils.add_command(label="changer de couleur", command=selectcouleur)

#-----------------------------Racourci clavier-----------------------#

Fichier.bind_all('<Control-o>', ouvrir)
#Ctrl + o pour l'ancer l'ouverture du fichier
Fichier.bind_all('<Control-s>', lambda ev: sauvegarder(texte.get(0., Tkinter.END)))
#Ctrl + s pour l'ancer la fenetre d'enregistrement
Fichier.bind_all('<Control-q>', quitter)
#Ctrl + q pour quitter

#-----------------------------------------------------------------------#

#On met en place l'ascenseur :
ascenseur()
#Prevoit une place pour l'affichage des textes :
texte=Tkinter.Text(racine)
texte.pack(side=Tkinter.TOP, expand=True,fill=Tkinter.BOTH)
#Insertion du menu
racine.config(menu=sysdemenu)
racine.mainloop()
# raw_input("appuyer sur entree pour quitter : ")

xana29 merci a celui qui me répondra!

up please! xana29

ps si vous ne trouvez pas l'erreur pouvez vous me dire directement comment faire!

www.jchr.be
2009.03.25 – 17:46
2.

J'ai remis le code entre {{{ et }}} sinon, c'était illisible.

J'ai également dû enlever la ligne qui tente de charger py.ico (que je ne possède pas) pour pouvoir lancer le script.

L'utilisation de la variable réceptrice du sélectionneur de couleur n'est pas correcte : remplacer par exemple

couleur=tkColorChooser.askcolor()
texte.config(fg=couleur).

par

((rouge, vert, bleu), couleur) =tkColorChooser.askcolor()
texte.config(fg =couleur).

même si on n'utilise pas les variables rouge, vert ni bleu. Mais puisqu'il s'agit d'un tuple, on peut utiliser la variable couleur si on garde en tête que la valeur qui importe est son deuxième élément :

couleur=tkColorChooser.askcolor()
texte.config(fg=couleur[1]).

3. Division: from __future__ par défaut

95.136.202.82
2010.04.12 – 15:15
1.

Bonjour,

Tout d'abord bravo pour ce site ! Je suis en train d'écrire une bibliotheque pour mes élèves qui regroupera des fonctions que nous utilisons fréquemment. Ils commenceront leur code par from lycee import *

Je voudrai qu'ils prennent l'habitude d'utiliser le / pour la division décimale, mais quand j'inclus dans ma bibliotheque : from __future__ import division le division n'est pas prise en compte… Avez vous une solution ?

D'avance merci, Vincent MAILLE

www.jchr.be
2010.04.12 – 18:21
2.

Quelle est votre version de python? En version 2.5.2 Linux,

from __future__ import division
print 2/9

donne 0.222222222222; sans cet import, c'est le résultat de la division entière 0. Notez qu'il s'agit nécessairement de la première ligne écrite.

95.136.202.82
2010.04.12 – 19:23
3.

Oui, merci de la réponse rapide, mais chez moi aussi ça fonctionne, mais je voulais inclure tous les import dans une seule bibliothèque, et là, ça ne fonctionne pas (Python 2.6)

Merci, Vincent

www.jchr.be
2010.04.14 – 10:31
4.

L'importation de la bibliothèque devrait alors lancer le from __future__ import division, je ne pense pas que ce soit possible (notamment parce que le from future doit être la première instruction du script ce qui n'est plus le cas après importation de la bibliothèque. Je n'ai pas le temps de rechercher cela maintenant, mais il est (peut-être) possible de paramétrer python en ce sens.

www.jchr.be
2010.04.14 – 11:37
5.

Il y a un truc pour lancer python avec from future, voir fin de la page: http://docs.python.org/release/2.5.2/ref/future.html

95.136.202.82
2010.04.14 – 22:15
6.

Génial, merci beaucoup de ton aide et de ta disponibilité. Je n'ai plus qu'à trouver comment utiliser cela avec la version portable de portablepython.

Merci encore! Puis-je faire de la pub pour ton site? (Mais tu vas être victime du succès ;) et crouler sous les questions !

www.jchr.be
2010.04.15 – 11:29
7.

Pourquoi pas: cela me permettra d'améliorer ces pages. Mais il vaudrait mieux d'abord visiter http://www.jchr.be/python

www.jchr.be
2010.10.31 – 19:23
8.

Trouvé une autre méthode en UNIX: les scripts commencent par la ligne

#! /usr/bin/python -Qnew

4. Sauvegarder un jeu de l'othello

147.210.12.18
2010.05.18 – 15:17
1.

Bonjour je souhaite pouvoir sauvegarder une partie dans mon programme "jeu de l'othello" et j'aimerai pouvoir ensuite recharger la partie.Je ne vois pas du tout comment faire je désespère. Merci de m'aider voici le programme : j'aimerai également qu'en cliquant sur règles une page web s'ouvre si c'est possible merci.

from tkinter import *
from tkinter.filedialog import *

n=8
taille_case=50
taille=(n+2)*taille_case
DELTA=5
initialise=0
tour=1
aquiltour="Au noir de Commencer"


def creer_pion(x, y, couleur):
    cadre.create_oval(x*taille_case+DELTA,
                      y*taille_case+DELTA,
                      (x+1)*taille_case-DELTA,
                      (y+1)*taille_case-DELTA,
                      fill=couleur)

def clic_gauche(event):
    global tour
    if initialise==1:
        x=event.x//taille_case
        y=event.y//taille_case
        if tour==1:
            creer_pion(x, y, 'black')
            tour=0
        else :
            creer_pion(x, y, 'white')
            tour=1

def initialiser():
    global tour
    global initialise
    tour=1
    initialise=1
    cadre.delete(ALL)
    for coord in range(taille_case-1, taille-1, taille_case):
        cadre.create_line(coord, 49, coord, taille-51, fill='brown')
        cadre.create_line(49, coord, taille-51, coord, fill='brown')
    creer_pion(n//2, n//2, 'white')
    creer_pion(n//2, n//2+1, 'black')
    creer_pion(n//2+1, n//2, 'black')
    creer_pion(n//2+1, n//2+1, 'white')

def chcolor(choix):
    fen.tk_setPalette(choix)

def regles():
    reglesDuJeu=askopenfilename()
    print(reglesDuJeu)

def passerTour():
    global tour
    if tour==1:
        tour=0
    else :
        tour=1

def fonction_aquiltour():
    global tour
    global Aquiltour
    if tour==1:
        Aquiltour="c'est au joueur noir"
    else :
        aquiltour="c'est au joueur blanc"

def charger(ev=None):
    fichier2=Selector.askopenfilename(filetypes=[("Sauvegarde","*.save")])
    fd=open(fichier2,'r')
    chaine=fd.read()
    sauvegarde.insert(Tkinter.END, chaine)

def sauvegarder(sauvegarde):
    sauvegarderfichier=Selector.asksaveasfilename(filetypes=[("Sauvegarde","*.save")])
    fd2=open(sauvegarderfichier,'w')
    fd2.write(sauvegarde)


fen=Tk()
fen.title("Jeu Othello")

cadre=Canvas(fen, bg='darkgreen', width=taille, height=taille)
cadre.pack()

menu1=Menu(fen)

fichier=Menu(menu1, tearoff=0)
menu1.add_cascade(label="Fichier",menu=fichier)
fichier.add_command(label="Charger", command=charger)
fichier.add_command(label="Sauvegarder", command=lambda: sauvegarder(sauvegarde.get(0., Tkinter.END)))
fichier.add_command(label="Quitter", command=fen.destroy)

couleur=Menu(menu1, tearoff=0)
menu1.add_cascade(label="Couleur",menu=couleur)

color=Menu(couleur)
couleur.add_cascade(label="Menu", menu=color)
color.add_command(label="Bleu", command=lambda : chcolor('#3399cc'))
color.add_command(label="Rouge", command=lambda : chcolor('#ff0000'))
color.add_command(label="Jaune", command=lambda : chcolor('#ffff33'))
color.add_command(label="Vert", command=lambda : chcolor('#006633'))
color.add_command(label="Blanc", command=lambda : chcolor('white'))

aide=Menu(menu1, tearoff=0)
menu1.add_cascade(label="Aide", menu=aide)
aide.add_command(label="Règles", command=regles)

fen.config(menu=menu1)

Aquiltour=StringVar()
lab1=Label(fen, textvariable=fonction_aquiltour)
lab1.pack()

bouton_start=Button(fen, text='START',fg='black', command=initialiser)
bouton_start.pack()

bouton_passer=Button(fen, text='Passer son tour', fg='black', command=passerTour)
bouton_passer.pack()

cadre.bind("<Button-1>", clic_gauche)

fen.mainloop()
www.jchr.be
2010.05.19 – 18:14
2.

Avec les triples accolades, le listing est plus lisible (8:)

Une manière relativement simple serait de sauvegarder la variable contenant le tableau othello en cours, avec le module pickle, voir http://www.jchr.be/python/modules.htm#pickle

Personnellement, je coderais cet échiquier par une liste de rangées de cases:

jeu=[
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]
]

où chaque case serait représentée par jeu[rangee,case]= 1 ou -1 selon la couleur.

www.jchr.be
2010.05.19 – 18:18
3.

Pour afficher une page Internet, c'est assez simple (en Unix toutefois, mais je suppose que c'est pareil en émulation DOS sous Windows): python envoie les commandes vers le système sous forme de chaîne avec os.system():

import os
os.system("firefox http://www.jchr.be")
5.

Réutilisation problématique de tkFileDialog

195.221.156.8
2010.11.18 – 12:48
1.

Bonjour,

J'ai ce code, que j'exécute avec PyScripter, la première fois le code fonctionne bien, mais si je relance, la fenêtre s'ouvre derrière, il faut que je re-initialise le moteur python pour que ça fonctionne à nouveau. Avez-vous déjà rencontré ce problème ? ou comment forcer la fenêtre à revenir en premier plan ?

Code :

import Tkinter
import tkFileDialog
file = tkFileDialog.askopenfile(mode='rb',title='Choisissez un fichier')
if file != None:
    print file

Merci, Vincent

www.jchr.be
2010.11.18 – 16:53
2.

J'ai déplacé cette question vers un nouveau sujet, et entouré le code par des {{{ }}}.

Peut-être en refermant le descripteur de fichier (file en l'occurrence), après avoir sauvegardé son nom?

Par ailleurs, il est possible que sortant de la routine tkFileDialog, Tk doivent retourner à quelque chose, et ouvre automatiquement une fenêtre vide. Essayer en ouvrant préalablement une fenêtre, et la refermer ensuite?

6.

Recherche Google avec Python

85.69.227.118
2011.11.04 – 14:47
1.

Bonjour,

Je voudrais effectuer une recherche google toute simple avec Python. Pour être plus précis je voudrais entrer un mot à rechercher et obtenir la page résultant de cette recherche. J'ai essayé d'écrire un code avec urllib et urllib2 mais je rencontre des problèmes.

Ma première question est : est-il possible de faire ce type de chose simplement ? et quelqu'un sait-il comment faire ?

Merci

www.jchr.be
94.108.183.238
2011.11.04 – 16:36
2.

D'après mes essais, urllib ne sert pas à grand-chose, beaucoup de sites refusant de répondre à ses sollicitations alors que urllib2 fonctionne bien mieux (mais où sont mes notes?).

Par ailleurs, python-gdata semble être le module permettant de faire ce genre de chose.

7. PYTHON pour piloter un générateur de fonction DG1022

dc
81.64.195.129
2013.12.23 – 01:14
1.

Bonsoir

J'utilise un DG1022 RIGOL que je souhaite piloter grace à PYTHON et une interface comme USBTMC je souhaite génèrer successivement des séquences qui ressemblent à:

1) 8 minutes sinusoïdale 727 HTZ 12Vpp offset 4Vdc Phase +180° puis

2) 4 minutes 150 kHz sinusoïdale 12Vpp offset 4Vdc Phase +180° puis

3) 6 minutes 49,9 Hz sinusoïdale 12Vpp offset 4Vdc Phase +180° etc.

un échange d'information m'aiderait beaucoup, merci pour votre aide

daniel

jchr.be
94.109.44.75
2013.12.24 – 11:20
2.

Ces pages sont généralistes et concernent surtout le fonctionnement du langage lui-même et quelques modules incontournables.

J'ai par contre vu que plusieurs blogs (quasi tous en anglais) parlaient de ce pilotage.

Bien à vous