j'ai besoin d'aide

sqlite3.ProgrammingError: Incorrect number of bindings supplied

Amaury a marqué ce sujet comme résolu.

bonjour, message d’erreur :

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "d:\Desktop\projet python\jbdev.py", line 31, in ajouter
    cuser.execute ("INSERT INTO patient (code, nom, prenom, age, adresse, telephone, remarque) VALUES (?, ?, ?, ?, ?, ?, ?);")
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 7, and there are 0 supplied.

scipte :

# recreon la connexion
    con = sqlite3.connect("hopital.db")
    cuser = con.cursor()
    # cuser.execute("INSERT INTO patient(:code, :nom, :prenom, :age, :adresse, :telephone, :remarque) VALUES (?, ?, ?, ?, ?, ?, ?")
    cuser.execute ("INSERT INTO patient (code, nom, prenom, age, adresse, telephone, remarque) VALUES (?, ?, ?, ?, ?, ?, ?);")
    con.commit()
    con.close()

    messagebox.showinfo("Patient ajouter")
    

mon besoin : trouver le problème windows 10 pro sqlite3 python 3.10.2

cordialement jackymichaud3

+0 -0

Salut,

l’erreur "Incorrect number of bindings supplied" veut dire que tu as d’un côté mis un certain nombre d’emplacements pour les paramètres (ici tu en as mis 7), mais que tu n’as pas donné assez de parramètres (ici tu n’en as pas donné).

il faut qu’en paramètre de la fonction execute tu passes un tuple ou une liste qui contient 7 valeurs à insérer.

Bonjour,

Ce que veux dire @jackymichaud3 c’est que la fonction curser.execute attends 7 valeurs en parametres dans une liste, pour créer le code SQL (remplacer les ?)

Par exemple si on reprends les nom des champs de la table patient ca donne :

cuser.execute ("INSERT INTO patient (code, nom, prenom, age, adresse, telephone, remarque) VALUES (?, ?, ?, ?, ?, ?, ?);", [code, nom, prenom, age, adresse, telephone, remarque])

Mais pour ca il faut au préalable que les variables code, nom, prenom, age, adresse, telephone, remarque existent, ce que l’on ne voit pas dans ton code. Ton cursor va ensuite remplacer les ? du SQL par les valeurs de la liste.

Si tu as déja essayé ca , est que ta table patient à déjà toutes les colonnes code, nom, prenom, age, adresse, telephone, remarque ?

bonjour, ça ne marche pas je fournie script entier que j’ai trouver:

coding:utf-8

import les tkinter

from logging import root from tkinter import END, RIDGE, Button, Label, messagebox from distutils.util import execute from msilib.schema import tables from multiprocessing import Value from tkinter import ttk from tkinter import * from tkinter import messagebox import os import sqlite3 from distutils.util import execute

def ajouter(): matricule = entrermatricule.get() nom = entrernom.get() prenom = entrerprenom.get() age = entrerage.get() adresse = entreradresse.get() telephone = entrertelephone.get() remarque = entrerremarque.get()

# recreon la connexion
con = sqlite3.connect("hopital.db")
cuser = con.cursor()
# cuser.execute("INSERT INTO patient(:code, :nom, :prenom, :age, :adresse, :telephone, :remarque) VALUES (?, ?, ?, ?, ?, ?, ?")
cuser.execute ("INSERT INTO patient (code, nom, prenom, age, adresse, telephone, remarque) VALUES (?, ?, ?, ?, ?, ?, ?);")
con.commit()
con.close()

messagebox.showinfo("Patient ajouter")

# afficher
con = sqlite3.connect('hopital.db')
cuser = con.cursor()
select = cuser.execute("SELECT * FROM patient ORDER BY code DESC")
select = list(select)
table.insert('', END, Value = select[0])
con.close()

def modifier(): matricule = entrermatricule.get() nom = entrernom.get() prenom = entrerprenom.get() age = entrerage.get() adresse = entreradresse.get() telephone = entrertelephone.get() remarque = entrerremarque.get()

# creon la connexion
con = sqlite3.connect('hopital.db')
cuser = con.cursor()
cuser.execute(
    "update patient set  code = ?, nom = ?, prenom = ?, age = ?, telephone = ?, remarque = ?, where code = ?", 
    (nom, prenom, age, adresse, telephone, remarque, matricule))
    
con.commit()
con.close()

messagebox.showinfo("Patient Modifier")


# afficher
con = sqlite3.connect('hopital.db')
cuser = con.cursor()
select = cuser.execute("SELECT * FROM patient ORDRE BY code DESC")
select = list(select)
table.insert('', END, values = select[0])
con.close()

supprimer

def supprimer(): codeSelectionner = table.item(table.selection())['values’][1] con = sqlite3.connect("hopital.db") cuser = con.cursor() delete = cuser.execute("delete FROM patient WHERE code = {}", format(codeSelectionner)) con.commit() table.delete(table.selection())

titre general

root = Tk() root.title("Gestion des patients ") root.geometry("1365x800")

Ajouter le titre

lbltitre = Label(root, bd = 20, relief = RIDGE, text = "GESTION DES PATIENTS CHEZ JACKYHOPITAL22", font = ("Arial",30),bg = "darkblue", fg = "white") lbltitre.place(x = 0, y = 0, width = 1365)

recherche nom

lblRecherheParNom = Label(root, text = "LISTE ES PATIENTS", font = ("Arial", 16), bg = "darkblue", fg = "white") lblRecherheParNom.place(x = 600, y = 100, width = 760)

liste des patients

lblListePatient = Label(root, text = "LISTE ES PATIENTS", font = ("Arial", 16), bg = "darkblue", fg = "white") lblListePatient.place(x = 600, y = 100, width = 760)

Text matricule

lblmatricule = Label(root, text = "Matricule Patient",font = ("Arial", 16), bg = "black", fg = "white") lblmatricule.place(x = 0, y = 100, width = 200) entrermatricule = Entry(root) entrermatricule.place(x = 200, y = 100, width = 160, height = 30)

Text prenom

lblnom = Label(root, text = "Nom Patient",font = ("Arial", 16), bg = "black", fg = "white") lblnom.place(x = 0, y = 150, width = 200) entrernom = Entry(root) entrernom.place(x = 200, y = 150, width = 200, height = 30)

Text prenom

lblprenom = Label(root, text = "Prenom Patient",font = ("Arial", 16), bg = "black", fg = "white") lblprenom.place(x = 0, y = 200, width = 200) entrerprenom = Entry(root) entrerprenom.place(x = 200, y = 200, width = 200, height = 30)

Text age

lblage = Label(root, text = "Age Patient",font = ("Arial", 16), bg = "black", fg = "white") lblage.place(x = 0, y = 250, width = 200) entrerage = Entry(root) entrerage.place(x = 200, y = 250, width = 100, height = 30)

Text adresse

lbladresse = Label(root, text = "Adresse Patient",font = ("Arial", 16), bg = "black", fg = "white") lbladresse.place(x = 0, y = 300, width = 200) entreradresse = Entry(root) entreradresse.place(x = 200, y = 300, width = 300, height = 30)

Text telephone

lbltelephone = Label(root, text = "Telephone Patient",font = ("Arial", 16), bg = "black", fg = "white") lbltelephone.place(x = 0, y = 350, width = 200) entrertelephone = Entry(root) entrertelephone.place(x = 200, y = 350, width = 200, height = 30)

Text remarque

lblremarque = Label(root, text = "Remarque Patient",font = ("Arial", 16), bg = "black", fg = "white") lblremarque.place(x = 0, y = 400, width = 200) entrerremarque = Entry(root) entrerremarque.place(x = 200, y = 400, width = 300, height = 30)

Enregistrer

btnenregistrer = Button(root, text = "Enregistrer", font = ("Arial", 16, ), bg = "darkblue", fg = "yellow", command = ajouter) btnenregistrer.place(x = 30, y = 450,width = 200)

Modifier

btnmodifier = Button(root, text = "Modifier", font = ("Arial", 16, ), bg = "darkblue", fg = "yellow", command = modifier) btnmodifier.place(x = 270, y = 450,width = 200)

Supprimer

btnSupprimer = Button(root, text = "Supprimer", font = ("Arial", 16, ), bg = "darkblue", fg = "yellow", command = supprimer) btnSupprimer.place(x = 150, y = 500,width = 200)

Table

table = ttk.Treeview(root, columns = (0, 1, 2, 3, 4, 5, 6, 7), height = 5, show = "headings") table.place(x = 530, y = 150, width = 800, height = 600)

Entete

table.heading(0 , text = "ID") table.heading(1 , text = "CODE") table.heading(2 , text = "NOM") table.heading(3 , text = "PRENOM") table.heading(4 , text = "AGE") table.heading(5 , text = "ADRESSE") table.heading(6 , text = "TELEPHONE") table.heading(7 , text = "REMARQUE")

definir les dimentions des colonnes

table.column(0, width = 20) table.column(1, width = 50) table.column(2, width = 100) table.column(3, width = 100) table.column(4, width = 50) table.column(5, width = 150) table.column(6, width = 100) table.column(7, width = 150)

afficher les informations de la table

con = sqlite3.connect(’hopital.db’) cuser = con.cursor() select = cuser.execute("SELECT * FROM patient") for row in select: table.insert(’', END, value = row) print(row)

con.close()

root.mainloop()


peut être que vous y verrez plus claire. je vous remercie pour l’aide cordialement jackymichaud3

bonjour, ça ne marche pas je fournie script entier que j’ai trouver:


# coding:utf-8



# import les tkinter
from logging import root
from tkinter import END, RIDGE, Button, Label, messagebox
from distutils.util import execute
from msilib.schema import tables
from multiprocessing import Value
from tkinter import ttk
from tkinter import *
from tkinter import messagebox
import os
import sqlite3
from distutils.util import execute

def ajouter():
    matricule = entrermatricule.get()
    nom = entrernom.get()
    prenom = entrerprenom.get()
    age = entrerage.get()
    adresse = entreradresse.get()
    telephone = entrertelephone.get()
    remarque = entrerremarque.get()

    # recreon la connexion
    con = sqlite3.connect("hopital.db")
    cuser = con.cursor()
    # cuser.execute("INSERT INTO patient(:code, :nom, :prenom, :age, :adresse, :telephone, :remarque) VALUES (?, ?, ?, ?, ?, ?, ?")
    cuser.execute ("INSERT INTO patient (code, nom, prenom, age, adresse, telephone, remarque) VALUES (?, ?, ?, ?, ?, ?, ?);")
    con.commit()
    con.close()

    messagebox.showinfo("Patient ajouter")
    
    # afficher
    con = sqlite3.connect('hopital.db')
    cuser = con.cursor()
    select = cuser.execute("SELECT * FROM patient ORDER BY code DESC")
    select = list(select)
    table.insert('', END, Value = select[0])
    con.close()


def modifier():
    matricule = entrermatricule.get()
    nom = entrernom.get()
    prenom = entrerprenom.get()
    age = entrerage.get()
    adresse = entreradresse.get()
    telephone = entrertelephone.get()
    remarque = entrerremarque.get()

    # creon la connexion
    con = sqlite3.connect('hopital.db')
    cuser = con.cursor()
    cuser.execute(
        "update patient set  code = ?, nom = ?, prenom = ?, age = ?, telephone = ?, remarque = ?, where code = ?", 
        (nom, prenom, age, adresse, telephone, remarque, matricule))
        
    con.commit()
    con.close()

    messagebox.showinfo("Patient Modifier")


    # afficher
    con = sqlite3.connect('hopital.db')
    cuser = con.cursor()
    select = cuser.execute("SELECT * FROM patient ORDRE BY code DESC")
    select = list(select)
    table.insert('', END, values = select[0])
    con.close()


# supprimer
def supprimer():
    codeSelectionner = table.item(table.selection())['values'][1]
    con = sqlite3.connect("hopital.db")
    cuser = con.cursor()
    delete = cuser.execute("delete FROM patient WHERE code = {}", format(codeSelectionner))
    con.commit()
    table.delete(table.selection())


# titre general
root = Tk()
root.title("Gestion des patients ")
root.geometry("1365x800")


# Ajouter le titre
lbltitre = Label(root, bd = 20, relief = RIDGE, text = "GESTION DES PATIENTS CHEZ JACKYHOPITAL22", font = ("Arial",30),bg = "darkblue", fg = "white")
lbltitre.place(x = 0, y = 0, width = 1365)

# recherche nom
lblRecherheParNom = Label(root, text = "LISTE ES PATIENTS", font = ("Arial", 16), bg = "darkblue", fg = "white")
lblRecherheParNom.place(x = 600, y = 100, width = 760)

# liste des patients
lblListePatient = Label(root, text = "LISTE ES PATIENTS", font = ("Arial", 16), bg = "darkblue", fg = "white")
lblListePatient.place(x = 600, y = 100, width = 760)

# Text matricule
lblmatricule = Label(root, text = "Matricule Patient",font = ("Arial", 16), bg = "black", fg = "white")
lblmatricule.place(x = 0, y = 100, width = 200)
entrermatricule = Entry(root)
entrermatricule.place(x = 200, y = 100, width = 160, height = 30)

# Text prenom
lblnom = Label(root, text = "Nom Patient",font = ("Arial", 16), bg = "black", fg = "white")
lblnom.place(x = 0, y = 150, width = 200)
entrernom = Entry(root)
entrernom.place(x = 200, y = 150, width = 200, height = 30)

# Text prenom
lblprenom = Label(root, text = "Prenom Patient",font = ("Arial", 16), bg = "black", fg = "white")
lblprenom.place(x = 0, y = 200, width = 200)
entrerprenom = Entry(root)
entrerprenom.place(x = 200, y = 200, width = 200, height = 30)

# Text age
lblage = Label(root, text = "Age Patient",font = ("Arial", 16), bg = "black", fg = "white")
lblage.place(x = 0, y = 250, width = 200)
entrerage = Entry(root)
entrerage.place(x = 200, y = 250, width = 100, height = 30)

# Text adresse
lbladresse = Label(root, text = "Adresse Patient",font = ("Arial", 16), bg = "black", fg = "white")
lbladresse.place(x = 0, y = 300, width = 200)
entreradresse = Entry(root)
entreradresse.place(x = 200, y = 300, width = 300, height = 30)

# Text telephone
lbltelephone = Label(root, text = "Telephone Patient",font = ("Arial", 16), bg = "black", fg = "white")
lbltelephone.place(x = 0, y = 350, width = 200)
entrertelephone = Entry(root)
entrertelephone.place(x = 200, y = 350, width = 200, height = 30)

# Text remarque
lblremarque = Label(root, text = "Remarque Patient",font = ("Arial", 16), bg = "black", fg = "white")
lblremarque.place(x = 0, y = 400, width = 200)
entrerremarque = Entry(root)
entrerremarque.place(x = 200, y = 400, width = 300, height = 30)

# Enregistrer
btnenregistrer = Button(root, text = "Enregistrer", font = ("Arial", 16, ), bg = "darkblue", fg = "yellow", command = ajouter)
btnenregistrer.place(x = 30, y = 450,width = 200)

# Modifier
btnmodifier = Button(root, text = "Modifier", font = ("Arial", 16, ), bg = "darkblue", fg = "yellow", command = modifier)
btnmodifier.place(x = 270, y = 450,width = 200)

# Supprimer
btnSupprimer = Button(root, text = "Supprimer", font = ("Arial", 16, ), bg = "darkblue", fg = "yellow", command = supprimer)
btnSupprimer.place(x = 150, y = 500,width = 200)
 

# Table
table = ttk.Treeview(root, columns = (0, 1, 2, 3, 4, 5, 6, 7), height = 5, show = "headings")
table.place(x = 530, y = 150, width = 800, height = 600)

 # Entete
table.heading(0 , text = "ID") 
table.heading(1 , text = "CODE")
table.heading(2 , text = "NOM")
table.heading(3 , text = "PRENOM")
table.heading(4 , text = "AGE")
table.heading(5 , text = "ADRESSE")
table.heading(6 , text = "TELEPHONE")
table.heading(7 , text = "REMARQUE")

 # definir les dimentions des colonnes
table.column(0, width = 20) 
table.column(1, width = 50)
table.column(2, width = 100)
table.column(3, width = 100)
table.column(4, width = 50)
table.column(5, width = 150)
table.column(6, width = 100)
table.column(7, width = 150)


 # afficher les informations de la table
con = sqlite3.connect('hopital.db')
cuser = con.cursor()
select = cuser.execute("SELECT * FROM patient")
for row in select:
     table.insert('', END, value = row)
     print(row)
     


con.close()

root.mainloop()

peut être que vous y verrez plus claire. je vous remercie pour l’aide cordialement jackymichaud3

+0 -0

peut être que vous y verrez plus claire. je vous remercie pour l’aide cordialement jackymichaud3

Il me semble que @artragis et @kayou ont déjà très bien saisi ton problème, au vu de leurs réponses respectives. Je ne pense qu’il soit ainsi utile de poster l’intégralité du code du programme.

bonjour, ça ne marche pas je fournie script entier que j’ai trouver: […]

Les interventions contiennent bien la réponse à ton problème (à savoir, il faut préciser dans la fonction execute ce à quoi correspond chaque ?), mais je ne suis pas sûr que tu aies compris.

As-tu essayé de modifier ton code en prenant en compte leurs remarques ? As-tu compris leurs remarques ou as-tu besoin de plus de précisions ?

Regarde la ligne 31 du programme que tu as posté :

cuser.execute ("INSERT INTO patient (code, nom, prenom, age, adresse, telephone, remarque) VALUES (?, ?, ?, ?, ?, ?, ?);")

Compare-la aux lignes 58–60 :

    cuser.execute(
        "update patient set  code = ?, nom = ?, prenom = ?, age = ?, telephone = ?, remarque = ?, where code = ?", 
        (nom, prenom, age, adresse, telephone, remarque, matricule))

Tu remarques que dans la seconde occurrence, tu as un argument supplémentaire, à savoir la séquence des valeurs que les ? doivent prendre. Tu dois faire quelque chose de similaire pour ton INSERT INTO ... (cf. la réponse de kayou).

Par ailleurs, si tu n’as pas les bases nécessaires en Python pour comprendre ce programme que tu as, semble-t-il, trouvé quelque part, alors je te recommande vivement de les acquérir pour être plus à l’aise dans sa modification. Autrement, tu risques de te heurter à ce genre de problème très fréquemment et notre aide sera moins efficace si nous ne pouvons pas partager un socle minimum de compréhension.

+1 -0

bonjour, je doit reconnaitre que les information fournis par artragis, kayou, et vous sgble ont portées leurs fruits, je vous en remercie. j’ai finis par résoudre les bugs. je début en python depuis deux mois, je ne voyer pas le cheval cacher derrière la mouche un peut de repos ma fait du bien après les multiples tentatives qui ont échoué mon rendu aveugle. cordialement a vous tous jackymichaud3

C’est super si tu as réussi à t’en sortir.

Afin d’aider les gens qui ont le même problème que toi à trouver l’information plus rapidement, tu peux éditer ton premier message pour inverser le titre et le sous-titre stp?

Tu peux aussi passer le fil en "résolu" pour marquer qu’une solution a été trouvée?

Bonjour,

impossible d’installer pour l’importer "win32api" sous python 3.10.2 par quoi le remplacer ? avez-vous une proposition ?

cordialement jackymichaud3

script : '’'# impression from tkinter import * import win32api from tkinter import filedialog import tkinter as tk

root = Tk()

root.title(’Imprimer des copies papier’) root.geometry("350x350")

def print_file():

file_to_print = filedialog.askopenfilename( 
  initialdir="/", title="Select file",  
  filetypes=(("Text files", "*.txt"), ("all files", "*.*"))) 
  
if file_to_print: 
    
    
    win32api.ShellExecute(0, "print", file_to_print, None, ".", 0) 

Button(root, text="Imprimer le fichier", command=print_file).pack()

button = tk.Button(text = "Click et Quitter", command = root.quit) button.pack(side=BOTTOM)

root.mainloop()’''

+0 -0

Salut, pense toujours à mettre les balises ```python et ``` autour de ton code pour le mettre en forme.

Si j’ai bien compris tu cherches à lancer une impression depuis un programme Python sous Windows ? Quelle erreur obtiens-tu quand tu essaies d’installer win32 ?

Sinon peut-être pourrais-tu appeler os.startfile en donnant comme valeur 'print' à l’argument operation ? (je n’ai pas testé)

Une autre solution serait de t’orienter vers la génération d’un PDF depuis Python (avec WeasyPrint par exemple) puis d’utiliser la visionneuse de PDF de ton système pour lancer l’impression.

Bonjour,

message d’erreur : '’' Traceback (most recent call last): File "d:\Desktop\projet python\impression-1.py", line 3, in <module> import win32api ModuleNotFoundError: No module named 'win32api'


PS C:\Users\jacky> pip install win32api Defaulting to user installation because normal site-packages is not writeable ERROR: Could not find a version that satisfies the requirement win32api (from versions: none)

ERROR: No matching distribution found for win32api

PS C:\Users\jacky> pip install os.startfile Defaulting to user installation because normal site-packages is not writeable ERROR: Could not find a version that satisfies the requirement os.startfile (from versions: none) ERROR: No matching distribution found for os.startfile

'’'

script :

from tkinter import *
import win32api 
from tkinter import filedialog
import tkinter as tk 
  
root = Tk() 
  
root.title('Imprimer des copies papier') 
root.geometry("350x350") 
  
def print_file(): 
    
    
    file_to_print = filedialog.askopenfilename( 
      initialdir="/", title="Select file",  
      filetypes=(("Text files", "*.txt"), ("all files", "*.*"))) 
      
    if file_to_print: 
        
        
        win32api.ShellExecute(0, "print", file_to_print, None, ".", 0) 
  
Button(root, text="Imprimer le fichier", command=print_file).pack() 

button = tk.Button(text = "Click et Quitter", command = root.quit)
button.pack(side=BOTTOM)
  
root.mainloop() 

je vais essayer l’aide reçut. cordialement jackymichaud3

ça a l’air de fonctionné, des progrès j’ai la fenêtre de choix, mais n’imprime pas

from tkinter import *
import os as startfile
from tkinter import filedialog
import tkinter as tk 
  
root = Tk() 
  
root.title('Imprimer des copies papier') 
root.geometry("350x350") 
  
def print_file(): 
    
    
    file_to_print = filedialog.askopenfilename( 
      initialdir="/", title="Select file",  
      filetypes=(("Text files", "*.txt"), ("all files", "*.*"))) 
      
    if file_to_print: 
        
        
        startfile.ShellExecute(0, "print", file_to_print, None, ".", 0) 
  
Button(root, text="Imprimer le fichier", command=print_file).pack() 

button = tk.Button(text = "Click et Quitter", command = root.quit)
button.pack(side=BOTTOM)
  
root.mainloop() 

' = touche 4 ?

Exception in Tkinter callback Traceback (most recent call last): File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.752.0_x64qbz5n2kfra8p0\lib\tkinter__init.py", line 1921, in call return self.func(*args) File "d:\Desktop\projet python\impression-1.py", line 21, in print_file startfile.ShellExecute(0, "print", file_to_print, None, ".", 0) AttributeError: 'builtin_function_or_method' object has no attribute 'ShellExecute'

+0 -0

os.startfile est une fonction à part entière, qui s’appelle en précisant un fichier et une opérations à exécuter (ici print).

Ce n’est pas un paquet qui s’installe (pas de pip install os.startfile) et ce n’est pas un module avec une fonction ShellExecute. Voir la description de la fonction dans la doc citée au-dessus.

Pour ce qui est de la Win32 API, le nom du paquet à installer s’appelle pywin32 et non win32api, ce qui explique l’erreur obtenue.

bonjour, je viens essaye charger le paquet message d’erreur : PS C:\Users\jacky> pip install pywin32 Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: pywin32 in c:\users\jacky\appdata\roaming\python\python310\site-packages (303) PS C:\Users\jacky> comme je suis débutant on fais des erreurs (deux mois de leçon) merci quand même (python vers. 3.10.2) jackymichaud3

Il ne s’agit pas vraiment d’un message d’erreur : « Requirement already satisfied: pywin32 » soit « La dépendance pywin32 est déjà satisfaite », ce qui veut dire que le paquet a déjà été installé précédemment.

Bonjour,

# -*- coding : utf-8 -*-
# Python 3.10.2

from tkinter import *
from os import startfile
from tkinter import filedialog
import tkinter as tk 
  
root = Tk() 
  
root.title('Imprimer des copies papier') 
root.geometry("350x150") 
  
def print_file():
  file_to_print = filedialog.askopenfilename( 
  initialdir="/", title="Select file",  
  filetypes=(("Text files", "*.txt"), ("all files", "*.*"))) 
  

  if file_to_print:
    startfile.ShellExecute(0, "print", file_to_print, None, ".", 0) 
 
  
Button(root, text="Imprimer le fichier", command=print_file).pack() 

button = tk.Button(text = "Click et Quitter", command = root.quit)
button.pack(side=BOTTOM)
  
root.mainloop() ```
----------------------------------------------
ligne 21 :
``` startfile.ShellExecute(0, "print", file_to_print, None, ".", 0)```
-------------------
L'erreur est cette ligne le message dit :
----------------------
```PS C:\Users\jacky> & C:/Users/jacky/AppData/Local/Microsoft/WindowsApps/python3.10.exe "d:/Desktop/projet python/impression-1.py"
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.752.0_x64__qbz5n2kfra8p0\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "d:\Desktop\projet python\impression-1.py", line 21, in print_file
    startfile.ShellExecute(0, "print", file_to_print, None, ".", 0)
AttributeError: 'builtin_function_or_method' object has no attribute 'ShellExecute'```
--------------------------
je ne comprend rien (deux mois de pratique)
merci d'avance cordialement
jackymichaud3

En effet comme je le disais, startfile est une fonction en elle-même : startfile.ShellExecute n’existe pas, je ne sais pas où tu as trouvé ça. C’est d’ailleurs précisément ce que te dit le message d’erreur (« object has no attribute 'ShellExecute' »).

Où en es-tu dans ton apprentissage et quel cours suis-tu ? Qu’est-ce qui te bloque précisément, comprends-tu ce que sont des fonctions et des modules ?

Peut-être que tu essaies d’aller trop vite et que tu devrais t’exercer sur d’autres plus petits projets avant d’avoir le niveau pour celui-ci.

bonjour, je suis autodidacte je visionne des tutos, je ne sais pas les versions de python qu’ils utilises en plus ils vieux pour certain deux a huit ans. pour moi j’ai la version python 3.10.2 ou je trouve des incohérence que je corrige par moi même . cordialement jackymichaud3

Je peux alors te conseiller de suivre un cours avec un cheminement précis, ça pourra t’aider à mieux appréhender les notions et ne rien louper. Par exemple ce cours de Gérard Swinnen ou ce cours en version bêta sur le site.

Quelles incohérences as-tu trouvées dans Python que tu aurais corrigées ?

bonjour,

certain module ne s’installe pas ou on ne les trouves pas certaine syntaxe conseillées par rapport aux autres, il est vrais que le mots incohérence est un peu fort. je consulte le cours de Gérard Swinnen et le cours en version bêta sur le site. cordialement jackymichaud3

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte