Voir le flux RSS

autran

[Actualité] Créer un tableau interactif en python avec Tkinter

Note : 2 votes pour une moyenne de 5,00.
par , 27/03/2017 à 00h10 (2534 Affichages)
Beaucoup de développeurs Python se plaignent qu'il n'y ai pas de tableaux en Tkinter.
Il faut reconnaître que Python est un beau produit très léger qui permet nativement de développer des IHM pour Windows comme UNIX. Ce qui est bien pratique pour développer sur des nano PC comme raspberry. Alors je propose cette classe qui sera adaptable sur le principe comme un composant enfichable sur une IHM Tk.
Je l'utilise couramment pour charger les tableaux que j'ai chargés depuis Excel ou XML, car Python le gère très bien également et quasiment nativement.
Code python : 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
class IHM(Frame):
    def __init__(self, fenetre, height, width):
        Frame.__init__(self, fenetre)
        self.numberLines = height
        self.numberColumns = width
        self.pack(fill=BOTH)
        self.data = list()
        for i in range(self.numberLines):
            line = list()
            for j in range(self.numberColumns):
                cell = Entry(self)
                cell.insert(0, 0)
                line.append(cell)
                cell.grid(row = i, column = j)
            self.data.append(line)
 
        self.results = list()
        for i in range(self.numberColumns):
            cell = Entry(self)
            cell.insert(0, 0)
            cell.grid(row = self.numberLines, column = i)
            self.results.append(cell)
        self.buttonSum =  Button(self, text="somme des colonnes", fg="red", command=self.sumCol)
        self.buttonSum.grid(row = self.numberLines, column = self.numberColumns)
 
    def sumCol(self):
        for j in range(self.numberColumns):
            result = int(0)
            for i in range(self.numberLines):
                result += int(self.data[i][j].get())
            self.results[j].delete(0, END)
            self.results[j].insert(0, result)
Cette classe permet de créer un tableau dynamique de dimensions variables. J'expose également une méthode pour obtenir en pied de colonne les sommes. Cet objet est hérité de la classe Frame bien connue des développeurs Tkinter. Elle prend en paramètre de construction la fenêtre dans laquelle elle viendra s’insérer ainsi que les dimensions du tableau de données.
Donc dans le main on la lancerait de la façon suivante :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
fenetre = Tk()
interface = IHM(fenetre, 6, 5)
interface.mainloop()

Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog Viadeo Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog Twitter Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog Google Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog Facebook Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog Digg Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog Delicious Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog MySpace Envoyer le billet « Créer un tableau interactif en python avec Tkinter » dans le blog Yahoo

Mis à jour 02/04/2017 à 06h09 par Malick (orthographe)

Tags: python 3, tkinter
Catégories
Programmation

Commentaires

  1. Avatar de Nanah Payet
    • |
    • permalink
    Bonjour,

    J'ai développer sur Python un programme avec tableau et j'arive a appeler un tableau ecxel et l'ouvrire mais pour la fonction PDF j'arrive à crée le PDF mais il ne s'ouvre pas automatiquement ??

    vous pouvez m'aider ??

    Cordialement

    Nanah
    Mis à jour 24/10/2017 à 12h59 par Nanah Payet
  2. Avatar de autran
    • |
    • permalink
    Bonjour nanah,

    Si tu as des questions, tu devras les poser sur le forum.
    En effet cela permet d'une part d'exposer ta problématique à toute la communauté des experts Python qui forcément pourront te répondre, et d'autre part cela permet aux débutants qui auraient le même problème que toi de connaître la réponse.

    Bonne journée
  3. Avatar de Nanah Payet
    • |
    • permalink
    Merci
  4. Avatar de dedalios
    • |
    • permalink
    Ne manque t'il pas plusieurs chose dans ce code

    Peut être un import tkinter
    Mis à jour 04/01/2018 à 19h18 par autran
  5. Avatar de autran
    • |
    • permalink
    oui il manque l'import :
    merci
  6. Avatar de dedalios
    • |
    • permalink
    Bonjour

    existe t'il un outil graphique un RAD permettant de générer des interfaces tkinter en python 3 utilisable depuis windows.
    le produit Gui Builder (Tkinter) n'est plus maintenu. il n'est de plus pas ou pe compatible avec python 3 .
  7. Avatar de autran
    • |
    • permalink
    Citation Envoyé par dedalios
    Bonjour

    existe t'il un outil graphique un RAD permettant de générer des interfaces tkinter en python 3 utilisable depuis windows.
    le produit Gui Builder (Tkinter) n'est plus maintenu. il n'est de plus pas ou pe compatible avec python 3 .
    Non à ma connaissance il n'y a pas d'outil graphique pour générer des interfaces Tkinter en python 3. Je pense que cela vient du besoin qui est assez pauvre.
    En effet on utilise peu python pour faire des IHM client lourd mais plutôt pour des calculs ou des bots.

    En revanche on utilise python pour faire des IHM web (Django). C'est d'ailleurs une généralisation, les clients lourds disparaissent au profit des IHM web. d'autres langages comme Java suivent cette tendance avec la disparition de swing au profit du HTML (JEE) comme langage d'IHM.

    Mais je comprends ta frustration si tu souhaites réaliser des produits monolithiques en Python pur.
  8. Avatar de SAINTMAX
    • |
    • permalink
    Bonjour,

    Je suis retraité et la programmation est pour moi un passe temps.
    Je suis débutant mais j'ai développé à un niveau très modeste sous VBA, C# et je m'initie à Python 3.

    J'ai développé sous C# un programme de résolution de Sudoku qui fonctionne très bien et pour apprendre Python j'ai transposé celui-ci sous Python .
    Celui ci fonctionne correctement mais je me heurte à la partie graphique avec tkinter.
    C'est pour cela que votre tableau interactif m'intéresse beaucoup.


    Ma question est la suivante :
    Comment réduire la largeur de chaque colonne pour atteindre par exemple des carrés au lieu de rectangles très allongés.
    Je ne domine vraiment pas toute la syntaxe de python et de tkinter.

    Merci par avance.
  9. Avatar de autran
    • |
    • permalink
    Citation Envoyé par SAINTMAX
    Bonjour,

    Je suis retraité et la programmation est pour moi un passe temps.
    Je suis débutant mais j'ai développé à un niveau très modeste sous VBA, C# et je m'initie à Python 3.

    J'ai développé sous C# un programme de résolution de Sudoku qui fonctionne très bien et pour apprendre Python j'ai transposé celui-ci sous Python .
    Celui ci fonctionne correctement mais je me heurte à la partie graphique avec tkinter.
    C'est pour cela que votre tableau interactif m'intéresse beaucoup.


    Ma question est la suivante :
    Comment réduire la largeur de chaque colonne pour atteindre par exemple des carrés au lieu de rectangles très allongés.
    Je ne domine vraiment pas toute la syntaxe de python et de tkinter.

    Merci par avance.
    Bonjour,

    Désolé de répondre en retard mais je suis un peu occupé en cette fin d'année.
    J'ai utilisé un constructeur de cellule en ne lui passant qu'un paramètre, mais tu peux invoquer le constructeur en lui donnant un deuxième paramètre (width).
    Je pense que cela devrait résoudre ton problème.
    ++