CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Récupérer la sortie d'une fonction sur tkinter

ShimaPantsu
ShimaPantsu
Niveau 2
08 novembre 2015 à 19:05:48

Bonjour !

Je suis un débutant en programmation, je suis à la fac de maths-info à Bordeaux, et afin d'avoir plus de facilité en cours, j'ai décidé de créer des petits programmes me permettant de me familiariser avec des fonctions que je rencontrerai plus tard en cours.

Le programme que je fais actuellement est une simulation de tirage aléatoire avec des probabilités définies.

import random
from tkinter import *


main = Tk()
main.geometry("640x360+100+50")
main.title('random')


def tirage():
    
    eventualites = [('Rouge',10), ('Vert',80),('Bleu',5),('Noir',9)]
    evenement = [val for val, cnt in eventualites for i in range(cnt)]
    print(random.choice(evenement))


description = Label(main, text = "Quelle couleur allez vous obtenir ?").pack(side=TOP, pady = 50)

genererTirage = Button(main, text = "Tirage !",command = tirage).pack(side=BOTTOM, pady = 30) 




Le problème est que je suis bloqué à une étape, j'obtiens les éléments de ma liste aléatoirement dans l'interpréteur mais je n'arrive pas à les afficher sur la fenêtre tkinter.

J'ai cherché un peu partout, et j'ai trouvé comment récupérer le contenu d'une Entry et l'injecter dans un label, mais je n'ai pas trouvé pour une fonction.

Merci de votre aide

Schiffer
Schiffer
Niveau 10
08 novembre 2015 à 20:18:11

main.mainloop() à la fin

ShimaPantsu
ShimaPantsu
Niveau 2
09 novembre 2015 à 01:36:46

A la fin de ma fonction ou à la fin du code entier ?

Je viens d'essayer les deux, et le résultat ne s'affiche toujours pas sur ma fenetre tkinter :(

Bnwy
Bnwy
Niveau 3
09 novembre 2015 à 18:53:28

Salut, voila ce que je te propose
Je t'ai rajouté des petits détails qui prendront tout leur importance si tu aimes tkinter, prend le temps de les lire, on peut faire plein de trucs avec Tkinter :ok:

En bonus, écris from tkinter.ttk import * juste après from tkinter import *, tu vas avoir le droit à l'interface graphique de ton OS au lieu de l'affichage windows XP :ok:



import random
from tkinter import *

main = Tk()
main.geometry("640x360+100+50")
main.title('random')


def tirage():
    eventualites = [('Rouge',10), ('Vert',80),('Bleu',5),('Noir',9)]
    evenement = [val for val, cnt in eventualites for i in range(cnt)]
    #print(random.choice(evenement))

    txt_label.set(str(random.choice(evenement)))
    
    

#/!\ si tu fais mon_widget=Label(...).pack(), il ne crée pas l'objet mon_widget (car pour lui mon_widget est le fait d'avoir packé le Label)
#    donc sois tu crée un widget, puis tu l'affiches (en séparant les étapes) (genre mon_widget=Label(...) ; mon_widget.pack()), soit tu affiches un widget
#    sans nom (mais qui existe, cf le label que j'ai créé juste avant le main.mainloop()
description = Label(main, text = "Quelle couleur allez vous obtenir ?") ; description.pack(side=TOP, pady = 50)

#sinon renseigne-toi sur le .grid() pour l'affichage des widgets, c'est bc plus simple à utiliser.
#ex : mon_widget=Label(...) ; mon_widget.grid(row=1, column=1, padx=10, sticky=W) : consiste à placer le widget dans une grille imaginaire (sticky = N (ou S, E, W) :
#     points cardinaux, càd le côté de la case où veux que le widget se colle. Tu peux aussi les combiner (ex : NW) ou ne rien mettre (-> c'est centré))
#     
genererTirage = Button(main, text = "Tirage !",command = tirage) ; genererTirage.pack(side=BOTTOM, pady = 30) 

#Les variables des widgets Tkinter sont du type StringVar() ou IntVar(), ça ne marche pas avec les int et str classiques.
#De plus,  il faut utiliser ma_var.set() pour modifier la variable (ex : ma_var.set("2") si ma_var du type StringVar() ou ma_var.set(2) si ma_var du type IntVar())
#Pour acquérir le contenu des variables Tkinter, il faut utiliser ma_var.get() (sert surtout dans les Entry, Spinbox, etc.) (ex : var_entry = StringVar() ; var_entry.set("") ; Entry(main, textvariable=var_entry) puis contenu_var = var_entry.get())
txt_label = StringVar()
txt_label.set("")  # c'est pour l'initialisation
Label(main, textvariable=txt_label).pack()   # astuce : text=... pour afficher un texte qui ne bougerea pas, mais sinon utiliser textvariable = ma_var avec ma_var du type StringVar()

main.mainloop()

ShimaPantsu
ShimaPantsu
Niveau 2
10 novembre 2015 à 00:17:27

Merci beaucoup pour ton aide ainsi que pour tes conseils et les détails ! :ange:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment