Partage
  • Partager sur Facebook
  • Partager sur Twitter

Label de tkinter cache le fond d'écran.

    2 novembre 2019 à 19:52:06

    Bonsoir à tous la commu ;)

    Je viens vers vous car, dans ma classe de nsi, nous travaillons à rendre un programme d'un jeu tout simple en interface graphique. Alors que je galérais pour mettre un fond d'écran, lorsque j'ai réussi à le mettre, le texte contenu dans les labels possède une sorte d'arrière plan!

    https://www.noelshack.com/2019-44-6-1572720837-sans-titre.png

    Comme vous le voyez, ces gros carrés gris sont un peu gênants :/

    Je ne trouve rien sur internet, j'espère pouvoir trouver une solution!

    Voilà le code entièrement commenté si ça intéresse quelqu'un ^^ :

    # -*- coding: utf-8 -*-
    import tkinter, random, time, os, urllib.request # Import des modules
    window = tkinter.Tk() # Création de la fenêtre
    compteur = 0
    def imageTelechargor3000(url, filename):
        urllib.request.urlretrieve(url, filename)
    
    def theAmazingWaiting(message): # Changer le label par une fonction
        description.config(text = message, font=("Trebuchet MS",50))
    
    def test(): # Trouve nombre script
        if number == int(numberInput.get()): # Si le nombre entré est égale au nombre du random
            description.config(text="", font=("Trebuchet MS",0)) # Effacer le label
            window.after(300,lambda: theAmazingWaiting("T'as gagné mon gros !")) # Attend x secondes avant la mise à jour du label (ms)
        elif number < int(numberInput.get()):
            description.config(text="", font=("Trebuchet MS",0))
            window.after(300,lambda: theAmazingWaiting("Le nombre est inférieur !"))
        elif number > int(numberInput.get()):
            description.config(text="", font=("Trebuchet MS",0))
            window.after(300,lambda: theAmazingWaiting("Le nombre est supérieur !"))
        compteur += 1
    
    imageTelechargor3000("https://www.zupimages.net/up/19/44/9ndo.gif", "background.gif") # Download le background
    background = tkinter.PhotoImage(file = "background.gif") # Déf du background
    background_label = tkinter.Label(window, image=background) # Déf du background dans un label
    background_label.place(x=0, y=0, relwidth=1, relheight=1) # Place le background au milieu
    
    
    window.attributes("-fullscreen", 1) # Plein écran
    number = random.randint(1, 10) # déf du nombre à deviner
    window.title("TrouveNombre") # Création du titre
    description = tkinter.Label(window, text="Bienvenue dans le jeu trouve nombre\nle principe est de trouver un nombre compris\nentre 1 et 10 en un minimum de coup", font=("Trebuchet MS",50)) # Création du label
    description.pack() # Alignement du label au centre
    window.update() # Actualise la fenêtre
    time.sleep(3) # Met en pause la fenêtre pour x secondes
    description.config(text = "Entrez un nombre\n") # Modification du label existant
    numberInput = tkinter.StringVar() #  Création de la variable de l'input
    entree = tkinter.Entry(window, textvariable=numberInput, width=20) # Création de l'input
    entree.pack() # Alignement du input au centre
    boutonValider=tkinter.Button(window, text="Valider", font = ("Trebuchet MS",50), command=test) # Création du bouton Valider
    boutonValider.pack() #  Alignement du bouton au centre
    window.update() # Actualise la fenêtre
    time.sleep(1) # Met en pause la fenêtre pour x secondes
    window.mainloop() # Maintenance de la fenêtre

    En espérant obtenir de l'aide! Merci :)

    -
    Edité par Norrissien 2 novembre 2019 à 19:54:46

    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2019 à 18:17:08

      tu est sous quel os ?

      pour windows il semble que

      root.wm_attributes('-alpha', 0)

      marche (pas testé, j'ai linux)

      Il y a pas mal de discutions qui parlent de ce problème, la solution qui revient le plus c'est d'utiliser un canvas de mettre l'image en fond du canvas et  de mettre le texte dedans  avec <tt class="descclassname">ton_canvas.</tt><tt class="descname">create_text()</tt>, l'attribut texte du canvas a un fond transparent par défaut .

      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2019 à 19:05:30

        Blue_Badger a écrit:

        tu est sous quel os ?

        pour windows il semble que

        root.wm_attributes('-alpha', 0)

        marche (pas testé, j'ai linux)

        Il y a pas mal de discutions qui parlent de ce problème, la solution qui revient le plus c'est d'utiliser un canvas de mettre l'image en fond du canvas et  de mettre le texte dedans  avec <tt class="descclassname">ton_canvas.</tt><tt class="descname">create_text()</tt>, l'attribut texte du canvas a un fond transparent par défaut .

        Bonsoir Blue_Badger, je suis sous windows 10 avec python 3.

        J'ai essayé cette ligne dans mon code mais la fenêtre devient transparente et il m'est impossible d'y accéder, concernant les canvas, je suis tombé plusieurs fois sur le sujet, et je n'y comprends rien... Je n'ai pas bien compris mais il faut mettre le texte ou le fond d'écran dans un canvas et je ne sais pas ce que c'est, je ne vois pas la différence pas un label :(

        Merci de ta réponse :/



        -
        Edité par Norrissien 3 novembre 2019 à 19:05:57

        • Partager sur Facebook
        • Partager sur Twitter
          4 novembre 2019 à 21:06:18

          Alors...

          quand tu ne comprend pas un truc de tkinter, il y a un site très bien fait et en français: tkinter pour isn. Par exemple voila l'article sur le canvas.

          Un canvas c'est (je site l'article): une zone rectangulaire destinée à contenir des dessins ou d’autres figures complexes. Vous pouvez y placer des graphiques, du texte, des composants graphiques (widgets) ou des cadres (frames).

          L'idée que je te propose c'est de créer un canvas qui fait la taille de la fenêtre, puis dans le canvas tu affiche l'image de ton fond d'écran et par dessus, le texte. exemple:

          import tkinter as tk
          
          fenetre = tk.Tk()
          
          image = tk.PhotoImage(file="ton_image.png") # ton image
          
          canvas = tk.Canvas(fenetre) # le canvas, il faut régler sa taille pour qu'il occupe toute la fenêtre
          canvas.create_image(0, 0, image=image) # on ajoute l'image dans le canvas
          canvas.create_text(120, 50, text="le texte que je veux afficher") # on ajoute le texte
          
          canvas.pack()
          
          fenetre.mainloop()



          et ensuite tout ce que tu veux mettre dans ta fenêtre, il faut le mettre dans le canvas.

          ça t'aide ?

          -
          Edité par Blue_Badger 5 novembre 2019 à 8:41:41

          • Partager sur Facebook
          • Partager sur Twitter
            30 septembre 2022 à 21:37:16

            les labelles de Tkinter disposent d' une proprette nommée bg, c' elle qui te permet de changer leurs background
            label_n = Label(fen,text="Modulo :",font="Comic 20",bg="yellow")
            • Partager sur Facebook
            • Partager sur Twitter
              3 octobre 2022 à 11:28:21

              j'espère que depuis 2019, il aura résolu son problème :lol:
              • Partager sur Facebook
              • Partager sur Twitter

              Label de tkinter cache le fond d'écran.

              × 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.
              • Editeur
              • Markdown