当前位置:网站首页>Système de bibliothèque libre - service - cas de conception complète de l'interface tkinter et du formulaire openpyxl
Système de bibliothèque libre - service - cas de conception complète de l'interface tkinter et du formulaire openpyxl
2022-06-22 22:07:00 【Lyx4949】
Synthèse de cette affaireopenpyxl(Tableaux)Modules ettkinterModule,Conception d'un système de bibliothèque libre - service,Permet aux lecteurs d'accéder à l'interface système“Emprunter des livres”、“Rendre le livre”、“Requête”Attendre l'opération.
Un.、Effets d'interface

Tableaux de données connexes“Data.xlsx”Il se lit comme suit::
Remarques fonctionnelles:Ce formulaire permet d'enregistrer le numéro de compte du lecteur(Inclure le numéro du lecteur、Numéro de compte, mot de passe).Lorsque vous vous connectez, vous devez récupérer les informations du lecteur pour vous connecter.;Quand j'emprunte un livre,Enregistrer les livres empruntés dans le dossier d'emprunt du lecteur;Quand le livre sera rendu,Supprimer les livres retournés du dossier d'emprunt du lecteur;Lors de la requête,Les enregistrements d'emprunt des lecteurs qui peuvent être obtenus à partir du tableau sont affichés dans l'interface.OpenpyxlLes actions du module sur la table peuvent voir les articles précédemment écritsOpenpyxlFonctionnement du module table
2.、Environnement de développement
Windows10+python3.5.5+Vs Code(Outils de développement)
Trois、Préparation au développement
Data.xlsxTableaux( Voir la fin de l'article , Joindre des liens vers les procédures et les formulaires complets )
Quatre、Processus de mise en oeuvre
- Importer des fonctions de bibliothèque.
from tkinter import *
import openpyxl
import tkinter.messagebox as messagebox # Message pop - up
- Programmation de l'interface principale
*( Le Programme d'interface principale est placé à la fin , Voici une explication à l'avance )* La structure de conception de l'interface principale est simple , J'ai mis un “Connexion du lecteur”Boutons, Utilisé par le lecteur lors de la connexion ,Fonctions liéesSign_in. Cette interface est basée sur main_frameCadre, Une nouvelle interface apparaîtra plus tard , Cache ce cadre. , Réinitialiser le nouveau composant de placement du cadre . Puis définissez tous les livres comme un dictionnaire imbriqué book_sum, Lisez chaque livre de façon uniforme et pratique. . Enfin, les opérations de table .
#Programme d'interface principale
top = Tk()
top.title("Bibliothèque")
top.geometry("800x500")
main_frame = Frame(top) # Cadre de l'interface principale
main_frame.place(relwidth=1,relheight=1)
# Étiquette de l'interface principale de mise en page ,Boutons:Emprunter des livres、Rendre le livre、Requête、Obtenir une carte de lecteur、Sortie du système
Label(main_frame,text = " Bibliothèque de commodité ",font = ("Corps noir",50),width = 23,height = 3).place(x=0,y = 0)
Button(main_frame,text = "Connexion du lecteur",bg = "SkyBlue",command = Sign_in,font = ("Corps noir",15),width = 20,height = 3).place(x= 300,y = 350)
path = "C:/Users/cos(Lin)/Desktop/" #Chemin de stockage,Modifier en fonction de la situation réelle
#Tous les livres
book_sum = {
"La littérature":{
0:"Moi et l'autel de la terre",1:"Boule de graisse de mouton",2:"La vie",3:"La rivière Hulan",4:"Hometown",5:"Ville frontalière",6:"Les fleurs fleurissent",7:"Le siège"},
"Ordinateur":{
0:"Principes fondamentaux de l'intelligence artificielle",1:"Python Programmation et Robotique ",2:"Introduction à l'intelligence artificielle",3:" Application pratique de l'intelligence artificielle ",4:"Apprentissage profond",5:"Réseau informatique",6:"Apprentissage automatique",7:"Développement d'applets Wechat"},
"Histoire":{
0:"15 ans de Wanli",1:"Histoire générale de la Chine",2:"La dynastie Ming.",3:"Histoire générale mondiale",4:"La biographie de su Dongpo",5:"Daming au microscope",6:" Trois cents ans de guerre civile ",7:"Song Huizong"},
"La loi":{
0:" Sur les crimes et les peines ",1:" Grande Constitution ",2:"Principes généraux du droit civil",3:"Code civil",4:" Droit chinois et société chinoise ",5:" Droit civil de la propriété ",6:" Les lois du droit pénal ",7:" Analyse économique de la loi "},
"Psychologie":{
0:"Psychologie grotesque",1:"La foule",2:"M. crapaud est allé voir un psy",3:"Psychologie sociale",4:" Introduction à l'histoire de la psychologie ",5:"Psychologie de la personnalité",6:"L'analyse des rêves",7:"Tu devrais peut - être parler à quelqu'un."},
"Médecine":{
0:"Maladies infectieuses",1:"Sur les maladies diverses de la typhoïde",2:" Soins infirmiers de base ",3:" Pharmacologie clinique pratique ",4:" Lignes directrices pour le diagnostic clinique et le traitement _ Crédit pour douleur ",5:" Nouvelle pharmacologie ",6:" ECG ",7:" Analyse des cas classiques de gynécologie et d'obstétrique "}}
#Obtenir la première feuille de travail:“Information sur l'emprunt” Nombre maximum de lignes dans le tableau
sheets = openpyxl.load_workbook(path + "Data.xlsx")
sheet1 = sheets[sheets.sheetnames[0]]
max_row1 = sheet1.max_row # Obtient le nombre de lignes sur la dernière ligne des valeurs valides du tableau , Numéro du lecteur
top.mainloop() #Boucle de message
L'effet de l'interface principale est le suivant: :
- Concevoir l'interface de connexionSign_inFonctions
L'interface de connexion cache d'abord le cadre de l'interface principale main_frame, Puis mettre en page les nouveaux composants du cadre second_frameÉléments du cadre, Placer dans le cadre “Numéro du lecteur”、“Numéro de compte, mot de passe” Composant de la zone d'entrée de texte pour , Utilisé par le lecteur pour saisir des informations pertinentes . Puis placez le bouton de confirmation ,LiensfunctionsFonctions(Fonctions de service), Les paramètres transmis comprennent la composante cadre de cette interface et deux informations entrées par le lecteur. ,Pour obtenir plus tard.
#Interface de connexion
def Sign_in():
# Masquer la première interface , Définir la deuxième interface
main_frame.place_forget()
second_frame = Frame(top)
second_frame.place(relwidth=1,relheight=1)
# Afficher dans l'interface “Numéro du lecteur”“Mot de passe”Boîte d'entrée pour, Entrez le nom du lecteur
Label(second_frame,text = "Interface de connexion",font = ("Corps noir",20),width = 20,height = 3).place(x=300, y=20)
Label(second_frame,text = "Numéro du lecteur:",font = ("Corps noir",18),width = 20,height = 3).place(x=100, y=100)
Label(second_frame,text = "Mot de passe:",font = ("Corps noir",18),width = 20,height = 3).place(x=100, y=175)
num_entry = Entry(second_frame,show = None, font=("Corps noir", 18), width=25) # Case d'entrée du nom
num_entry.place(x = 300,y = 135)
password_entry = Entry(second_frame,show = '*', font=("Corps noir", 18), width=25) # Case d'entrée du nom
password_entry.place(x = 300,y = 200)
#Paramètres“Confirmation”Boutons,Passer àget_value()Fonctions: Cette fonction remplit le lecteur et le numéro du lecteur dans le premier tableau
Button(second_frame,text = "Confirmation",bg = "SkyBlue",font = ("Corps noir",12),width = 15,height = 3,command = lambda:functions(second_frame,num_entry,password_entry)).place(x= 180,y = 300)
Button(second_frame,text = "Retour",bg = "SkyBlue",font = ("Corps noir",12),width = 15,height = 3,command = lambda:back_main(second_frame,main_frame)).place(x= 550,y = 300)
L'effet de l'interface de connexion est le suivant: :
- Interface de fonction de service functionsFonctions
Cliquez sur“Confirmation”Après le bouton, Passer à l'interface de fonction de service , C'est la nouvelle interface , Encore une fois, mettez en page le nouveau cadre , Cacher sur le cadre ( Je ne reviendrai pas sur ). La procédure commence par get() Méthode pour obtenir le numéro de lecteur entré et le mot de passe du lecteur ,Pour la validation. Lors de la validation, vous devez utiliser une table qui a été chargée avant , Parcourir pour obtenir le contenu des première et deuxième colonnes du tableau , Identification du lecteur , Vérifier que le BIT de drapeau défini a réussi pass_flagPour1,Sortir de la boucle. Enfin, l'interface de fonction de service apparaît selon le drapeau de vérification , L'interface a placé le livre emprunté 、Rendre le livre、Requête、 Sortie du système 4Boutons de fonction, Affiche également le nom du lecteur . Si le lecteur a mal saisi , La fenêtre contextuelle apparaîtra , Erreur d'entrée de l'invite d'alarme , Et retourner à l'interface de connexion , Demander au lecteur de saisir à nouveau le compte 、Numéro de compte, mot de passe.
#Interface fonctionnelle:Emprunter des livres、Rendre le livre、Requête、 Quitter la fonction système
def functions(second_frame,num_entry,password_entry):
num = num_entry.get() #get()Méthode d'acquisitionEntryZone d'entrée Entrez le contenu
password = password_entry.get()
print(num,password,type(num))
# Masquer la première interface , Définir la deuxième interface
second_frame.place_forget()
third_frame = Frame(top)
third_frame.place(relwidth=1,relheight=1)
pass_flag = 0 # Vérifier les bits du drapeau
for i in range(2,max_row1+1): #Traverser la table
# Vérifier que le numéro de lecteur et le mot de passe sont corrects . Le numéro du lecteur est dans la première colonne , Le mot de passe est dans la troisième colonne
if num == str(sheet1.cell(i,1).value) and password == str(sheet1.cell(i,3).value):
pass_flag = 1 # Le BIT du drapeau de vérification est 1
break #Sortir de la boucle
else: # Erreur de mot de passe ou de compte
pass_flag = 0 # Le BIT du drapeau de vérification est 0
if pass_flag == 1: # Bit du drapeau de vérification du jugement
# Bouton de fonction de service
print("Validation réussie")
Label(third_frame,text = str(sheet1.cell(i,2).value) + ",Soyez le bienvenu",font = ("Corps noir",40),width = 30,height = 3).place(x=10,y = 0)
Button(third_frame,text = "Emprunter des livres",bg = "SkyBlue",command = lambda:Borrow_books(third_frame,num),font = ("Corps noir",12),width = 15,height = 3).place(x= 150,y = 200)
Button(third_frame,text = "Rendre le livre",bg = "SkyBlue",command = lambda:ruturn_books(third_frame,num),font = ("Corps noir",12),width = 15,height = 3).place(x= 550,y = 200)
Button(third_frame,text = "Requête",bg = "SkyBlue",command = lambda:Inquire(third_frame,num) ,font = ("Corps noir",12),width = 15,height = 3).place(x= 150,y = 350)
Button(third_frame,text = "Sortie",bg = "SkyBlue",font = ("Corps noir",12),width = 15,height = 3,command=lambda:back_main(third_frame,main_frame)).place(x= 550,y = 350)
else:
messagebox.showinfo('Attention!', ' Erreur de mot de passe ou de compte !') #Une fenêtre d'avertissement apparaît
back_main(third_frame,second_frame) # Si le mot de passe du compte est incorrect, l'interface de connexion sera retournée.
Après une connexion réussie, L'interface de service est illustrée dans la figure :
- “Emprunter des livres”BoutonsBorrow_booksFonctions
Cliquez sur l'interface de service “Emprunter des livres”Après le bouton,Passer àBorrow_booksFonctions. L'interface est nouvelle ,C'est parti.6 Différents types de boutons de livres ,Respectivement.“La littérature”、“Ordinateur”、“Histoire”、“La loi”、“Psychologie”、“Médecine”, Appuyez sur chaque bouton pour entrer le nom du livre correspondant ·, Attention au bouton command Fonctions liées aux paramètres BOOKFonctions, Le dernier des arguments passés est la classification des livres ,C'est là - Basclassify, Tous les dictionnaires de livres mentionnés précédemment book_sumCorrespondant à“Clé“.
# Le bouton emprunter un livre
def Borrow_books(third_frame,num):
# Masquer la première interface , Définir la deuxième interface
third_frame.place_forget()
fourth_frame = Frame(top)
fourth_frame.place(relwidth=1,relheight=1)
Label(fourth_frame,text = "Classification des livres",font = ("Corps noir",40),width = 30,height = 3).place(x=10,y = 0)
Button(fourth_frame,text = "La littérature",bg = "white",command = lambda:BOOK(fourth_frame,num,"La littérature"),font = ("Corps noir",12),width = 15,height = 3).place(x= 150,y = 200)
Button(fourth_frame,text = "Ordinateur",bg = "white",command = lambda:BOOK(fourth_frame,num,"Ordinateur"),font = ("Corps noir",12),width = 15,height = 3).place(x= 350,y = 200)
Button(fourth_frame,text = "Histoire",bg = "white",command = lambda:BOOK(fourth_frame,num,"Histoire"),font = ("Corps noir",12),width = 15,height = 3).place(x= 550,y = 200)
Button(fourth_frame,text = "La loi",bg = "white",command = lambda:BOOK(fourth_frame,num,"La loi"),font = ("Corps noir",12),width = 15,height = 3).place(x= 150,y = 350)
Button(fourth_frame,text = "Psychologie",bg = "white",command = lambda:BOOK(fourth_frame,num,"Psychologie"),font = ("Corps noir",12),width = 15,height = 3).place(x= 350,y = 350)
Button(fourth_frame,text = "Médecine",bg = "white",command = lambda:BOOK(fourth_frame,num,"Médecine"),font = ("Corps noir",12),width = 15,height = 3).place(x= 550,y = 350)
L'effet de l'interface de prêt de livres est montré dans la figure :
- Interface de sélection de livres
Par“Ordinateur” Par exemple, les livres de classe ,Appuyez.“Ordinateur”Après le bouton, L'interface affiche les titres de base des livres informatiques , En appuyant sur le petit carré correspondant à l'avant du livre , Appuyez ensuite sur le bouton OK pour confirmer la sélection du livre . Cette section porte principalement sur la conception des cases à cocher de la liste des livres. ,Peut être utilisétkinterDansCheckbuttonComposants de la case à cocher,Paramètrestext Est le texte à côté de la case à cocher , C'est le nom du livre. , Obtenu par un dictionnaire imbriqué book_sum[classify][i],variable Paramétrage ou obtention de la case à cocher actuellement sélectionnée . Confirmer l'Association du bouton selectionFonctions, Le numéro du lecteur est passé num、 Livres choisis checkboxes、Catégories de livresclassifyIsoparamètre
# Choisissez un livre de fiction : Case à cocher conception , Plusieurs choix de livres disponibles
def BOOK(fourth_frame,num,classify):
print("classify:",classify)
print("Assigner des livres",book_sum["La loi"])
# Masquer la première interface , Définir la deuxième interface
fourth_frame.place_forget()
fifth_frame = Frame(top)
fifth_frame.place(relwidth=1,relheight=1)
Label(fifth_frame,text=" Choisissez les livres que vous souhaitez emprunter ",font = ("Corps noir",20),fg="blue",bg="lightyellow",width=60).grid()
checkboxes = {
}
for i in range (8):
checkboxes[i] = BooleanVar()
Checkbutton(fifth_frame,text=book_sum[classify][i],variable=checkboxes[i],font = ("Corps noir",15),height = 1).grid(row = i+1,sticky = W) # Afficher les livres un par un dans la Liste
Button(fifth_frame,text="C'est sûr.",bg = "SkyBlue",font = ("Corps noir",12),width = 15,height = 3,command=lambda:selection(fifth_frame,num,checkboxes,classify)).place(x = 180, y =400)
Button(fifth_frame,text="Annulation",bg = "SkyBlue",font = ("Corps noir",12),width = 15,height = 3,command=lambda:back_main(fifth_frame,main_frame)).place(x = 550, y =400)
Sélectionnez l'effet d'interface comme indiqué dans la figure 
- Confirmer le choix du livre selectionFonctions
Lorsque l'interface précédente clique sur “Confirmation”Boutons, Après confirmation du livre sélectionné pour l'emprunt ,Passer àselectionFonctions, Enregistrer un livre dans un formulaire .Liste des définitionslist1 Pour stocker le contenu de la case à cocher sélectionnée ,Utilisationget() Méthode obtenir si la case à cocher est cochée ,Méthodescheckboxes[i].get(), Si la première est cochée ,Le résultat estTure, Le contenu de la case à cocher book_sum[classify][i]Ajouter à la Liste.C'est sorti.“ Confirmer l'emprunt ”Dans la fenêtre contextuelle,Cliquez sur“Confirmation”, L'emprunt, c'est - à - dire l'enregistrement, est enregistré sous forme de chaîne dans le tableau ,Par exemple:“Romance des Trois Royaumes Marge d'eau Voyage vers l'Ouest Rêve de la Chambre rouge”. Vue de l'image .
# Confirmer le livre sélectionné , Enregistrer les livres dans les dossiers d'emprunt
def selection(fifth_frame,num,checkboxes,classify):
list1 = [] #Définir une liste vide, Utilisé pour stocker les livres que vous choisissez d'emprunter
for i in checkboxes:
if checkboxes[i].get() == True: # Déterminer lequel est sélectionné ou non
list1.append(book_sum[classify][i]) # Sera sélectionné pour former une liste
confirm = messagebox.askokcancel('Conseils!',' Confirmer l'emprunt ?')
if confirm == True: # Une fenêtre apparaît pour demander un prêt
for i in range(2,max_row1+1):
if sheet1.cell(i,1).value == int(num):
print(sheet1.cell(i,2).value+"Emprunter des livres")
# Trier les livres sélectionnés par le lecteur en chaînes , Les espaces sont enregistrés dans le tableau à intervalles réguliers ,Par exemple “Romance des Trois Royaumes Marge d'eau Voyage vers l'Ouest Rêve de la Chambre rouge”,La méthode est la suivante:
sheet1.cell(i,4).value = ' '.join(list1) # Regrouper les éléments de chaîne individuels de la liste des livres empruntés en une nouvelle chaîne ,Il y a un espace au milieu
sheets.save(path + "Data.xlsx") #Enregistrer le formulaire
messagebox.showinfo("Conseils!",'Prêt réussi,Retour à l'interface principale!')
back_main(fifth_frame,main_frame)
Les enregistrements d'emprunt enregistrés dans le formulaire sont indiqués dans la figure. :
- “Rendre le livre”Boutonsruturn_booksFonctions
Cliquez sur l'interface de service “Rendre le livre”Après le bouton,Passer àruturn_booksFonctions. Dans la nouvelle interface de retour , Placé pour être retourné “Titre du livre“Zone d'entrée de texte pour,”Confirmer l'emprunt“ Les boutons sont liés data_valFonctions, Cette fonction fonctionne sur les enregistrements d'emprunt dans le tableau .”Retour au supérieur“ Le bouton passe directement à l'interface principale .
# Bouton retour du livre
def ruturn_books(third_frame,num):
# Cacher l'ancienne interface , Définir une nouvelle interface
third_frame.place_forget()
fourth_frame = Frame(top)
fourth_frame.place(relwidth=1,relheight=1)
Label(fourth_frame,text = " Interface de service de retour de livres ",font = ("Corps noir",20),width = 20,height = 3).place(x=300, y=20)
Label(fourth_frame,text = "Titre du livre:",font = ("Corps noir",20),width = 20,height = 3).place(x=100, y=100)
Label(fourth_frame,text = "Remarques: Veuillez saisir le nom du livre retourné , Comme ramasser des fleurs au coucher du soleil , Un seul exemplaire à la fois. ~",font = ("Italique",12),width = 100,height = 2).place(x=30, y=180)
book_entry = Entry(fourth_frame, font=("Corps noir", 20), width=20) # Boîte d'entrée du livre
book_entry.place(x = 350,y = 130)
#Paramètres“Confirmation”Boutons,Passer àget_value()Fonctions: Cette fonction remplit le lecteur et le numéro du lecteur dans le premier tableau
Button(fourth_frame,text = " Confirmation du retour ",bg = "SkyBlue",font = ("Corps noir",12),width = 15,height = 3,command = lambda:data_val(num,book_entry)).place(x= 180,y = 300)
Button(fourth_frame,text = "Retour au supérieur",bg = "SkyBlue",font = ("Corps noir",12),width = 15,height = 3,command = lambda:back_main(fourth_frame,main_frame)).place(x= 550,y = 300)
L'effet de l'interface de retour de livre est comme suit: :
- Modifier les données de retour du livre dans le tableau data_valFonctions
Cliquez sur le “ Confirmation du retour “Après le bouton,Passer àdata_valFonctions. Cette fonction supprime les livres que le lecteur retourne du formulaire d'enregistrement d'emprunt . Les paramètres passés par la fonction sont donc le numéro du lecteur et le nom du livre que le lecteur doit retourner. , Par numéro de lecteur numTraverser la table, Localiser le lecteur dans le tableau i, À la ligne , Obtenir le dossier d'emprunt du lecteur sheet1.cell(i,4).value (NoiLigne4Colonnes),Et à traverssplit() La méthode spécifie le séparateur pour couper la chaîne . Vide entre parenthèses , C'est - à - dire que les chaînes sont divisées en listes par espace ,Convertir en liste,Parcourir la liste, Trouver le même titre que celui que le lecteur a entré ,Et utiliserremove()Méthodes, Supprimer l'enregistrement du livre dans la Liste .Après suppression,Même utilisation’ '.join(book_list)Méthodes, Assigner une nouvelle liste supprimée à l'enregistrement d'emprunt du lecteur sous forme de chaîne , Si le lecteur a mal saisi , Une invite pop - up apparaît .
# Modifier les données de retour du livre dans le tableau
def data_val(num,book_entry):
borrowing_records = '' # Définir l'historique d'emprunt du lecteur
confirm = messagebox.askokcancel('Conseils!',' Confirmer le retour ?')
if confirm == True: # Une fenêtre apparaît pour demander le remboursement du prêt
book = book_entry.get() # Obtenir le nom du livre entré par le lecteur
for i in range(2,max_row1+1):
if num == str(sheet1.cell(i,1).value) :
reader_flag = 1 #Tag bit
break # Localiser le lecteur dans le tableau i,Ligne
else:
reader_flag = 0 #Tag bit
if reader_flag == 1:
borrowing_records = str(sheet1.cell(i,4).value) # Obtenir le dossier d'emprunt du lecteur dans le formulaire
book_list = borrowing_records.split() #split()Méthode pour découper une chaîne en spécifiant un séparateur. Vide entre parenthèses , C'est - à - dire que les chaînes sont divisées en listes par espace ,Convertir en liste
return_flag = 0
for k in book_list: #Parcourir la liste
if k == str(book): # Trouver les livres que les lecteurs veulent rendre
return_flag = 1 # J'ai trouvé le logo du livre.
print("Trouver")
break # Trouvez - le et sautez
else:
return_flag = 0 #Je n'ai pas trouvé, Ou une entrée incorrecte ,Besoin de conseils
if return_flag == 1:
book_list.remove(k) # Supprimer les enregistrements de ce livre de la Liste
sheet1.cell(i,4).value = ' '.join(book_list) # Réattribuer l'enregistrement supprimé à l'enregistrement d'emprunt du lecteur
print(str(book_list))
sheets.save(path + "Data.xlsx") # N'oubliez pas d'enregistrer les données après avoir manipulé le tableau.
messagebox.showinfo("Conseils!",'Retour réussi du livre!')
else:
messagebox.showinfo("Conseils!",'Erreur d'entrée,Veuillez saisir à nouveau!')
Voir la figure pour confirmer l'effet de l'opération de retour des documents. 
- Bouton de requêteInquireFonctions
Cliquez sur l'interface de service “Requête”Après le bouton,Passer àInquireFonctions. Par les paramètres passés num(Numéro du lecteur) Obtenez le lecteur à “Data.xlsx“ Dossiers d'emprunt dans les formulaires 、Nom du lecteur, Le nom du lecteur et l'enregistrement d'emprunt sont ensuite affichés sur l'interface .Attention!, Parce que le dossier d'emprunt est assez long ,Par ici.LabelDans les composantswraplengthParamètres,Ce paramètre détermine Label Combien de lignes le texte de , Cette option spécifie la longueur de chaque ligne , Les unités sont des unités d'écran , Il faudra peut - être le déboguer lentement. , La hauteur doit également être plus grande .
# Fonction du bouton de requête
def Inquire(third_frame,num):
# Cacher l'ancienne interface , Définir une nouvelle interface
third_frame.place_forget()
fourth_frame = Frame(top)
fourth_frame.place(relwidth=1,relheight=1)
for i in range(2,max_row1+1): #Traverser la table, Par le numéro entré ,# Localiser le lecteur dans le tableau i,Ligne
if num == str(sheet1.cell(i,1).value) :
reader_flag = 1 #Tag bit
break
else:
reader_flag = 0 #Tag bit
if reader_flag == 1:
name = sheet1.cell(i,2).value # Par le nombre de lignes du lecteur dans le tableau , Obtenez le nom de ce lecteur
borrowing_records = sheet1.cell(i,4).value # Par le nombre de lignes du lecteur dans le tableau , Obtenir le dossier d'emprunt de ce lecteur
Label(fourth_frame,text = " Interface de service de requête ",font = ("Corps noir",25),width = 50,height = 2).place(x=0, y=0)
Label(fourth_frame,text = "Lecteurs: " ,font = ("Corps noir",20),width = 15,height = 3).place(x=20, y=100) #“Lecteurs”Étiquette de texte
Label(fourth_frame,text = name ,font = ("Corps noir",20),fg = 'red',width =40,height = 3).place(x=200, y=100) #Nom du lecteur
Label(fourth_frame,text = "Emprunter des livres: ",font = ("Corps noir",20),width = 15,height = 3).place(x=20, y=200) #“Emprunter des livres”Étiquette de texte
Label(fourth_frame,text = borrowing_records, wraplength=350, font = ("Corps noir",20),fg = 'red',width = 40,height = 5).place(x=200, y=200) #"Emprunter des livres"Enregistrement,wraplength Ce paramètre permet au texte d'atteindre 200 Enroulement automatique après pixels
Button(fourth_frame,text = "Retour au supérieur",bg = "SkyBlue",font = ("Corps noir",20),width = 20,height =2,command=lambda:back_main(fourth_frame,main_frame)).place(x= 300,y = 400)
L'effet de l'interface de requête est le suivant: :
- Retour à la fonction bouton ,Dea Transfert de l'interface à main_frame Interface pour la disposition des composants du cadre , C'est plus simple, pas plus détaillé .
# Retour à la fonction bouton
def back_main(a,main_frame):
a.place_forget()
top.geometry("800x500")
main_frame.place(relwidth=1,relheight= 1)
Cinq、Remarques
①No1 Certains programmes de l'interface principale suivent les fonctions définies ,path La route doit être modifiée en fonction de la situation réelle. ,
② Lien vers le programme complet et le formulaire
Liens:Commande - moi: Procédure complète et Data.xlsxTableaux
Code d'extraction:lyx4
边栏推荐
- 科研热点|官宣!2022年JCR分区和影响因子发布时间确定!
- Lesson 028: Documents: because I know you, I will never forget the after-school test questions and answers [no title]
- 第033讲:异常处理:你不可能总是对的2 | 课后测试题及答案
- localStorage、sessionStorage 和 cookie 的区别大总结
- How to operate redis on the IntelliJ idea database console
- Redis core technology and practice: learning summary directory
- How to use the data dictionary function in the low code platform of the Internet of things?
- IDC发布中国数据治理报告 亿信华辰第一
- The machine that lies in the 52nd monthly race of Niuke (the complexity of interval assignment operation from O (n^2) to o (n))
- 杰理之外挂 4M 的 flash 在 PC 上查看大小只有 1M 的处理方法【篇】
猜你喜欢

What is a data asset? How should data asset management be implemented?

SPA项目开发之首页导航+左侧菜单
![[icml2022] using virtual nodes to promote graph structure learning](/img/cc/8d009e3c073b4eeef090ac393b8199.png)
[icml2022] using virtual nodes to promote graph structure learning

Redis core technology and practice: learning summary directory

第033讲:异常处理:你不可能总是对的2 | 课后测试题及答案
![Jerry's plug-in 4m flash to view the processing method with a size of only 1m on the PC [chapter]](/img/8a/49b23eb63ff7e8814d1d49282c9fa2.png)
Jerry's plug-in 4m flash to view the processing method with a size of only 1m on the PC [chapter]

分享insert into select遇到的死锁问题(项目实战)
![Jerry's music mode obtains the directory of playing files [chapter]](/img/2f/efb8a077e3e398cb3b14cfd98a8422.png)
Jerry's music mode obtains the directory of playing files [chapter]

Lesson 014-15: string (see lesson 27-32 of the new version of little turtle) | after class test questions and answers

300. 最长递增子序列 ●●
随机推荐
kali2021安装RTL8188GU无线网卡[TL-WN726N]驱动
Based on AI driven macromolecular drug discovery, "Huashen Zhiyao" obtained nearly 500million yuan of round a financing
Differences between watch, computed and methods
300. 最长递增子序列 ●●
二级造价工程师考前必备15个知识点来了!祝你旗开得胜!
The second harmonyos application development training
The necessary materials for the soft test have been released. All the soft test materials for the whole subject have been prepared for you!
杰理之开启四声道通话近端变调问题【篇】
Jerry's plug-in 4m flash to view the processing method with a size of only 1m on the PC [chapter]
引入稀疏激活机制!Uni-Perceiver-MoE显著提升通才模型的性能
杰理之使用 DP 和 DM 做 IO 按键检测注意点【篇】
第021讲:函数:lambda表达式 | 课后测试题及答案
第019讲:函数:我的地盘听我的 | 课后测试题及答案
How to carry out encryption protection for equipment under extortion virus rampant
Introduce sparse activation mechanism! Uni perceiver MOE significantly improves the performance of generalist model
Niuke's height in the 52nd monthly race B (thinking problem simulation problem)
第027讲:集合:在我的世界里,你就是唯一 | 课后测试题及答案
第026讲:字典:当索引不好用时2 | 课后测试题及答案
杰理之在music模式下提示音使用打断模式无法播放的问题【篇】
6-5 图的深度遍历-邻接矩阵实现