程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Écrivez à votre cousin Python pour faire linterface graphique système de gestion des étudiants conception finale, lenseignant donne directement toutes les notes, la graduation est stable

編輯:Python

PythonCréer un système de gestion des étudiants

  • Préface Mots
  • Analyse du Code
    • Un.、Page de connexion
      • 1、Définir la classe de connexion et l'objet d'initialisation
      • 2、Fonctions de connexion
      • 3、Appel de fenêtre
    • 2.、La page principale montre
      • 1、Définir la classe de page,Appel pratique.
    • Trois 、Affichage de la page
      • 1、Lier les pages individuelles
      • 2、Entrée
    • Quatre、Recherche de données
    • Cinq、Supprimer les données
      • 1、Cliquez sur Supprimer,Supprimer les données
    • Six、Modifier les données
      • 1、Recherche de données
      • 2、Modifier les données et mettre à jour
    • Sept、À propos de la section
      • Huit、Enregistrement des données,Enregistrer les informations
      • 1、Enregistrer les données
      • 2 、Lire les données

Préface Mots

Bonjour, mes frères,Ça fait longtemps!J'ai été trop occupé ces derniers temps,Donc encore une double fracture~

Cousin est presque diplômé de l'Université,Après un semestrePythonJe ne peux pas écrire sur le système de gestion des étudiants,C'est une honte pour moi,Lui apprendre et ne pas apprendre,Et laissez - moi lui écrire,J'ai envie de deux gifles,Il a fini par écrire pour lui,Qui a fait de lui mon cousin,Il faut quand même l'aider!


C'est fini. Mets - le là. , Alors Partagez - le aujourd'hui. !

Pas grand - chose à dire, Commençons tout de suite !

Analyse du Code

Un.、Page de connexion

1、Définir la classe de connexion et l'objet d'initialisation

Importer d'abord les modules dont nous avons besoin

from main import MainPage

Page de connexion

Lier le tableau à l'objet instance

self.root = master

self.page Papier peint Afficher une zone rectangulaire sur l'écran,Plus souvent utilisé comme conteneur.

self.page = tk.Frame(self.root)
self.page.pack()
self.root.geometry("300x180")

tkinter Variables variables fournies ,Définir le nom d'utilisateur et le mot de passe.

self.username = tk.StringVar()
self.password = tk.StringVar()

Créer unlabel

Disposition de la grille

tk.Label(self.page).grid(row=0, column=0)
# textvariable Ce paramètre est tkinter Les variables de chaîne à l'intérieur sont liées à L'espace est lié 
tk.Label(self.page, text="Comptes").grid(row=1, column=0, stick=tk.E, pady=10)
tk.Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=tk.W, pady=10)
tk.Label(self.page, text="Mot de passe").grid(row=2, column=0, stick=tk.E, pady=10)
tk.Entry(self.page, textvariable=self.password).grid(row=2, column=1, stick=tk.W, pady=10)

command Accepter une fonction Exécuter la logique de connexion

tk.Button(self.page, text="Connexion", command=self.login_check).grid(row=3, column=0, stick=tk.W, pady=10)
tk.Button(self.page, text="Sortie", command=root.quit).grid(row=3, column=1, stick=tk.E, pady=10)

2、Fonctions de connexion

Vérifier la connexion

Obtenir le mot de passe du compte

name = self.username.get()
pwd = self.password.get()

Ne pas interroger la base de données

print(name, pwd)
if name == 'admin' and pwd == '123456':
tkinter.messagebox.showinfo(title='Félicitations',
message='Connexion réussie!')

Détruire le contenu de la page courante

self.page.destroy()

Détruire le contenu peint sur toute la page

self.root.destroy()

Changement de page

 MainPage(self.root)
else:
tkinter.messagebox.showinfo(title='Erreur', message='Mauvais compte ou mot de passe')

3、Appel de fenêtre

Appelez cette méthode de fichier , Exécuter deux entrées dans ce fichier , Appeler les données avant d'exécuter cette méthode à l'extérieur .

Créer un objet,Objets de fenêtre,Afficher l'interface.

if __name__ == '__main__':
root = tk.Tk()
LoginPage(root)
root.mainloop()

2.、La page principale montre

1、Définir la classe de page,Appel pratique.

Interface de connexion

def __init__(self, master):
self.root = master
self.page = tk.Frame(self.root)
self.page.pack()
self.root.geometry("%dx%d" % (600, 400))
self.create_page()

Créer un menu de haut niveau,Afficher le menu.

def create_page(self):
menubar = tk.Menu(self.root)
menubar.add_command(label="Entrée")
menubar.add_command(label="Requête")
menubar.add_command(label="Supprimer")
menubar.add_command(label="Modifier")
menubar.add_command(label="À propos de")

Trois 、Affichage de la page

1、Lier les pages individuelles

Trop de codes écrits ensemble ,Beaucoup de données,Facile à mal écrire,Le chaos, Vous pouvez écrire un fichier pour charger les données view.py

Inview.py Le fichier définit les classes pour chaque module

Entrée

class InputFrame(tk.Frame): # SuccessionFrameCatégorie 
def __init__(self, master):
# Re - parent 
super().__init__(master)
pass

Requête

class QueryFrame(tk.Frame): # SuccessionFrameCatégorie
def __init__(self, master=None):
super().__init__(master)
pass

Supprimer

class DeleteFrame(tk.Frame): # SuccessionFrameCatégorie
def __init__(self, master=None):
super().__init__(master)

Modifier

class ChangeFrame(tk.Frame): # SuccessionFrameCatégorie
def __init__(self, master=None):
super().__init__(master)

À propos de

class AboutFrame(tk.Frame): # SuccessionFrameCatégorie
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.root = master

Et aprèsmain.py Lier ces données dans un fichier

self.input_page = InputFrame(self.root)
self.change_page = ChangeFrame(self.root)
self.query_page = QueryFrame(self.root)
self.delete_page = DeleteFrame(self.root)
self.about_page = AboutFrame(self.root)

2、Entrée

Inview.pyDans le documentInputFrame Ajouter le contenu pertinent à la classe , Nom et notes .

  • x = IntVar():Variable entière,Par défaut0
  • x = DoubleVar():Variable flottante,Par défaut0.0
  • x = StringVar():Variable de chaîne,Par défaut""
  • x = BooleanVar():Variable booléenne,True- Oui.1,False- Oui.0
self.root = master # Définir les variables internesroot
self.name = tk.StringVar()
self.math = tk.StringVar()
self.chinese = tk.StringVar()
self.english = tk.StringVar()
# Entrée
self.status = tk.StringVar()
# Appelezcreate_page()Fonctions
self.create_page()

Compilationcreate_page()Fonctions

def create_page(self):
# pass
# stick Direction de l'objet de contrôle tk.W Position occidentale 
# pady padding y Largeur supérieure et inférieure 
# row D'accord Disposition du tableau
tk.Label(self).grid(row=0, stick=tk.W, pady=10)
tk.Label(self, text='Nom de famille Nom: ').grid(row=1, stick=tk.W, pady=10)
# text variable Lier le contenu des données dans le contrôle 
tk.Entry(self, textvariable=self.name).grid(row=1, column=1, stick=tk.E)
tk.Label(self, text='Nombre Études: ').grid(row=2, stick=tk.W, pady=10)
tk.Entry(self, textvariable=self.math).grid(row=2, column=1, stick=tk.E)
tk.Label(self, text='Langue Texte: ').grid(row=3, stick=tk.W, pady=10)
tk.Entry(self, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)
tk.Label(self, text='Anglais Langue: ').grid(row=4, stick=tk.W, pady=10)
tk.Entry(self, textvariable=self.english).grid(row=4, column=1, stick=tk.E)
tk.Button(self, text='Entrée', command=self.recode_student).grid(row=5, column=1, stick=tk.E, pady=10)
tk.Label(self, textvariable=self.status).grid(row=6, column=1, stick=tk.E, pady=10)

Inmain.py Lier ces données

menubar.add_command(label="Entrée", command=self.show_input)
def show_input(self):
self.input_page.pack()
# pack_forget()Masquer la disposition
# self.change_page.pack_forget()
# self.query_page.pack_forget()
# self.delete_page.pack_forget()
# self.about_page.pack_forget()

Inview.py Saisie des données dans le fichier

def recode_student(self):
stu = {
'name': self.name.get(), 'chinese': self.chinese.get(),
'math': self.math.get(), 'english': self.english.get()}
# Rafraîchir la page après avoir cliqué sur Entrée 
self.name.set('')
self.chinese.set('')
self.math.set('')
self.english.set('')
db.insert(stu)
self.status.set('Données soumises avec succès')
print(stu)

Insérer et enregistrer des données , Peut écrire un fichier pour enregistrer , Trop de code écrit ensemble , La probabilité d'erreur est également une majuscule db.pyDocumentation.

class StudentsDB:
def __init__(self):
self.students = []
def insert(self, student):
self.students.append(student)
db = StudentsDB()
if __name__ == '__main__':
print(db.students)

Quatre、Recherche de données

InQueryFrame() Classe ajouter des données

  • ttk.Treeview Vue arborescente,Baidu un moment

  • shows:
    headings
    tree
    data_list

  • columns
    La valeur est une liste. Chaque élément de la liste représente le nom d'un identificateur de colonne . La longueur de la liste est la longueur de la colonne .

SuccessionFrameCatégorie

class QueryFrame(tk.Frame):
def __init__(self, master=None):
super().__init__(master)

Définir les variables internesroot

self.root = master #
columns = ('name', 'chinese', 'math', 'english')
self.tree_view = ttk.Treeview(self, show='headings', columns=columns)

Chaque taille de données, chaque cellule

self.tree_view.column('name', width=80, anchor='center')
self.tree_view.column('chinese', width=80, anchor='center')
self.tree_view.column('math', width=80, anchor='center')
self.tree_view.column('english', width=80, anchor='center')

L'étiquette et headings

self.tree_view.heading('name', text='Nom')
self.tree_view.heading('chinese', text='Langues')
self.tree_view.heading('math', text='Mathématiques')
self.tree_view.heading('english', text='Anglais')
self.tree_view.pack(fill=tk.BOTH, expand=True)
tk.Button(self, text='Actualiser les données', command=self.show_data_frame).pack(anchor=tk.E, pady=5)
self.show_data_frame()

Actualiser les données,Afficher les données.

def show_data_frame(self):
# Supprimer l'ancienne phase 
for _ in map(self.tree_view.delete, self.tree_view.get_children('')):
pass
# Afficher d'abord toutes les données Indb Ajout de fichiers afficher le Code de données 
students = db.all()
index = 0
for stu in students:
# print(stu)
self.tree_view.insert('', index + 1, values=(
stu['name'], stu['chinese'], stu['math'], stu['english'],
))

Afficher les données

Indb.pyChine

def all(self):
return self.students

view.py

Rafraîchir les données d'insertion

  • Premier paramètre:parent : Pour les arbres Treeview,parentC'est le noeud parent, Pour les colonnes de liste seulement Treeview,parentGénéralement vide.
  • Deuxième paramètre:index :Insérer la position.C'est possible.ENDOu’end’ , Ou numérique , Si vous souhaitez insérer un nouveau item(Enregistrement) Devient le premier d'un noeud ,indexC'est réglé à0,Et ainsi de suite..
  • values: Valeurs affichées et données insérées ,Cette colonne de données.
self.tree_view.insert('', index + 1, values=(
stu['name'], stu['chinese'], stu['math'], stu['english'],
))

Insérer une page de mise à jour après la mise à jour des données

  • map(func, lst),Variables de fonction à passerfuncÇa fonctionne surlstDans chaque élément de la variable,Et faire une nouvelle liste des résultats(Python2)/Itérateur(Python3)Retour.
  • get_children(item=None)

Retour à unitemTous les enfants deitem,Ce fils.itemEst un formulaire de liste,SiitemNon spécifié, Renvoie la racine de item

for _ in map(self.tree_view.delete, self.tree_view.get_children('')):
pass

Inmain.pyDonnées de liaison des fichiers

 menubar.add_command(label="Requête", command=self.show_all)
def show_all(self):
# Masquer la disposition
self.input_page.pack_forget()
# self.change_page.pack_forget()
self.query_page.pack()
# self.delete_page.pack_forget()
# self.about_page.pack_forget()

Cinq、Supprimer les données

InDeleteFrame() Classe ajouter des données

class DeleteFrame(tk.Frame): # SuccessionFrameCatégorie
def __init__(self, master=None):
super().__init__(master)
self.root = master # Définir les variables internesroot
tk.Label(self, text='Supprimer les données').pack()
self.delete_frame = tk.Frame(self)
self.delete_frame.pack()
self.status = tk.StringVar()
self.username = tk.StringVar()
tk.Label(self.delete_frame, text=' Supprimer les informations par nom ').pack(anchor=tk.W, padx=20)
tk.Entry(self.delete_frame, textvariable=self.username).pack(side=tk.LEFT, padx=20, pady=5)
tk.Button(self.delete_frame, text='Supprimer', command=self._delete).pack()
tk.Label(self, textvariable=self.status).pack()

1、Cliquez sur Supprimer,Supprimer les données

def _delete(self):
username = self.username.get()
flag, message = db.delete_by_name(username)
self.status.set(message)

Indb.py Ajouter une logique de suppression au fichier

def delete_by_name(self, name):
for student in self.students:
if name == student['name']:
self.students.remove(student)
return True, f'{
name} Suppression réussie'
return False, f'{
name} N'existe pas'

Inmain.pyDonnées de liaison

 menubar.add_command(label="Supprimer", command=self.show_delete)
def show_delete(self):
self.input_page.pack_forget()
self.query_page.pack_forget()
self.delete_page.pack()

Six、Modifier les données

InChangeFrame() Classe ajouter des données

self.root = master # Définir les variables internesroot
tk.Label(self, text='Modifier l'interface').pack()
self.change_frame = tk.Frame(self)
self.change_frame.pack()
self.status = tk.StringVar()
self.name = tk.StringVar()
self.math = tk.StringVar()
self.chinese = tk.StringVar()
self.english = tk.StringVar()
tk.Label(self.change_frame).grid(row=0, stick=tk.W, pady=1)
tk.Label(self.change_frame, text='Nom de famille Nom: ').grid(row=1, stick=tk.W, pady=10)
tk.Entry(self.change_frame, textvariable=self.name).grid(row=1, column=1, stick=tk.E)
tk.Label(self.change_frame, text='Nombre Études: ').grid(row=2, stick=tk.W, pady=10)
tk.Entry(self.change_frame, textvariable=self.math).grid(row=2, column=1, stick=tk.E)
tk.Label(self.change_frame, text='Langue Texte: ').grid(row=3, stick=tk.W, pady=10)
tk.Entry(self.change_frame, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)
tk.Label(self.change_frame, text='Anglais Langue: ').grid(row=4, stick=tk.W, pady=10)
tk.Entry(self.change_frame, textvariable=self.english).grid(row=4, column=1, stick=tk.E)
tk.Button(self.change_frame, text='Requête', command=self._search).grid(row=6, column=0, stick=tk.W, pady=10)
tk.Button(self.change_frame, text='Modifier', command=self._change).grid(row=6, column=1, stick=tk.E, pady=10)
tk.Label(self.change_frame, textvariable=self.status).grid(row=7, column=1, stick=tk.E, pady=10)

1、Recherche de données

db.py Logique des données de requête dans le fichier

def search_by_name(self, name):
for student in self.students:
if name == student['name']:
return True, student
return False, f'{
name} N'existe pas'

view.py Fichier Cliquez sur requête ,Afficher les données

def _search(self):
flag, info = db.search_by_name(self.name.get())
if flag:
self.name.set(info['name'])
self.chinese.set(info['chinese'])
self.math.set(info['math'])
self.english.set(info['english'])
self.status.set('Requête de données réussie')
else:
# Renvoie un message d'erreur directement 
self.status.set(info)

2、Modifier les données et mettre à jour

db.py Mise à jour des fichiers logique des données

def update(self, stu):
name = stu['name']
for student in self.students:
if name == student['name']:
student.update(stu)
return True, f'{
stu["name"]} Modification réussie des données de l'utilisateur '
else:
return False, f'{
name} N'existe pas'

view.py Fichier modifier les données

def _change(self):
stu = {
'name': self.name.get(), 'chinese': self.chinese.get(),
'math': self.math.get(), 'english': self.english.get(), }
self.name.set('')
self.chinese.set('')
self.math.set('')
self.english.set('')
db.update(stu)
self.status.set('Données modifiées avec succès')

main.py Fichier à lier

 menubar.add_command(label="Modifier", command=self.show_change)
def show_change(self):
self.input_page.pack_forget()
self.query_page.pack_forget()
self.delete_page.pack_forget()
self.change_page.pack()

Sept、À propos de la section

view.pyDansAboutFrame()Ajouter des données

class AboutFrame(tk.Frame): # SuccessionFrameCatégorie
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.root = master # Définir les variables internesroot
tk.Label(self, text='À propos de l'oeuvre:Ce travail a été réalisé par Bonjour, apprenez la programmation Production').pack(anchor=tk.W)
tk.Label(self, text='À propos de l'auteur: Bonjour, apprenez la programmation ').pack(anchor=tk.W)
tk.Label(self, text='Copyright: Bonjour, apprenez la programmation ').pack(anchor=tk.W)

main.pyLier les données

 menubar.add_command(label="À propos de", command=self.show_about)
def show_about(self):
self.input_page.pack_forget()
self.query_page.pack_forget()
self.delete_page.pack_forget()
self.change_page.pack_forget()
self.about_page.pack()

Huit、Enregistrement des données,Enregistrer les informations

db.py Enregistrer les données

Créer un videjsonDocumentation

import os
file = "students.json"
# Déterminer si le document existe,Créer s'il n'existe pas
if not os.path.exists(file):
open(file, 'w')
# Erreur signalée
# os.mknod(file)
  • WindowsOui.PythonNon pris en chargemknodFonctions,Parce queWindowsIl n'y a pas denodeCe concept.

1、Enregistrer les données

def save_data(self):
with open('students.json', mode='w', encoding='utf-8') as f:
text = json.dumps(self.students, indent=2, ensure_ascii=False)
f.write(text)

2 、Lire les données

def _load_students_data(self):
with open('students.json', mode='r', encoding='utf-8') as f:
text = f.read()
if text:
self.students = json.loads(text)

Inview.py Fonction d'enregistrement d'appel dans le fichier , Enregistrer les données complétées .

Entrée

def recode_student(self):
db.save_data()

Supprimer

def _delete(self):
db.save_data()

Modifier

def _change(self):
db.save_data()

L'article est illisible , J'ai enregistré la vidéo correspondante. , Cet article n'est qu'un aperçu , Code complet et tutoriels vidéo cliquez sur les coordonnées ci - dessous ↓↓↓↓Numériser le Code pour recevoir↓↓↓↓

Voilà le partage d'aujourd'hui., À la prochaine !

Si vous trouvez ça utile, , Faites attention +Oui.+Collectionnez.,Je t'aime.!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved