Crunchez vos adresses URL
|
Calculez la conso électrique de votre PC
|
Hébergez vos photos
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 31 à 43 sur 43
  1. #31
    Pour avoir plusieurs onglets ils faut utiliser ttk qui est une librairie qui contient des widgets rajoutés ne faisant pas partie du set natif de widgets de tcl/tk.
    Code:
    from tkinter import ttk
    (valable en python3 uniquement, en python2 c'est pas le même namespace)

    Ensuite utiliser le widget notebook de ttk http://infohost.nmt.edu/tcc/help/pub...-Notebook.html
    Ca permet d'avoir des onglets et de naviguer de l'un à l'autre


    L'idée c'est que chaque onglet contient une Frame dans laquelle ben tu mets ce que tu veux, c'est une frame comme une autre quoi
    Dernière modification par Nattefrost ; 06/09/2016 à 01h02.

  2. #32
    C'est un peu l'équivalent de pprint, pretty print, pour tkinter, il semble. Mouais. ttk fait certes du "plus joli", sauf qu'il n'a pas toutes les options de tkinter.

    Je ne veux pas faire des "vrais onglets", je veux seulement une série de boutons en haut, qui font chacun paraitre une frame différente. Jusqu'à présent, je suis perdu dans comment y parvenir, malgré les différentes exemples trouvés sur internet. J'arrive à afficher une frameA avec un bouton pour aller dans une frameB, mais pas à avoir ma ligne de boutons.



    Là j'ai mes boutons en haut, et je veux que la grande zone grise affiche la frame correspondante. Pour le moment j'en suis à un code confus qui ne fonctionne pas.

    Code:
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    coulbg = "dark grey"
    coultxt = "black"
    winx = "1024"
    winy = "576"
    
    import tkinter
    from tkinter import ttk
    from tkinter.filedialog import *
    
    class InterGeneric(tkinter.Tk): # this class manages the pages, and the upper part of the interface with the tabs to swith pages
    
        def __init__(self, *args, **kwargs):
            tkinter.Tk.__init__(self, *args, **kwargs)
            self.minsize(width=winx, height=winy)
            self.grid()
            self.resizable(True, True)
            container = tkinter.Frame(self)
            container.grid()
    
            self.frames = {}
            for F in (PageOne, PageTwo):
                page_name = F.__name__
                frame = F(parent=container, controller=self)
                self.frames[page_name] = frame
    
                frame.grid(row=1, column=0, sticky="nsew")
    
            self.show_frame("PageOne", self)
    
        def show_frame(self, page_name, controller):
            '''Show a frame for the given page name'''
            frame = self.frames[page_name]
            frame.tkraise()
            self.update()
            self.geometry(self.geometry())
            self.controller = controller
            self.columnconfigure(0, weight=6)
            self.columnconfigure(1, weight=1)
            self.rowconfigure(1, weight=1)
    
            frame_up = tkinter.Frame(self, bg="green", height=50, borderwidth=0)  # upper part of the window, with all buttons in a green frame
            frame_up.grid(column=0, row=0, sticky="we")
    
            but_cfg = dict(borderwidth=1, fg='grey', bg='black', activeforeground='grey99', activebackground='black')
    
            but_one = Button(frame_up, text="-> Page One", command=lambda: controller.show_frame("PageOne"), **but_cfg)
            but_one.grid(column=0, row=0, padx=10, pady=10, sticky="nsew")  # button to go to PageOne
    
            but_two = Button(frame_up, text="-> Page Two", command=lambda: controller.show_frame("PageTwo"), **but_cfg)
            but_two.grid(column=1, row=0, padx=10, pady=10, sticky="nsew")  # button to go to PageTwo
    
    
            frame_upq = tkinter.Frame(self, bg="purple", height=50, borderwidth=0)  # frame top right with Quit button
            frame_upq.grid(column=2, row=0, sticky="we")
    
            but_quitter = Button(frame_upq, text="-> Quit", command=self.quit, **but_cfg)
            but_quitter.grid(column=0, row=0, padx=10, pady=10, sticky="e") # button to quit
    
            for i in range(2):
                frame_up.grid_columnconfigure(i, weight=1)
            frame_up.grid_rowconfigure(0, weight=1)
    
            frame_upq.grid_columnconfigure(0, weight=1)
            frame_upq.grid_rowconfigure(0, weight=1)
    
    class PageOne(tkinter.Frame):
    
        def __init__(self, parent, controller):
            tkinter.Frame.__init__(self, parent)
            self.controller = controller
            frame_pageone = tkinter.Frame(self, bg="blue", height=200)  # should be PageOne full of blue
    
    class PageTwo(tkinter.Frame):
    
        def __init__(self, parent, controller):
            tkinter.Frame.__init__(self, parent)
            self.controller = controller
            frame_pagetwo = tkinter.Frame(self, bg="red", height=200)  # should be PageTwo full of red
    
    if __name__ == "__main__":
        app = InterGeneric()
        app.title("DraDro_160524.01")
        app.mainloop()
    * 1d100 ? Un blog indécent sur les jeux indé... Jeux1d100.net et les vidéos qui vont avec : PeerTube et YouTube *

  3. #33
    ttk a toutes les options de tkinter (si tu parle des couleurs notamment) mais tu ne peux pas les set comme ceci :
    Code:
    b = tk.Button(root, text='COUCOU TCHEY',bg='black',fg='yellow').pack()
    A la place il faut creer des styles ttk qui s'appliquent sur les widgets que tu veux. On perd en simplicite mais c'est plus propre. J'ai tres peu utilise les styles donc je me garderai de te donner des conseils sur comment les utiliser. http://infohost.nmt.edu/tcc/help/pub...yle-layer.html

  4. #34
    Salut ici,

    Je bute sur un truc.

    J'ai une classe Container qui gère l'inventaire, avec .add et .remove notamment. Je cherche à faire des bestioles avec des morceaux, composées de pattes, trompes, becs..., et pour gérer ça je pense faire comme un équipement dans un JDR classique, sauf que arme, armure... c'est des membres et organes.

    Pour une bestiole, ou le joueur, ça va, ça marche. Mais quand je veux plusieurs bestioles chacune avec son "inventaire", je ne sais pas comment faire.

    Code:
    class Fauna(Character):
        def __init__(self, name, desc, nerf, fluide, chimie, gaz):
            Character.__init__(self, name)
    
            self.name = name
            self.desc = desc
    Mes trois bestioles avec chacune un inventaire de "composants"

    Code:
    muscae = Fauna("Muscae", "* Une mouche grosse comme une main.", 1, 1, 1, 1)
    muscae.compo = Container("", "")
    muscae.compo.add(patte_at)
    muscae.compo.add(patte_at)
    muscae.compo.add(patte_pt)
    muscae.compo.add(patte_pt)
    
    rodentia = Fauna("Rodentia", "* Un lapin aux oreilles percées.", 2, 1, 1, 1)
    rodentia.compo = Container("", "")
    rodentia.compo.add(patte_at)
    rodentia.compo.add(patte_at)
    rodentia.compo.add(patte_pt)
    rodentia.compo.add(patte_pt)
    
    caninae = Fauna("Caninae", "* Un chien sauvage, affaibli par la faim et la maladie.", 2, 2, 1, 1)
    caninae.compo = Container("", "")
    caninae.compo.add(patte_at)
    caninae.compo.add(patte_at)
    caninae.compo.add(patte_pt)
    caninae.compo.add(patte_pt)
    caninae.compo.add(queue_courte)
    
    FAUNA = (muscae, rodentia, caninae)
    Ensuite je veux afficher une sorte de bestiaire

    Code:
    for i in FAUNA: 
        print ("   {} ".format(i.name) + Colour.PURPLE + "{}".format(i.desc) + Colour.END)
        print ("      matorg : " + Colour.RED + "{}".format(i.matorg) + Colour.END + " (n{} f{} c{} g{})".format(i.nerf, i.fluide, i.chimie, i.gaz))
        print ("")
        for name, item in i.compo:
            print ("   compo : ", end="")
            print (Colour.DCYAN + "[{} x{}] ".format(item.name, item.qtt) + Colour.END, end="")
    Ça me sort quelque chose que je ne comprends pas. Le total des membres ou organes ne correspond pas, et je ne sais pas "comment ça compte" pour arriver à ça.

    Code:
     Muscae * Une mouche grosse comme une main.
          matorg : 5 (n1 f1 c1 g1)
       compo : [Patte At x4]    compo : [Patte Pt x4] 
    
       Rodentia * Un lapin aux oreilles percées.
          matorg : 8 (n2 f1 c1 g1)
       compo : [Patte At x4]    compo : [Patte Pt x4] 
    
       Caninae * Un chien sauvage, affaibli par la faim et la maladie.
          matorg : 11 (n2 f2 c1 g1)
       compo : [Patte At x4]    compo : [Queue courte x1]    compo : [Patte Pt x4]
    Du coup, comment je dois procéder, et est-ce une "bonne" façon de gérer la composition des bestioles (dans l'idée de les démembrer, de faire des mutants, etc), ou alors pas du tout arrêtons le massacre ou autre ?

    Merci d'avoir lu

    * 1d100 ? Un blog indécent sur les jeux indé... Jeux1d100.net et les vidéos qui vont avec : PeerTube et YouTube *

  5. #35
    Je connais pas trop les containers en python, mais compo.qtt devrais te donner le nombre de membres. Et non item.qtt qui lui est un des membres de compo. Maintenant pour dissocier les types de membres pour les compter je ne sais pas trop en python. J'espère ne pas me tromper sur la question.

  6. #36
    Ca fait longtemps que j'ai pas regardé du python mais ce que dit patate me parait cohérent.

    Tu utilises quoi pour développer, un IDE ou un éditeur de texte et tu compiles a la main ?
    Pour ce genre de cas, c'est souvent très utile de pouvoir utiliser les BreakPoint qui te permettent de suivre pas à pas l’exécution de ton programme et d'avoir la valeur de toutes tes variables à l'instant T.
    Très utile dans ces cas la ou une variable ne représente pas toujours ce que l'on pense.

  7. #37
    Plop !
    Je suis une quiche en prog (niveau de départ -42) et j'ai commencé à bouffer des tutos pour en apprendre les bases.

    Alors autant les boucles et les tests ça va mais les fonctions et ces foutues variables globales ou locales il y a un truc que je ne chope pas du tout.

    Quand on est dans une fonction, pour faire ressortir les variables on peut utiliser global (mais c'est à éviter) ou se servir de variables temporaires.

    Comme je ne parviens pas à mes fins je me suis fabriqué un exercice simple avec une histoire de pommes, en dur ça donne ça :

    Code:
    # toto a un panier qu'il rempli de pommes
    # lorsqu'il a 10 pommes il vide son panier dans une caisse et recommence
    # il arrête de remplir son panier lorsqu'il a 10 caisses de pommes
    
    panier = 0
    caisse = 0
    pommes = 0
    
    # boucle globale
    print("toto apple")
    while pommes < 100:
        # remplissage du panier
        # si le panier a dix pommes toto met les pommes dans une caisse et vide le panier
        if panier >= 10:
            caisse += 1
            pommes = pommes + panier
            panier = 0
            print("toto a rempli une caisse, il y a désormais", caisse, "caisses de pommes")
            print("il y a", panier, "pommes dans le panier")
    
        # sinon on met une pomme dans le panier
        else:
            panier += 1
            print("toto cueille une pomme, son panier contient désormais", panier, "pommes")
    
    # on termine lorsque toto a 100 pommes dans 10 caisses
    print("C'est fini, Toto a", pommes, "pommes dans ", caisse, "caisses")
    Jusque là tout va bien.
    Mais si je veux utiliser des fonctions ça me spawn des erreurs (NameError: name 'pommes_temp' is not defined), ce qui signifie que je n'ai à priori pas compris quelque chose.

    exemple :
    Code:
    # toto a un panier qu'il rempli de pommes
    # lorsqu'il a 10 pommes il vide son panier dans une caisse et recommence
    # il arrête de remplir son panier lorsqu'il a 10 caisses de pommes
    
    # l'idée est d'utiliser des fonctions pour otenir le résultat
    
    panier = 0
    caisse = 0
    pommes = 0
    
    def panier_plein():
        # fonction qui ajoute des pommes au panier et qui vérifie qu'il n'y en a pas trop
        if panier >= 10:
            caisse_temp = caisse + 1
            pommes_temp = pommes + panier
            panier_temp = 0
            print("toto a rempli une caisse, il y a désormais", caisse, "caisses de pommes")
            print("il y a", panier, "pommes dans le panier")
            # on renvoie les variables pour les utiliser
            return caisse_temp, pommes_temp, panier_temp
        # si le panier n'est pas plein on va remplir le panier avec une autre fonction
        else:
            remplissage()
    
    def remplissage():
        panier_temp = panier +1
        print("toto cueille une pomme, son panier contient désormais", panier, "pommes")
        # on renvoie la variable
        return panier_temp
    
    # boucle globale
    print("toto apple 2 - avec fonction")
    while pommes < 100:
        panier_plein()
        # on intègre l'ensemble des variables retournées
        pommes = pommes_temp
        panier = panier_temp
        caisse = caisse_temp
    
    # on termine lorsque toto a 100 pommes dans 10 caisses
    print("C'est fini, Toto a", pommes, "pommes dans ", caisse, "caisses")
    Bref, c'est pas gagné.
    Help me !
    La loutre ça poutre !

  8. #38
    Pourquoi utiliser des fonctions ?
    Ton premier script marche, non ?
    une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
    Canard zizique : ?, , Φ, , ¤ , PL, 10h, , , , , , ?, , ?, ? ? ?, ?, ?, , , blues, BOF, BOJV, , ?, ?, 8, ?, ?, ?, 2, 80, ?, , , funk, fusion, ?, , ?, ?, ?, ?, ?, ? , noise, pop, , , $ $, , et ⚑, soul, , ?, (allez là si vous ne voyez pas les miquets)

  9. #39
    Et bien pour apprendre !

    D'autant qu'une fonction sert à accomplir des tâches répétitives.
    Une fois que j'aurais chopé le coup,je pourrais demander à Toto de ramasser toutes sortes de fruits et de légumes afin de l'exploiter comme un toto !
    La loutre ça poutre !

  10. #40
    Tu retournes des valeurs mais tu ne les récupères pas.

    Quand tu fais

    panier_plein()
    # on intègre l'ensemble des variables retournées
    pommes = pommes_temp
    panier = panier_temp
    caisse = caisse_temp

    Tu ne récupère pas les valeurs renvoyé panier_plein et pommes_temp est inconnu puisqu'elle existe que dans ta fonction.

    Pour récupéré les valeurs, il faut faire :

    caisse, pommes, panier = panier_plein()
    Venez voir mon site, Geek Passion, avec entre autres : Mon super casse brique - The Witcher 3 en 360°.
    Venez vider votre backlog grâce aux events du backlog sur cpc-backlog-event.

  11. #41
    Ah ?
    *bruit de cerveau qui fume*

    Ok donc, si je comprends bien on applique une fonction à quelque chose et pour récup la variable c'est de la forme
    Code:
    ma_variable = ma_super_fonction()
    C'est bien ça ?
    La loutre ça poutre !

  12. #42
    Citation Envoyé par cosmicsoap Voir le message
    Ah ?
    *bruit de cerveau qui fume*

    Ok donc, si je comprends bien on applique une fonction à quelque chose et pour récup la variable c'est de la forme
    Code:
    ma_variable = ma_super_fonction()
    C'est bien ça ?
    Oui c'est ça. Et dans ta fonction tu retournes la variable en faisant un return + le nom de ta variable (ou une valeur)

    Et tu peux mettre des paramètres à tes fonctions

    Code:
    def sum(nb):
        nb = nb + 1
        return nb
    
    toto = 10
    toto = sum(toto)
    Tu déclares une variable, toto, et tu l'initialise à 10 puis tu la passe en paramètre à sum. Dans sum tu augmente de 1 la variable passée en paramètres puis tu la retourne et tu la récupère. Maintenant toto vaut 11.
    Venez voir mon site, Geek Passion, avec entre autres : Mon super casse brique - The Witcher 3 en 360°.
    Venez vider votre backlog grâce aux events du backlog sur cpc-backlog-event.

  13. #43
    Quand je pense que je croyais naïvement que je pouvais me servir d'une fonction comme une boite magique

    Faut que je travaille ça.
    Thx.
    La loutre ça poutre !

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •