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.
C'est une application de style "éditeur" qui utilise une fenêtre à onglets.
Importez tkinter et tkinter.ttk.
import tkinter as tk
import tkinter.ttk as ttk
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)
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])
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())
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()
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