Créez une application GUI simple qui ressemble à un "éditeur de texte" en utilisant Tkinter de Python. J'ai incorporé un widget de texte et une barre de défilement pour en faire une classe pour une réutilisation facile.
C'est une simple application de style "éditeur de texte".
Importez d'abord pour utiliser Tkinter, la bibliothèque d'interface graphique Python standard et la boîte de dialogue de fichier.
import tkinter as tk
from tkinter import filedialog
Créez une classe de bloc de texte avec une barre de défilement. Les classes sont dérivées des cadres pour créer du texte, des barres de défilement verticales et horizontales et les placer sur le cadre de base à l'aide d'une grille.
class SbTextFrame(tk.Frame):
def __init__(self,master):
super().__init__(master)
text = tk.Text(self,wrap='none',undo=True)
x_sb = tk.Scrollbar(self,orient='horizontal')
y_sb = tk.Scrollbar(self,orient='vertical')
x_sb.config(command=text.xview)
y_sb.config(command=text.yview)
text.config(xscrollcommand=x_sb.set,yscrollcommand=y_sb.set)
text.grid(column=0,row=0,sticky='nsew')
x_sb.grid(column=0,row=1,sticky='ew')
y_sb.grid(column=1,row=0,sticky='ns')
self.columnconfigure(0,weight=1)
self.rowconfigure(0,weight=1)
self.text = text
self.x_sb = x_sb
self.y_sb = y_sb
Ignorez fileopen () et filesave () et passez à l'explication de main (). Au début de main (), créez une fenêtre d'application et définissez le titre et la taille de la fenêtre.
def main():
root = tk.Tk()
root.title('editor')
root.geometry('400x300')
Créez ensuite un cadre de texte avec une barre de défilement et placez-le partout dans la fenêtre de l'application. En définissant ʻexpand = True`, la taille du cadre de texte changera en fonction de la taille de la fenêtre.
textframe = SbTextFrame(root)
textframe.pack(side='top',fill='both',expand=True)
Créez un menu de fichiers et placez-le dans la barre de menus de la fenêtre de l'application.
menubar = tk.Menu(root)
filemenu = tk.Menu(menubar,tearoff=0)
filemenu.add_command(label='Open',command=fileopen)
filemenu.add_command(label='Save',command=filesave)
filemenu.add_command(label='Exit',command=exit)
menubar.add_cascade(label='File',menu=filemenu)
root.config(menu=menubar)
L'ensemble du code source est le suivant.
import tkinter as tk
from tkinter import filedialog
class SbTextFrame(tk.Frame):
def __init__(self,master):
super().__init__(master)
text = tk.Text(self,wrap='none',undo=True)
x_sb = tk.Scrollbar(self,orient='horizontal')
y_sb = tk.Scrollbar(self,orient='vertical')
x_sb.config(command=text.xview)
y_sb.config(command=text.yview)
text.config(xscrollcommand=x_sb.set,yscrollcommand=y_sb.set)
text.grid(column=0,row=0,sticky='nsew')
x_sb.grid(column=0,row=1,sticky='ew')
y_sb.grid(column=1,row=0,sticky='ns')
self.columnconfigure(0,weight=1)
self.rowconfigure(0,weight=1)
self.text = text
self.x_sb = x_sb
self.y_sb = y_sb
def fileopen():
global fname,textframe,root
fname = filedialog.askopenfilename()
f = open(fname,'r')
lines = f.readlines()
f.close()
textframe.text.delete('1.0','end')
for line in lines:
textframe.text.insert('end',line)
root.title('editor - '+fname)
def filesave():
global fname,textframe
if fname == '':
return
f = open(fname,'w')
lines = textframe.text.get('1.0','end-1c')
f.writelines(lines)
f.close()
def main():
global fname,textframe,root
fname = ''
root = tk.Tk()
root.title('editor')
root.geometry('400x300')
textframe = SbTextFrame(root)
textframe.pack(side='top',fill='both',expand=True)
menubar = tk.Menu(root)
filemenu = tk.Menu(menubar,tearoff=0)
filemenu.add_command(label='Open',command=fileopen)
filemenu.add_command(label='Save',command=filesave)
filemenu.add_command(label='Exit',command=exit)
menubar.add_cascade(label='File',menu=filemenu)
root.config(menu=menubar)
root.mainloop()
if __name__ == '__main__':
main()
Cette fois, j'ai créé une application graphique simple en Python. C'était un peu ennuyeux d'ajouter des barres de défilement verticales et horizontales au widget de texte, alors j'ai essayé d'en faire une classe afin qu'elle puisse être réutilisée à l'avenir. Je pense que c'est utile lors de la création d'une application qui utilise fortement des widgets de texte avec des barres de défilement verticales et horizontales.
Recommended Posts