Application GUI facile avec Tkinter Text

introduction

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.

Image complète

C'est une simple application de style "éditeur de texte". editor.gif

Commentaire

importer

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

Classe de cadre de texte

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

Fenêtre d'application

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')

Placement du texte

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éation de menu

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)

Code source complet

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()

en conclusion

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

Application GUI facile avec Tkinter Text
Rendez les applications GUI super faciles avec tkinter
Créer une application graphique avec Tkinter de Python
Créez une application graphique native avec Py2app et Tkinter
Créer une application de fractionnement d'image avec Tkinter
Application Web facile avec Python + Flask + Heroku
MVC avec Tkinter
Débutant du développement d'applications GUI Raspberry Pi facile, partie 1
Créer un fichier exécutable GUI créé avec tkinter
Outil de rognage d'image GUI réalisé avec Python + Tkinter
Automatisation de l'interface graphique avec le pilote d'application Python x Windows
Débutant du développement d'applications GUI Raspberry Pi facile, partie 2
Télécharger des images sur S3 avec une interface graphique à l'aide de tkinter
Easy Grad-CAM avec pytorch-gradcam
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
Application utilisant des onglets dans Tkinter
Devenez Père Noël avec Tkinter
Text mining avec Python-Scraping-
Créons une application Mac avec Tkinter et py2app
Pythonbrew avec Sublime Text
[Tkinter] Améliorez la réactivité de l'interface graphique
Débogage facile avec ipdb
TopView facile avec OpenCV
Créer une interface graphique aussi facilement que possible avec python [édition tkinter]
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Programmation avec Python et Tkinter
Application Todo avec le plugin django-bootstrap-modal-forms
Environnement toxique facile avec Jenkins
Introduction à Tkinter 2: Button
[Analyse de co-occurrence] Analyse de co-occurrence facile avec Python! [Python]
Synchronisation facile des dossiers avec Python
Changement d'écran / transition d'écran avec Tkinter
Grattage Web facile avec Scrapy
Créer une visionneuse d'images avec Tkinter
[GUI en Python] PyQt5-Layout management-
Exécuter Label avec tkinter [Python]
Compilation facile de Python avec NUITKA-Utilities
Serveur HTTP facile avec Python
Connexion proxy facile avec django-hijack
J'ai mesuré l'IMC avec tkinter
[GUI avec Python] PyQt5-Préparation-
Analyse des émotions par SMS avec ML-Ask
Jouez avec A3RT (texte suggéré)
[GUI avec Python] PyQt5 -Paint-
Azure Monitor détermine à la fois la surveillance du cloud et la surveillance sur site! Facile avec GUI!