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 :

champ saisie stringvar tkinter efface le zéro du champ


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 11
    Points
    11
    Par défaut champ saisie stringvar tkinter efface le zéro du champ
    Bonjour,

    J'ai du mal à comprendre pourquoi lorsque je ré ouvre la fenêtre avec un nombre débutant par un zéro dans un champ Entry Tkinter celui-ci disparaît alors qu'il s'affiche bien dans le treeview et bien sur dans la base de données sql server ?
    Merci d'avance pour vos réponses.


    Nom : 2.png
Affichages : 469
Taille : 45,6 Ko
    Nom : 3.png
Affichages : 497
Taille : 62,3 Ko
    Images attachées Images attachées  

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Un widget Entry n'enlève pas les 0 de gauche ni rien d'autres (à moins d'voir spécifié un validatecommand) , le problème vient d'ailleurs, et la seule chose qui me vient à l'esprit est que tu transformes peut-être quelque part ta chaine en entier ce qui ferait perdre les 0 de gauche.

    Sinon, bah, montre un exemple simple de code reproduisant le problème, parce que des sceenshots, ça n'aide pas beaucoup.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Merci d'avoir répondu, j'ai simplifié le code pour faire apparaitre seulement les éléments nécessaire dans la top level maj de tkinter


    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
    class Database:
                       
        
                def update(self, ID, MfrPartNumber,MonMFC, PartDescription,MonSymbole,MonDessin,MesOM,MaDesignationFonctionnelle,MonConstructeur,MaRefConstructeur,MonNomFournisseur
                       ,MaRefFournisseur,MonAutreFournisseur,MaRefAutreFournisseur,MonType,MonLCN,MonGCONF,MADESIGNATION_DE):
                self.cur.execute("UPDATE dbo.tblPartMain SET MfrPartNumber=?,MonMFC=?,PartDescription=?, MonSymbole=?, MonDessin=?, MesOM=?, MaDesignationFonctionnelle=?,MonConstructeur=?,"
                                 "MaRefConstructeur=?,MonNomFournisseur=?,MaRefFournisseur=?,MonAutreFournisseur=?,MaRefAutreFournisseur=?,MonType=?,MonLCN=?,MonGCONF=?,MADESIGNATION_DE=? WHERE ID = ?",
                                 (MfrPartNumber,MonMFC, PartDescription,MonSymbole,MonDessin,MesOM,MaDesignationFonctionnelle,MonConstructeur,MaRefConstructeur,
                                  MonNomFournisseur,MaRefFournisseur,MonAutreFournisseur,MaRefAutreFournisseur,MonType,MonLCN,MonGCONF,MADESIGNATION_DE,ID))
                self.conn.commit()
    
          
            def __del__(self):
                self.conn.close()

    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
    def view_command():
    
        global row
        prechargement()
    
        tree.delete(*tree.get_children())
        
    
    
        for row in database.view():
    
    
            tree.insert("", END, values=(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8],
                                             row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
                                             row[17], row[18], row[19]))
            
        preload.destroy()






    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
    ###############################  UPDATE LISTE DE PIECES#################################################################
    def OnSelected(event):
        global ID, UpdateWindow
        curItem = tree.focus()
        contents =(tree.item(curItem))
        selecteditem = contents["values"]
        ID = selecteditem[0]
        MFRPARTNUMBER.set("")
        MFRPARTNUMBER.set(selecteditem[1])
       
    
    
        UpdateWindow = Toplevel()
        UpdateWindow.title("MAJ Liste de Pièces")
        width = 400
        height = 600
        screen_width = fen_princ.winfo_screenwidth()
        screen_height = fen_princ.winfo_screenheight()
        x = ((screen_width / 2) - 455) - (width / 2)
        y = ((screen_height / 2) + 20) - (height / 2)
        UpdateWindow.resizable(0, 0)
        UpdateWindow.geometry("%dx%d+%d+%d" % (width, height, x, y))
        UpdateWindow.iconbitmap("image.ico")
        UpdateWindow.grab_set()  # eviter de pouvoir ouvrir plusieurs fois la même fenetre
        UpdateWindow.focus_set()  # donne le focus sur la fenêtre
    c'est donc le champ en rouge qui perd le zéro du début !

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par dockys Voir le message
    c'est donc le champ en rouge qui perd le zéro du début !
    La commande magique "print" vous permettrait d'afficher ce qu'est selecteditem[1] via "print (type(selecteditem[1]), selecteditem[1])". Si c'est un nombre, vous avez déjà la réponse.

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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Salut,


    en effet : <class 'int'> 7320362
    si je rajoute ' j'obtiens une chaine
    <class 'str'> '07320362

    mais alors comment faire en sorte que : 07320362 soit considérer comme une chaine sans devoir rajouter un caractère exemple ' et afficher 07320362 au lieu 7320362 ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par dockys Voir le message
    mais alors comment faire en sorte que : 07320362 soit considérer comme une chaine sans devoir rajouter un caractère exemple ' et afficher 07320362 au lieu 7320362 ?
    Ca va être compliqué car si vous affichez values=(..., '01234',....), lorsque vous récupérez ce "values", il devient values=(..., 1234,....) et la chaîne de caractères s'est transformée en "int".
    Personnellement, je ne fais jamais comme çà.
    Vous récupérez le contenu d'un record dans un widget pour le balancer dans un autre widget. En fait, il est préférable d'avoir le record d'un côté (avec ses types natifs) et associer (un dictionnaire) un identifiant entre l'item de la treeview et le record. On affiche les boûts qu'on veut et lors d'une sélection, on récupère l'identifiant de l'item, puis le record associé (via le dictionnaire) et on repart avec une copie intègre des données.

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

  7. #7
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Ah oui quand même

    J'ai jamais utilisé de treeview, mais c'est quand même étrange cette conversion faite à l'insu de l'utilisateur, d'autant que le treeview peut gérer string et int indifféremment, faut admettre que c'est un peu vicelard de ne pas respecter le type des données qui ont été enregistrées.
    Le temps ronge l'amour comme l'acide.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par bistouille Voir le message
    J'ai jamais utilisé de treeview, mais c'est quand même étrange cette conversion faite à l'insu de l'utilisateur, d'autant que le treeview peut gérer string et int indifféremment, faut admettre que c'est un peu vicelard de ne pas respecter le type des données qui ont été enregistrées.
    C'est pas un problème Tk mais un soucis côté tkinter. Il récupère un tuple dans lequel il n'y a que des strings mais croit bien faire en convertissant une chaine de caractère ne contenant que des nombres en entiers.
    Il faudrait écrire qqc. comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              contents = tree.tk.call(tree, 'item', curItem' '-values')
    pour bypasser tkinter.

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

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contents = tree.tk.call(tree, 'item', curItem' '-values')
    dans ce cas la il va me dire :
    TypeError: tuple indices must be integers or slices, not str

    ou il y a une erreur dans le code ?
    la j'avoue j'ai du mal a comprendre pourriez vous être plus explicite ? merci d'avance

  10. #10
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est pas un problème Tk mais un soucis côté tkinter. Il récupère un tuple dans lequel il n'y a que des strings mais croit bien faire en convertissant une chaine de caractère ne contenant que des nombres en entiers.
    Il faudrait écrire qqc. comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              contents = tree.tk.call(tree, 'item', curItem' '-values')
    pour bypasser tkinter.

    - W
    C'est bon à savoir, merci de l'information.

    Citation Envoyé par dockys Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contents = tree.tk.call(tree, 'item', curItem' '-values')
    dans ce cas la il va me dire :
    TypeError: tuple indices must be integers or slices, not str

    ou il y a une erreur dans le code ?
    la j'avoue j'ai du mal a comprendre pourriez vous être plus explicite ? merci d'avance
    Tu aurais pu voir qu'il manquait une virgule dans la commande ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> from tkinter import ttk
    >>> tree = ttk.Treeview(columns=('valeur',))
    >>> tree.grid()
    >>> iid = tree.insert('', 0, values='01234')
    >>> tree.tk.call(tree, 'item', iid, '-values')
    ('01234',)
    >>>
    Le temps ronge l'amour comme l'acide.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    ah oui génial ca marche niquel j'ai la vue qui baisse grand merci à vous !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/02/2007, 18h27
  2. Réponses: 16
    Dernier message: 17/06/2005, 15h51
  3. verifier champ saisie
    Par grellierj dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/02/2005, 12h07
  4. Réponses: 3
    Dernier message: 04/08/2004, 15h09

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