IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Plusieurs questions a propos de Tkinter


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Plusieurs questions a propos de Tkinter
    Bonjour, je suis un développeur sur Casio graph 35+ et j'aimerai, créer, pour m'aider une interface simulant l'ecran de la calculatrice.
    En effet, la calculatrice permet d'indiquer la localisation d'un pixel pour le rendre visible ou non. Cela permet entre autre de créer des dessins.
    Voila pourquoi j'aimerai créer un petit logiciel python pour faire ceci.
    Pour le moment, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    from tkinter import *
    import tkinter as tk
     
    main = Tk()
    main.geometry("500x400+500+250")
    main.title('1er version')
    main['bg'] = 'white'
    nomfichier = 'CasioMaker.txt'
     
    def a():
        fichier = open(nomfichier, 'w')
        fichier.write('\'Made by Tituya\n')
        fichier.write('Cls\n')
        fichier.write('ViewWindow 1,127,1,1,63,1\n')
        fichier.write('AxesOff\n')
        fichier.close()
     
    def b():
        main.destroy()
     
    def c():
        for ligne1 in range(10):
            for colonne1 in range(10):
                button = tk.Button(main, borderwidth=1, background='white', width=2, height=1)
                button['command'] = lambda button=button: button.configure(background = 'black')
                button.grid(row=ligne1, column=colonne1)
     
    for ligne in range(10):
        for colonne in range(10):
            button = tk.Button(main, borderwidth=1, background='white', width=2, height=1)
            button['command'] = lambda button=button: button.configure(background = 'black')
            button.grid(row=ligne, column=colonne)
     
     
    menu = Menu(main)
    sousmenu = Menu(menu, tearoff=0)
    menu.add_cascade(label="Menu", menu=sousmenu)
    sousmenu.add_command(label="Creer le fichier texte", command=a)
    sousmenu.add_command(label="Quitter", command=b)
    menu.add_command(label="Effacer", command=c)
    main.config(menu = menu)
    main.mainloop()
    Je débute fortement

    Dans ce code, j'ai des "boutons" qui lorsque j'appuie dessus deviennent noirs. Mais seulement, comment faisons nous pour, lors d'un nouveau clique revenir a la couleur d'origine (blanc) ?
    Autre question. Pour le moment, j'ai une grille de 10x10. Mais ces chiffres sont trop grand pour afficher la totalité sur mon ecran. Mais, en essayant de passé le width et le height plus bas (nombres décimal comme 0.5) cela ne fonctionne pas. Comment puis-je baisser la taille de mes carrés pour permettre l'affichage complet ? (127x63)
    Et aussi, j'ai besoin de savoir quel carré est coloré en noir pour savoir leurs coordonnés pour les réutiliser dans le portage dans mon fichier txt.

    Apres avoir répondu a ces questions, mon programme sera fini du coté pratique. Merci ;D

    Cordialement.

    Tituya

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Tituya Voir le message
    Mais seulement, comment faisons nous pour, lors d'un nouveau clique revenir a la couleur d'origine (blanc) ?
    En compliquant quelque peu la fonction qui est appelée lorsqu'on clique le Button en lui faisant, par exemple, récupérer la couleur actuelle pour sélectionner la couleur suivante.

    Citation Envoyé par Tituya Voir le message
    Comment puis-je baisser la taille de mes carrés pour permettre l'affichage complet ? (127x63)
    Peut être qu'il serait plus simple d'utiliser un Canvas, d'afficher des .rectangle et d'apprendre à jouer avec les "tags" pour les faire réagir comme des Buttons?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    pense tu que je puisse utiliser une image ? du style je créer mon image de pixel puis je l'incruste dans un canvas. Mais apres, je ne sais pas si c'est possible de faire la suite (colorer les blocks touchés en noir, puis récuperer leurs positions pour generer le fichier texte.)
    Répond moi si tu penses que c'est réalisable.

    Merci.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Tituya Voir le message
    pense tu que je puisse utiliser une image ? du style je créer mon image de pixel puis je l'incruste dans un canvas.
    Le Canvas permet d'afficher des images (et les Button aussi).
    Pour le reste, le widget Canvas est assez versatile et un peu compliqué à prendre en main (vu le nombre de choses qu'on peut faire avec)... mais il vous faut prendre le temps de lire la documentation et d'écrire quelques script de test pour comprendre comment il fonctionne....

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Salut !
    J'ai trouvé sur internet un script me plaisant pas mal en permettant d'ajouter une scrollbar a une grid. Ce qui est parfait pour ma situation.
    J'ai réussi à le changer pour le rendre valable pour moi.

    Seulement, me servir dans les scripts des personnes ne me plait pas trop (pour l’étique) Donc je souhaite essayer de le faire dans mon propre script.
    Malheureusement, je ne comprend absolument pas le script que j'ai pris
    Je me demande alors si tu pouvais m'expliquer comment pourrais-je ajouter des scrollbar (horizontal et verticale).

    Voila le script (volé) https://stackoverflow.com/questions/...lbar-with-grid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    import tkinter as tk
     
    LABEL_BG = "#ccc"  # Light gray.
    ROWS, COLS = 63, 127  # Size of grid.
    ROWS_DISP = 20  # Number of rows to display.
    COLS_DISP = 20  # Number of columns to display.
     
    class MyApp(tk.Tk):
        def __init__(self, title="Sample App", *args, **kwargs):
            tk.Tk.__init__(self, *args, **kwargs)
     
            self.title(title)
            self.configure(background="Gray")
            self.columnconfigure(0, weight=1)
            self.rowconfigure(0, weight=1)
     
            master_frame = tk.Frame(self, bg="Light Blue", bd=3, relief=tk.RIDGE)
            master_frame.grid(sticky=tk.NSEW)
            master_frame.columnconfigure(0, weight=1)
     
            label1 = tk.Label(master_frame, text="Frame1 Contents", bg=LABEL_BG)
            label1.grid(row=0, column=0, pady=5, sticky=tk.NW)
     
            frame1 = tk.Frame(master_frame, bg="Green", bd=2, relief=tk.GROOVE)
            frame1.grid(row=1, column=0, sticky=tk.NW)
     
            cb_var1 = tk.IntVar()
            checkbutton1 = tk.Checkbutton(frame1, text="StartCheckBox", variable=cb_var1)
            checkbutton1.grid(row=0, column=0, padx=2)
     
            label2 = tk.Label(master_frame, text="Frame2 Contents", bg=LABEL_BG)
            label2.grid(row=2, column=0, pady=5, sticky=tk.NW)
     
            # Create a frame for the canvas and scrollbar(s).
            frame2 = tk.Frame(master_frame)
            frame2.grid(row=3, column=0, sticky=tk.NW)
     
            # Add a canvas in that frame.
            canvas = tk.Canvas(frame2, bg="Yellow")
            canvas.grid(row=0, column=0)
     
            # Create a vertical scrollbar linked to the canvas.
            vsbar = tk.Scrollbar(frame2, orient=tk.VERTICAL, command=canvas.yview)
            vsbar.grid(row=0, column=1, sticky=tk.NS)
            canvas.configure(yscrollcommand=vsbar.set)
     
            # Create a horizontal scrollbar linked to the canvas.
            hsbar = tk.Scrollbar(frame2, orient=tk.HORIZONTAL, command=canvas.xview)
            hsbar.grid(row=1, column=0, sticky=tk.EW)
            canvas.configure(xscrollcommand=hsbar.set)
     
            # Create a frame on the canvas to contain the buttons.
            buttons_frame = tk.Frame(canvas, bg="Red", bd=2)
     
            # Add the buttons to the frame.
            for i in range(1, ROWS+1):
                for j in range(1, COLS+1):
                    button = tk.Button(buttons_frame, borderwidth=1, background='white', width=2, height=1)
                    button['command'] = lambda button=button: button.configure(background = 'black')
                    button.grid(row=i, column=j)                
     
            # Create canvas window to hold the buttons_frame.
            canvas.create_window((0,0), window=buttons_frame, anchor=tk.NW)
     
            buttons_frame.update_idletasks()  # Needed to make bbox info available.
            bbox = canvas.bbox(tk.ALL)  # Get bounding box of canvas with Buttons.
            #print('canvas.bbox(tk.ALL): {}'.format(bbox))
     
            # Define the scrollable region as entire canvas with only the desired
            # number of rows and columns displayed.
            w, h = bbox[2]-bbox[1], bbox[3]-bbox[1]
            dw, dh = int((w/COLS) * COLS_DISP), int((h/ROWS) * ROWS_DISP)
            canvas.configure(scrollregion=bbox, width=dw, height=dh)
     
            label3 = tk.Label(master_frame, text="Frame3 Contents", bg=LABEL_BG)
            label3.grid(row=4, column=0, pady=5, sticky=tk.NW)
     
            frame3 = tk.Frame(master_frame, bg="Blue", bd=2, relief=tk.GROOVE)
            frame3.grid(row=5, column=0, sticky=tk.NW)
     
            cb_var2 = tk.IntVar()
            checkbutton2 = tk.Checkbutton(frame3, text="EndCheckBox", variable=cb_var2)
            checkbutton2.grid(row=0, column=0, padx=2)
     
     
    if __name__ == "__main__":
        app = MyApp("Scrollable Canvas")
        app.mainloop()
    Et voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    # coding: utf-8
    from tkinter import *
    import tkinter as tk
    from tkinter.messagebox import *
     
    main = Tk()
    main.geometry("500x400+500+250")
    main.title('1er version')
    main['bg'] = 'white'
    nomfichier = 'CasioMaker.txt'
     
    #A propos de l'affichage
    taille_x = 10
    taille_y = 10
     
    def a():
        #Ecriture dans le fichier
        fichier = open(nomfichier, 'w')
        fichier.write('\'Made by Tituya\n')
        fichier.write('Cls\n')
        fichier.write('ViewWindow 1,127,1,1,63,1\n')
        fichier.write('AxesOff\n')
        fichier.close()
     
    def c():
        for ligne1 in range(taille_y):
            for colonne1 in range(taille_x):
                button = tk.Button(main, borderwidth=1, background='white', width=2, height=1)
                button['command'] = lambda button=button: button.configure(background = 'black')
                button.grid(row=ligne1, column=colonne1)
     
    def b():
        if askyesno('Titre 1', 'Etes vous sur ? Toutes progression sera éffacée'):
            main.quit()
        else:
            pass
     
     
     
     
    for ligne in range(taille_y):
        for colonne in range(taille_x):
            button = tk.Button(main, borderwidth=1, background='white', width=2, height=1)
            button['command'] = lambda button=button: button.configure(background = 'black')
            button.grid(row=ligne, column=colonne)
     
     
    menu = Menu(main)
    sousmenu = Menu(menu, tearoff=0)
    menu.add_cascade(label="Menu", menu=sousmenu)
    sousmenu.add_command(label="Creer le fichier texte", command=a)
    sousmenu.add_command(label="Quitter", command=b)
    menu.add_command(label="Effacer", command=c)
    main.config(menu = menu)
     
     
    main.mainloop()
    Cordialement.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Tituya Voir le message
    Donc je souhaite essayer de le faire dans mon propre script.
    Malheureusement, je ne comprend absolument pas le script que j'ai pris
    Je me demande alors si tu pouvais m'expliquer comment pourrais-je ajouter des scrollbar (horizontal et verticale).
    Pour comprendre, il faut déjà essayer d'apprendre....
    Concernant tkinter, vous avez le site des développeurs qui explique la plupart des techniques à appliquer sur tkinter. Pour les scrollbar, c'est ici.
    Suivant votre niveau, vous n'allez pas tout comprendre du premier coup...
    Mais, au moins, vous allez pouvoir essayer d'écrire un code en fonction de ce que vous aurez compris et ouvrir une nouvelle discussion si çà ne fonctionne pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. PLusieurs questions à propos du proxy
    Par boubz013 dans le forum Réseau
    Réponses: 3
    Dernier message: 10/10/2010, 20h38
  2. Plusieurs question a propos d'Ant
    Par toshy dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 11/08/2010, 18h13
  3. Réponses: 3
    Dernier message: 10/04/2010, 15h57
  4. Plusieurs questions a propos du controle menu
    Par jacko842 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 28/12/2009, 20h32
  5. [WD9] Plusieurs questions à propos des états
    Par jo_la_pasteque dans le forum WinDev
    Réponses: 6
    Dernier message: 11/04/2008, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo