voilà pour m'amuser j'ai coder une sorte de Space Invaders mais il m'est venu une idée en le finissant, je voudrais depuis une fenetre Tkinter et avec des Buttons dans un fichier py à part executer le fichier py du code du jeu mais je sais pas comment faire comprendre à Tkinter le fait d'ouvrir un autre fichier que le siens
voici mes deux fichiers,
FICHIER DU CODE DU JEU :
import turtle
import os
import math
import random
import pygame.mixer
from pygame.locals import*
pygame.mixer.init()
fenetre = turtle.Screen()
fenetre.setup(800,800)
fenetre.bgcolor("black")
fenetre.title("Space Invaders")
fenetre.bgpic("Background1.gif")
turtle.register_shape("Martien.gif")
turtle.register_shape("Joueur1.gif")
##bordure_prim = turtle.Turtle()
##bordure_prim.speed(0)
##bordure_prim.color("white")
##bordure_prim.penup()
##bordure_prim.setposition(-300,-300)
##bordure_prim.pendown()
##bordure_prim.pensize(3)
##for taille in range(4):
## bordure_prim.fd(600)
## bordure_prim.lt(90)
##bordure_prim.hideturtle()
pygame.mixer.music.load("BackSound.wav")
pygame.mixer.music.play()
volume = pygame.mixer.music.get_volume()
pygame.mixer.music.set_volume(100)
Son_Tirs = pygame.mixer.Sound("laser.wav")
Son_Explosion = pygame.mixer.Sound("explosion.wav")
SCORE = 0
SCORE_prim = turtle.Turtle()
SCORE_prim.speed(0)
SCORE_prim.color("white")
SCORE_prim.penup()
SCORE_prim.setposition(-290,270)
SCOREtxt = "Score : %s" %SCORE
SCORE_prim.write(SCOREtxt, False, align="left", font=("Arial",14,"normal"))
SCORE_prim.hideturtle()
joueur = turtle.Turtle()
joueur.color("blue")
joueur.shape("Joueur1.gif")
joueur.penup()
joueur.speed(0)
joueur.setposition(0,-250)
joueur.setheading(90)
vitesseJoueur = 15
tirs = turtle.Turtle()
tirs.color("yellow")
tirs.shape("triangle")
tirs.penup()
tirs.speed(0)
tirs.setheading(90)
tirs.shapesize(0.5,0.5)
tirs.hideturtle()
vitesseTirs = 20
StatusTirs = "pret"
nombreDeMartiens = 5
Bataillon = []
for i in range(nombreDeMartiens):
Bataillon.append(turtle.Turtle())
for martiens in Bataillon:
#martiens = turtle.Turtle()
martiens.color("red")
martiens.shape("Martien.gif")
martiens.penup()
martiens.speed(0)
x = random.randint(-200,200)
y = random.randint(100,250)
martiens.setposition(x,y)
vitesseMartiens = 2
def depGauche():
x = joueur.xcor()
x -= vitesseJoueur
if (x<-280):
x = -280
joueur.setx(x)
def depDroite():
x = joueur.xcor()
x += vitesseJoueur
if (x>280):
x = 280
joueur.setx(x)
def Feu():
global StatusTirs
if (StatusTirs == "pret"):
Son_Tirs.play()
StatusTirs = "feu"
x = joueur.xcor()
y = joueur.ycor()+10
tirs.setposition(x,y)
tirs.showturtle()
def CollisionAvecMartiens(x1,x2):
zone = math.sqrt(math.pow(x1.xcor()-x2.xcor(),2)+math.pow(x1.ycor()-x2.ycor(),2))
if (zone<15):
return True
else:
return False
turtle.listen()
turtle.onkey(depGauche, "Left")
turtle.onkey(depDroite, "Right")
turtle.onkey(Feu, "space")
while True:
for martiens in Bataillon:
x = martiens.xcor()
x += vitesseMartiens
martiens.setx(x)
if (martiens.xcor()>280):
for b in Bataillon:
y = b.ycor()
y -= 40
b.sety(y)
vitesseMartiens *= -1
if (martiens.xcor()<-280):
for b in Bataillon:
y = b.ycor()
y -= 40
b.sety(y)
vitesseMartiens *= -1
if (CollisionAvecMartiens(tirs,martiens)):
Son_Explosion.play()
tirs.hideturtle()
StatusTirs = "pret"
tirs.setposition(0,-400)
x = random.randint(-200,200)
y = random.randint(100,250)
martiens.setposition(x,y)
SCORE += 10
SCOREtxt = "Score : %s" %SCORE
SCORE_prim.clear()
SCORE_prim.write(SCOREtxt, False, align="left", font=("Arial",14,"normal"))
if (CollisionAvecMartiens(joueur,martiens)):
Son_Explosion.play()
joueur.hideturtle()
martiens.hideturtle()
print("Game Over")
break
if (StatusTirs == "feu"):
y = tirs.ycor()
y += vitesseTirs
tirs.sety(y)
if (tirs.ycor()>275):
tirs.hideturtle()
StatusTirs = "pret"
delay = raw_input("Tapez entrer pour fermer.")
FICHIER DU CODE TKINTER:
import turtle
from tkinter import*
import os
import math
import random
import pygame.mixer
from pygame.locals import*
ChoixNiveau = Tk()
ChoixNiveau_LVL1 = Label(ChoixNiveau,text="Niveau 1 : Earth Spacial")
ImageBtnLVL1 = PhotoImage(file='BTNLVL1.gif')
ChoixNiveau_Btn1 = Button(ChoixNiveau,image=ImageBtnLVL1,command=FICHIER_DU_JEU)
ChoixNiveau_LVL1.pack()
ChoixNiveau_Btn1.pack()
ChoixNiveau.mainloop()
La solution qui me semble là plus viable reste les threads, car les deux framework utilisent leur propre boucle événementielle.
Voir sur ton moteur de recherche avec thread tkinter pygame
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Regarde du côté de TurtleScreen sur la doc, ça semble fait pour Tkinter
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Ouai mais attention moi j'ai deux fichiers ".py" différents j'ai mon fichier Tkinter et mon fichier Turtle ce que je veux c'est qu'a l'exécution mon fichier Tkinter me propose plusieurs choix via boutons et que quand je clique sur un bouton sa me ferme mon fichier Tkinter pour ouvrir le second fichier ".py" avec le code Turtle
Ok, donc c'est encore plus simple, quel est le soucis au final ?
Sur le principe, on crée un callback qui va exécuter ton autre fichier python via subprocess par exemple, et quitter tkinter.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
L'erreur "_tkinter.TclError: image "pyimage3" doesn't exist" est très courante quand tu utilise des Thread, parce que tkinter est pas vraiment thread safe.
L'une des options les plus simples consisterait à faire une classe afficher niveau, d'importer ton premier fichier .py et de lancer l'affichage de la classe.
Ou même carrément directement importer le fichier py pour qu'il se lance au tout début!
Je pense que le problème vient du fait que tu supprimes une instance Tk dans un callback, tu devrais essayer avec une fenêtre de type Toplevel.
Tristan Starkl L'Immortel a écrit:
Salut!
L'erreur "_tkinter.TclError: image "pyimage3" doesn't exist" est très courante quand tu utilise des Thread, parce que tkinter est pas vraiment thread safe.
L'une des options les plus simples consisterait à faire une classe afficher niveau, d'importer ton premier fichier .py et de lancer l'affichage de la classe.
Ou même carrément directement importer le fichier py pour qu'il se lance au tout début!
Le problème c'est que je ne vois pas l'utilisation de thread dans son programme. Si ?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Tu regardes les tutos tkinter utilisant la classe Toplevel, tu fais des petits tests et tu adaptes à ton code. C'est ça la programmation, un travail de recherches et de tests pratiques...
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
J'en suis pas a mon premier programme en Tkinter les cours OpenClassroom je les ai lu (en plus de mes cours en classe de BTS) j'aurais au moins souhaité une piste un peu plus précise xP
Tk est la fenêtre principale, il te faudra une fenêtre secondaire où mettre ton bouton nommée Toplevel.
C'est cette fenêtre secondaire que tu devras détruire (méthode destroy) à la suite de l'exécution de ton autre fichier Python. Je ne suis pas sûr par contre que pour exécuter ton autre fichier, exec soit la bonne méthode, j'avais proposé le module subprocess.
Que faire de la fenêtre principale Tk ? Là cacher !
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Deux fenêtres ? Mais c'est illogique une seule devrait pouvoir suffir non ? Fin je veux dire c'est comme ci pour lancer un jeux pc par exemple un truc tout con le solitaire il m'ouvrait 3/4 fenêtre avant de lancer le launcher et même pas le jeu xP fin je vais essayer merci en tout cas je vais voir sa
Oui certainement, et quand je teste de mon côté, ça n'a pas l'air de déranger,
In [1]: from tkinter import *
In [2]: def destroy():
...: root.destroy()
...:
In [3]: root = Tk()
In [4]: button = Button(root, text='quit', command=destroy)
In [5]: button.pack()
In [6]: root.mainloop()
du coup je me demande bien d'où ça vient... peut-être devrais tu tester sans l'image pour voir si ça viendrait pas de là.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Problème Tkinter appel fichier.py
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)