Pblm avec TKinter sous Python

Filou53

Membre expert
Club iGen
20 Janvier 2003
1 045
34
Karelkoning (Belgique)
Bonjour.

Je débute sur Python et je fais mes premiers pas avec 'Apprendre à programmer avec Pyton' de G Swinnen (la version pdf).

Je travaille avec Python 2,4,3 et Idle 1,1,3

Quand j'essaie de lancer le script suivant (ch 8,2 page 81):

Code :
from Tkinter import *
fen1 = Tk()
tex1 = Label(fen1, text='Bonjour tout le monde !', fg='red')
tex1.pack()
bou1 = Button(fen1, text='Quitter', command = fen1.destroy)
bou1.pack()
fen1.mainloop()
la fenêtre s'affiche correctement mais j'ai beau cliquer sur le bouton ou les 3 boutons de fenêtre (Mac!), rien ne se passe (sauf avec le bouton orange de réduction de fenêtre qui lui, bizarrement, fonctionne !) :confused:

Une bonne âme pourrait-elle me dépanner ?
J'ai un peu fouiné dans les FAQ mais comme je débute, je ne vois pas bien ou chercher
D'avance merci

Filou :zen:
 
Filou53 a dit:
Bonjour.

Je débute sur Python et je fais mes premiers pas avec 'Apprendre à programmer avec Pyton' de G Swinnen (la version pdf).

Je travaille avec Python 2,4,3 et Idle 1,1,3

Quand j'essaie de lancer le script suivant (ch 8,2 page 81):

Code :
from Tkinter import *
fen1 = Tk()
tex1 = Label(fen1, text='Bonjour tout le monde !', fg='red')
tex1.pack()
bou1 = Button(fen1, text='Quitter', command = fen1.destroy)
bou1.pack()
fen1.mainloop()
la fenêtre s'affiche correctement mais j'ai beau cliquer sur le bouton ou les 3 boutons de fenêtre (Mac!), rien ne se passe (sauf avec le bouton orange de réduction de fenêtre qui lui, bizarrement, fonctionne !) :confused:

Une bonne âme pourrait-elle me dépanner ?
J'ai un peu fouiné dans les FAQ mais comme je débute, je ne vois pas bien ou chercher
D'avance merci

Filou :zen:

use wx
 
Merci pour ta réponse,
mais pour un débutant comme moi, elles est un peu sybilline :D

Je suppose qu'au lieu d'utiliser la bibliothèque Tkinter, tu me conseilles d'utiliser wx (ou wxPython ??? c'est la même chose ?)

Tkinter n'est pas 'complètement' utilisable sur Mac ?
(comme c'est ce que Swinnen utilise dans son manuel, j'aimerais pouvoir continuer avec)

Par ailleurs où se cache wx/wxPython ?
J'ai bien trouvé un répertoire Developer/Documentation/Python/wxPython mais cela ne me semble pas très clair... :confused:

Dans mon exemple, si je remplace naïvement 'from Tkinter import * ' par 'from wx (ou wxPython) import *', je me fais directement jeter avec le msg 'no module named...' donc je suppose que wx(...) n'est pas encore installé sur ma machine. Exact ?
Que faire alors ?

Filou :zen:
 
Filou53 a dit:
Merci pour ta réponse,
mais pour un débutant comme moi, elles est un peu sybilline :D

Je suppose qu'au lieu d'utiliser la bibliothèque Tkinter, tu me conseilles d'utiliser wx (ou wxPython ??? c'est la même chose ?)

Tkinter n'est pas 'complètement' utilisable sur Mac ?
(comme c'est ce que Swinnen utilise dans son manuel, j'aimerais pouvoir continuer avec)

Par ailleurs où se cache wx/wxPython ?
J'ai bien trouvé un répertoire Developer/Documentation/Python/wxPython mais cela ne me semble pas très clair... :confused:

Dans mon exemple, si je remplace naïvement 'from Tkinter import * ' par 'from wx (ou wxPython) import *', je me fais directement jeter avec le msg 'no module named...' donc je suppose que wx(...) n'est pas encore installé sur ma machine. Exact ?
Que faire alors ?

Filou :zen:

click sur ma home dans la signature
 
Merci (2). Il y a de quoi lire !

Dès que je serai un peu mieux réveillé, j'irai voir tout cela.

Mais je me permets d'insister sur une partie de ma question:
Tkinter n'est pas 'complètement' utilisable sur Mac ?
(comme c'est ce que Swinnen utilise dans son manuel, j'aimerais pouvoir continuer avec)​
Comme je m'efforce de suivre les leçonc du manuel, j'aimerais ne pas trop m'écarte des exemples...

Par ailleurs, si les deux sont 'compatibles' Mac, pourquoi conseilles-tu plutôt wxPython ? Quel est l'intérêt ?

Filou :zen:
 
encore moi...

Par ailleurs, si les deux sont 'compatibles' Mac, pourquoi conseilles-tu plutôt wxPython ? Quel est l'intérêt ?

ok, ok, j'ai compris...
rien qu'en regardant la demo wxPython, il n'y a pas photo !
Le look Mac semble bien respecté alors qu'avec Tkinter, ce n'est pas tout à fait cela. Et je présume qu'aux niveaux fonctionnalités/performances... wxPython est aussi en tête (?).

Mais, sorry pour mon acharnement, j'aimerais d'abord faire le tour des leçons avec Tkinter - car je suppose que les syntaxes sont différentes d'une bibliothèque à l'autre ???

Filou :zen:
 
tatouille a dit:
tinker est obsolete voir le site de python
use wx (python)
ok, je suis convaincu :) ;)
mais j'aimerais savoir pourquoi mes qq lignes de code ne fonctionnent pas... :siffle: :siffle:

Filou
 
on s'en fou ca doit pas etre supporté à cause du pack juste en passant

télécharge Archimade et ouvre le bundle App ( afficher le contenu du paquet )

http://plumber.gnu-darwin.org/pub/projects/Archimade.zip

Panther

http://plumber.gnu-darwin.org/pub/projects/PyAppStubApplication-MacOSX%20Panther.zip

ou Tiger

http://plumber.gnu-darwin.org/pub/projects/PyAppStubApplication-MacOSX%20Tiger.zip

tu as une application de demo wx
qui utilises mon framework PyAppStubApplication

mais bon tu auras un aperçu de my first wx app

Archimade c'est l'exemple poussé un peu plus loin
pour montrer qu'avec un framework UI cross platforme
on peut faire du vraie natif si on adapte pour chaque UI

et surtout c'est mon appli de dev/debug pour mon PyAppStubApplication

:zen:
 
de rien tu remarqueras que l'adaptation UI passe aussi par un travail
des éléments graphiques correspondant à la platforme

( pas d'icon/image style gnome sous osx
et pas d'icon/image style osx sous gnome)

on peut faire clean sous chaque platforme de plus l'iconographie d'une application
et l'architecture GUI sont indispensables quant on develop correctement

pas comme se milliard de million d'appli degueulasses
graphiquement et avec un GUI pensé
avec les pieds
 
tatouille a dit:
télécharge Archimade et ouvre le bundle App ( afficher le contenu du paquet )
...
ou Tiger
http://plumber.gnu-darwin.org/pub/projects/PyAppStubApplication-MacOSX%20Tiger.zip

tu as une application de demo wx
qui utilises mon framework PyAppStubApplication

mais bon tu auras un aperçu de my first wx app
...
et surtout c'est mon appli de dev/debug pour mon PyAppStubApplication

:zen:
Oh là, doucement, tu vas un peu vite pour moi :rose:

En plus, je dois être maudit :(
Quand je lance Archimade ou Application de démo,
cela explose dans les 2 cas avec le msg fatidique: L'application a quitté inopinément...

Devais-je installer qq chose de particulier autre que wxPython ?
(sorry si mes qst sont triviales...)

Filou :zen:
 
tatouille a dit:
on s'en fou ca doit pas etre supporté à cause du pack juste en passant

télécharge Archimade et ouvre le bundle App ( afficher le contenu du paquet )

http://plumber.gnu-darwin.org/pub/projects/Archimade.zip

Panther

http://plumber.gnu-darwin.org/pub/projects/PyAppStubApplication-MacOSX%20Panther.zip

ou Tiger

http://plumber.gnu-darwin.org/pub/projects/PyAppStubApplication-MacOSX%20Tiger.zip

tu as une application de demo wx
qui utilises mon framework PyAppStubApplication

mais bon tu auras un aperçu de my first wx app

Archimade c'est l'exemple poussé un peu plus loin
pour montrer qu'avec un framework UI cross platforme
on peut faire du vraie natif si on adapte pour chaque UI

et surtout c'est mon appli de dev/debug pour mon PyAppStubApplication

:zen:
C'est impressionnant ton truc !!

On dirait qu' Archimade est fait en Cocoa, en plus le code est super bien foutu, ton NSAppKit c'est géniale, ça fait genre Cocoa en Python (tout est "renommé" pour faire les nom de classe et tout comme Cocoa, ça fait OS X à mort !)

Super intéressant :up:
 
Filou53 a dit:
Oh là, doucement, tu vas un peu vite pour moi :rose:

En plus, je dois être maudit :(
Quand je lance Archimade ou Application de démo,
cela explose dans les 2 cas avec le msg fatidique: L'application a quitté inopinément...

Devais-je installer qq chose de particulier autre que wxPython ?
(sorry si mes qst sont triviales...)

Filou :zen:
panther ? wx est installé si tu as xcode
 
ouvre ton terminal

et ouvre le bundle Archimade

drag et drop Archimade.app/Contents/MacOS/Archimade

dans la fenetre du terminal et fait enter

puis copie moi la sortie obtenue svp

que je vois le probleme
le fat binary est il junk ?

as tu mis l'application dans un dossier avec un accent ( hors alias-name localizé ) ? wx ne supporte pas encore
copie moi la sortie obtenue pour voir ou cela s'arrete (probleme binaire ou coter python )

le debug quand tout se passe bien

Bloc de code:
-- PyApplicationMain.c Starting --
-- PyApplicationMain.c Setting up Python --
-- PyApplicationMain.c Setting up Python __builtin__ module --
PyAppStub_Root='/Volumes/Container/Projects/Darwin/python/pyArchimade/Archimade.app'
PyAppStub_Set('_ASBundleRoot',PyAppStub_Root)
PyAppStub_Set('_ASBundleResources',os.path.join(PyAppStub_Root,'Contents/Resources'))
PyAppStub_Set('_ASBundlePython',os.path.join(PyAppStub_Root,'Contents/Resources/Python'))
PyAppStub_Set('_ASBundleName','Archimade')
PyAppStub_Set('_ASBundleIdentifier','org.Archimade')
PyAppStub_Set('_ASBundleVersion','118')
PyAppStub_Set('_ASBundleShortVersionString','1.0')
PyAppStub_Set('_ASBundleGetInfoString','Copyright © 2006 Plumber OpenSpecies, All rights reserved.')
PyAppStub_Set('_ASHumanReadableCopyright','Copyright © 2006 Plumber OpenSpecies, All rights reserved.')
PyAppStub_Set('_ASBundleHelpBookName','ArchimadeHelp')
sys.path.append(os.path.join('/Volumes/Container/Projects/Darwin/python/pyArchimade/Archimade.app/Contents/MacOS/../Frameworks/PyApplicationStub.framework','Resources/PrivatePython'))
PyAppStub_DEBUG = True

-- PyApplicationMain.c Setting up Python sys.path module --
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/Archimade'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/NSAppKit'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/CFgedeon'))

-- PyApplicationMain.c Python Running --
-- PyApplicationMain.c Executing Python Main File --
/Volumes/Container/Projects/Darwin/python/pyArchimade/Archimade.app/Contents/Resources/Python/Archimade.py
j'ai besoin de la sortie pour voir si ca crame avant, au milieu
ou après l'exectution du main python

si ca crame avant donne moi aussi le fichier
dans ta maison

{Library localisé (en français bibliothèque}/Logs/CrashReporter/Archimade.crash.log

:zen: ca me serait tres utile
merci truk2oof :D

Vous devriez donner des points de réputation à d'autres avant d'en offrir de nouveau à truk2oof.

et chez toi ca fonctionne ?
 
tatouille a dit:
as tu mis l'application dans un dossier avec un accent ( hors alias-name localizé ) ? wx ne supporte pas encore
Bien vu, c'était simplement cela !
L'appli était dans un sous répertoire d'un répertoire avec caractère accentué.
J'ai déplacé et cela fonctionne.
Très joli... :up:

Filou
 
tatouille a dit:
ouvre ton terminal

et ouvre le bundle Archimade

drag et drop Archimade.app/Contents/MacOS/Archimade

dans la fenetre du terminal et fait enter

puis copie moi la sortie obtenue svp

que je vois le probleme
le fat binary est il junk ?

as tu mis l'application dans un dossier avec un accent ( hors alias-name localizé ) ? wx ne supporte pas encore
copie moi la sortie obtenue pour voir ou cela s'arrete (probleme binaire ou coter python )

le debug quand tout se passe bien

Bloc de code:
-- PyApplicationMain.c Starting --
-- PyApplicationMain.c Setting up Python --
-- PyApplicationMain.c Setting up Python __builtin__ module --
PyAppStub_Root='/Volumes/Container/Projects/Darwin/python/pyArchimade/Archimade.app'
PyAppStub_Set('_ASBundleRoot',PyAppStub_Root)
PyAppStub_Set('_ASBundleResources',os.path.join(PyAppStub_Root,'Contents/Resources'))
PyAppStub_Set('_ASBundlePython',os.path.join(PyAppStub_Root,'Contents/Resources/Python'))
PyAppStub_Set('_ASBundleName','Archimade')
PyAppStub_Set('_ASBundleIdentifier','org.Archimade')
PyAppStub_Set('_ASBundleVersion','118')
PyAppStub_Set('_ASBundleShortVersionString','1.0')
PyAppStub_Set('_ASBundleGetInfoString','Copyright © 2006 Plumber OpenSpecies, All rights reserved.')
PyAppStub_Set('_ASHumanReadableCopyright','Copyright © 2006 Plumber OpenSpecies, All rights reserved.')
PyAppStub_Set('_ASBundleHelpBookName','ArchimadeHelp')
sys.path.append(os.path.join('/Volumes/Container/Projects/Darwin/python/pyArchimade/Archimade.app/Contents/MacOS/../Frameworks/PyApplicationStub.framework','Resources/PrivatePython'))
PyAppStub_DEBUG = True

-- PyApplicationMain.c Setting up Python sys.path module --
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/Archimade'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/NSAppKit'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/CFgedeon'))

-- PyApplicationMain.c Python Running --
-- PyApplicationMain.c Executing Python Main File --
/Volumes/Container/Projects/Darwin/python/pyArchimade/Archimade.app/Contents/Resources/Python/Archimade.py
j'ai besoin de la sortie pour voir si ca crame avant, au milieu
ou après l'exectution du main python

si ca crame avant donne moi aussi le fichier
dans ta maison

{Library localisé (en français bibliothèque}/Logs/CrashReporter/Archimade.crash.log

:zen: ca me serait tres utile
merci truk2oof :D

Vous devriez donner des points de réputation à d'autres avant d'en offrir de nouveau à truk2oof.

et chez toi ca fonctionne ?

Chez moi ça fonctionne niquel (d'ailleurs je garde l'appli, c'est plus sympa que de faire ses tgz par le terminal :p

voilà ce que ça donne si je fait la manip :
Bloc de code:
-- PyApplicationMain.c Starting --
-- PyApplicationMain.c Setting up Python --
-- PyApplicationMain.c Setting up Python __builtin__ module --
PyAppStub_Root='/Applications/Utilities/NonApple/Archimade.app'
PyAppStub_Set('_ASBundleRoot',PyAppStub_Root)
PyAppStub_Set('_ASBundleResources',os.path.join(PyAppStub_Root,'Contents/Resources'))
PyAppStub_Set('_ASBundlePython',os.path.join(PyAppStub_Root,'Contents/Resources/Python'))
PyAppStub_Set('_ASBundleName','Archimade')
PyAppStub_Set('_ASBundleIdentifier','org.Archimade')
PyAppStub_Set('_ASBundleVersion','118')
PyAppStub_Set('_ASBundleShortVersionString','1.0')
PyAppStub_Set('_ASBundleGetInfoString','Copyright © 2006 Plumber OpenSpecies, All rights reserved.')
PyAppStub_Set('_ASHumanReadableCopyright','Copyright © 2006 Plumber OpenSpecies, All rights reserved.')
PyAppStub_Set('_ASBundleHelpBookName','ArchimadeHelp')
sys.path.append(os.path.join('/Applications/Utilities/NonApple/Archimade.app/Contents/MacOS/../Frameworks/PyApplicationStub.framework','Resources/PrivatePython'))
PyAppStub_DEBUG = True

-- PyApplicationMain.c Setting up Python sys.path module --
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/Archimade'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/NSAppKit'))
sys.path.append(os.path.join(PyAppStub_Root,'Contents/Resources/Python/CFgedeon'))

-- PyApplicationMain.c Python Running --
-- PyApplicationMain.c Executing Python Main File --
/Applications/Utilities/NonApple/Archimade.app/Contents/Resources/Python/Archimade.py

# ça s'arrête là, l'appli se lance, puis les deux lignes suivante s'affiche quand je la quitte.

-- PyApplicationMain.c Python Exiting --
-- PyApplicationMain.c Exiting --


:zen:


P.S.: merci pour le boulage et j'ai aussi ce truc là :
Vous devriez donner des points de réputation à d'autres avant d'en offrir de nouveau à tatouille
c'est nul qu'il faille en donner à 25 membres avant de pouvoir en redonner à quelqu'un, moi je traîne presque que dans les forums de développement, ben avant que j'ai boulet 25 personnes, il s'en passe du temps et pendant ce temps je ne peut pas boulet ceux qui le mérite...

#PIAF : c'est rigolo de lancer les appli comme ça j'avais jamais essayer...
J'ai fait pareil avec iTunes après on peux s'amuser à quitter l'appli comme un bourrain :D ^C
 
Filou53 a dit:
Je débute sur Python et je fais mes premiers pas avec 'Apprendre à programmer avec Pyton' de G Swinnen (la version pdf).

Je travaille avec Python 2,4,3 et Idle 1,1,3

Quand j'essaie de lancer le script suivant (ch 8,2 page 81):

Code :
from Tkinter import *
fen1 = Tk()
tex1 = Label(fen1, text='Bonjour tout le monde !', fg='red')
tex1.pack()
bou1 = Button(fen1, text='Quitter', command = fen1.destroy)
bou1.pack()
fen1.mainloop()
la fenêtre s'affiche correctement mais j'ai beau cliquer sur le bouton ou les 3 boutons de fenêtre (Mac!), rien ne se passe (sauf avec le bouton orange de réduction de fenêtre qui lui, bizarrement, fonctionne !) :confused:
Filou :zen:

tu as essayé de lancer le script a partir du terminal?
si tu restes dans idle Tkinter ne marchera pas
chez moi ca tourne avec la meme config python et idle
ceci dit c vrai que Tkinter fait parfois un peu sommaire....
 
Finalement, après qq essais foireux, j'ai retesté mon code ligne par ligne...

Comme cela ne changeait rien, je me suis dit que le problème venait peu-être de Idle :hein:
et de fait, en essayant avec ScrIde ( http://projects.gandreas.com/scride/index ), cela fonctionne sans rien changer :up:

yapluka continuer les leçons du tutorial, mais j'ai pris du retard :rose:

Merci à tous pour votre aide,

Filou
 
Bonjour, désolé de ne pas avoir répondu plus tôt mais ça fait très longtemps que j'étais pas venu sur le forum.
Filou53 pour l'explication de ton problème c'est très simple....tu n'as pas dû lire toute la doc ^^.
Bon sans rentrer dans les détails, OS X est un peu particulier, et pour pouvoir intéragir avec les fénêtre il faut répondre à certaines contraintes que le shell Python standard (qui marche pareil sous Linux et window$) ne fait pas.
C'est pour ça que pour lancer une appli graphique avec Tkinter sous MacOSX il faut utiliser "pythonw" qui est fournit en standard.
$ pythonw tonappli
ou alors
$ ./tonappli
avec #! /usr/bin/env pythonw en prmière ligne de ton script et les droits mis en éxecution.