[PYTHON] Application utilisant des onglets dans Tkinter

introduction

Créez une application simple avec des fenêtres à onglets dans Tkinter. Introduction d'une fenêtre à onglets pour l'application de style "Edita" créée dans la précédente "Application GUI facile avec texte Tkinter" pour éditer plusieurs fichiers. Rend le possible. Utilisez le widget Notebook du module tkinter.ttk pour créer une fenêtre à onglets.

Image complète

C'est une application de style "éditeur" qui utilise une fenêtre à onglets. tabedit.png

Commentaire

importer

Importez tkinter et tkinter.ttk.

import tkinter as tk
import tkinter.ttk as ttk

Créer un cahier

Créez un bloc-notes et placez-le dans la fenêtre de l'application.

root = tk.Tk()
notebook = ttk.Notebook(root)
notebook.pack(fill='both',expand=1)

Ajouter un onglet

Créez un cadre à placer sur l'onglet et ajoutez l'onglet avec Notebook.add (). Si vous le laissez tel quel, l'onglet ajouté est caché derrière lui, utilisez donc Notebook.select () pour l'amener au premier plan. Notebook.tabs () renvoie une liste tab_id et Notebook.index ('end') renvoie le nombre d'onglets, donc réduisez le nombre d'onglets de -1 et passez le dernier tab_id de la liste à Notebook.select ().

frame=tk.Frame(notebook)
notebook.add(frame,text='title')
notebook.select(notebook.tabs()[notebook.index('end')-1])

Onglet sélectionné

Renvoie le tab_id de l'onglet sélectionné par Notebook.select () sans argument. Vous pouvez vérifier le nombre d'onglets ajoutés en utilisant le tab_id sélectionné pour la méthode index () de la liste tab_id renvoyée par Notebook.tabs () comme argument.

idx=notebook.tabs().index(notebook.select())

Tout le code source

import os
import tkinter as tk
from tkinter import ttk
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 add_tab(fname):
    global tframes,fnames,notebook
    tframe=SbTextFrame(notebook)
    tframes.append(tframe)
    if os.path.isfile(fname):
        f=open(fname,'r')
        lines=f.readlines()
        f.close()
        for line in lines:
            tframe.text.insert('end',line)
    fnames.append(fname)
    title=os.path.basename(fname)
    notebook.add(tframe,text=title)
    notebook.select(notebook.tabs()[notebook.index('end')-1])

def fileopen():
    fname = filedialog.askopenfilename()
    add_tab(fname)

def filesave():
    global tframes,fnames,notebook
    idx = notebook.tabs().index(notebook.select())
    fname = fnames[idx]
    tframe = tframes[idx]
    f = open(fname,'w')
    f.writelines(tframe.text.get('1.0','end-1c'))
    f.close()

def main():
    global root,notebook,tframes,fnames
    root = tk.Tk()
    root.title('tabbed editor')
    root.geometry('400x300')
    notebook = ttk.Notebook(root)
    notebook.pack(fill='both',expand=1)
    tframes = []
    fnames = []
    add_tab('new')
    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 de style "éditeur" qui utilise des fenêtres à onglets. Lorsque vous utilisez plusieurs fenêtres, pas seulement "l'éditeur", il est agréable d'utiliser des onglets pour nettoyer l'écran.

Recommended Posts

Application utilisant des onglets dans Tkinter
Intégrer le graphe matplotlib dans Tkinter
[Python] Afficher plusieurs fenêtres avec Tkinter
Implémenter un paramètre de date dans Tkinter
Mettez le module dans l'application Pepper
Application GUI facile avec Tkinter Text
Création d'interface graphique en python avec tkinter 2
Création d'interface graphique en python à l'aide de tkinter partie 1
Créer une application de fractionnement d'image avec Tkinter
Créer une application GUI simple en Python
Créer une application graphique avec Tkinter de Python
Créer une application Python-GUI dans Docker (PySimpleGUI)
Lancer une application Flask dans Python Anywhere
Tkinter n'a pas pu être importé en Python
Mettez Tkinter dans Macbook et vérifiez le fonctionnement