Hello!
Je me suis lancé, "pour le fun", dans la découverte de Python.... et sur à peine 10 lignes de code, je me casse les dents sur 2 problèmes...: je veux me créer un (tout petit) référentiel de quelques pays, stockés dans une table sql (à partir d'un fichier csv), et afficher le contenu dans tkinter.
Mes problèmes:
1) le fetch me retourne bien un tuple par "row" de la table, constitué de 2 strings (code + libellé : voir "print" des valeurs ci-dessous), mais quand j'affiche les tuples dans tkinter, dans le cas d'un pays constitué de plusieurs mots (=Afrique du sud), il semble afficher le libellé comme un dictionnaire (= {Afrique du Sud} ) ? J'aimerais comprendre cette "conversion"?
A noter que cela se passe bien si j'affiche la concaténation des éléments individuels (= ligne en commentaire).
voici le résultat dans tkinter:
2) bien que je crois demander un affichage "à gauche", il affiche le tout en "centré" ?
voici le code de l'affichage:
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 # -*- coding:Utf8 -*- # ####################################################################### # # lecture de la table des pays # # ####################################################################### import datetime import sqlite3 import tkinter as tk connect = sqlite3.connect("cave_a_vin_01.db") # création du connecteur à la BDD curs_pays = connect.cursor() # création du curseur pays curs_pays.execute("SELECT pays_code, pays_lib FROM pays ORDER BY pays_lib LIMIT 5") resultats = curs_pays.fetchall() connect.close() root = tk.Tk() frame = tk.Frame(root, bg="white") frame.place(relwidth=0.96, relheight=0.96, relx=0.02, rely=0.02) i=1 for resultat in resultats: ligne = resultat # ligne = resultat[0] + " " + resultat[1] label = tk.Label(frame,text=ligne, bg="white", justify="left") label.pack() print(" ") print("resultat :", i, " : ",resultat, " -- ", type(resultat)) print("0 : ",resultat[0], " -- ", type(resultat[0])) print("1 : ",resultat[1], " -- ", type(resultat[1])) print("-----------------------------------------------") print(" ") i=i+1 root.mainloop()
L'output des "print" dans le shell, où tout semble être ok:Merci pour votre aide!!
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 resultat : 1 : ('ZA', 'Afrique du Sud') -- <class 'tuple'> 0 : ZA -- <class 'str'> 1 : Afrique du Sud -- <class 'str'> ----------------------------------------------- resultat : 2 : ('DE', 'Allemagne') -- <class 'tuple'> 0 : DE -- <class 'str'> 1 : Allemagne -- <class 'str'> ----------------------------------------------- resultat : 3 : ('AR', 'Argentine') -- <class 'tuple'> 0 : AR -- <class 'str'> 1 : Argentine -- <class 'str'> ----------------------------------------------- resultat : 4 : ('AU', 'Australie') -- <class 'tuple'> 0 : AU -- <class 'str'> 1 : Australie -- <class 'str'> ----------------------------------------------- resultat : 5 : ('AT', 'Autriche') -- <class 'tuple'> 0 : AT -- <class 'str'> 1 : Autriche -- <class 'str'> -----------------------------------------------
si besoin: la création de la table:et le contenu du fichier csv:
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 # -*- coding:Utf8 -*- # ####################################################################### # # init_create_sql_pays01.py # Création de la table des pays à partir d'un fichier CSV # # ####################################################################### # ########## Import External Functions ######################################################## import os import csv import datetime import sqlite3 # ########## Define Local Functions ########################################################### # ---------- Fonctions ------------------------------------------------------------------------- def create_table_pays(): curs_pays.executescript(""" DROP TABLE IF EXISTS pays; CREATE TABLE IF NOT EXISTS pays ( pays_code TEXT NOT NULL, pays_lib TEXT NOT NULL, pays_carte TEXT NULL, PRIMARY KEY ([pays_code])) """) def fill_table_pays(): # lire enregistrements CSV et les rentrer dans la table SQL key=0 os.chdir("/home/papy7584/Programmation/Prog/CAVSimple/Data/20200828") # workdirectory: contient les données sql = """ INSERT INTO pays(pays_code, pays_lib, pays_carte) VALUES(?,?,?) """ with open("pays.csv") as pays_csvfile: pays_csv = csv.reader(pays_csvfile, delimiter=',') for enr_pays in pays_csv: if enr_pays[0] != "pays_code": # skip titres print(enr_pays[0], " - ", enr_pays) print(enr_pays[0]," ",type(enr_pays[0]),len(enr_pays[0])) print(enr_pays[1]," ",type(enr_pays[1]),len(enr_pays[1])) print(enr_pays[2]," ",type(enr_pays[2]),len(enr_pays[2])) l = ( enr_pays[0], enr_pays[1], enr_pays[2]) curs_pays.execute(sql, l) connect.commit() # ########## Main ############################################################################# connect = sqlite3.connect("cave_a_vin_01.db") # création du connecteur à la BDD curs_pays = connect.cursor() # création du curseur pays create_table_pays() fill_table_pays() connect.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 cat pays.csv "pays_code","pays_lib","pays_carte" "ZA","Afrique du Sud", "DE","Allemagne", "AR","Argentine", "AU","Australie", "AT","Autriche", "CL","Chili", "ES","Espagne", "FR","France", "GR","Grèce", "IT","Italie", "LU","Luxembourg", "NZ","Nouvelle-Zélande", "PT","Portugal",
Partager