Erstellen Sie in Tkinter eine einfache App mit Registerkarten. Es wurde ein Fenster mit Registerkarten für die App "Edita" eingeführt, die in der vorherigen "Easy GUI App mit Tkinter Text" erstellt wurde, um mehrere Dateien zu bearbeiten. Mach es möglich. Verwenden Sie das Notebook-Widget des Moduls tkinter.ttk, um ein Fenster mit Registerkarten zu erstellen.
Es ist eine App im "Editor" -Stil, die Fenster mit Registerkarten verwendet.
Importieren Sie tkinter und tkinter.ttk.
import tkinter as tk
import tkinter.ttk as ttk
Erstellen Sie ein Notizbuch und platzieren Sie es im App-Fenster.
root = tk.Tk()
notebook = ttk.Notebook(root)
notebook.pack(fill='both',expand=1)
Erstellen Sie einen Rahmen, der auf der Registerkarte platziert werden soll, und fügen Sie die Registerkarte mit Notebook.add () hinzu. Wenn Sie es so lassen, wie es ist, wird die hinzugefügte Registerkarte dahinter ausgeblendet. Verwenden Sie daher Notebook.select (), um es nach vorne zu bringen. Notebook.tabs () gibt eine tab_id-Liste zurück und Notebook.index ('end') gibt die Anzahl der Tabs zurück. Reduzieren Sie daher die Anzahl der Tabs um -1 und übergeben Sie die letzte tab_id in der Liste an Notebook.select ().
frame=tk.Frame(notebook)
notebook.add(frame,text='title')
notebook.select(notebook.tabs()[notebook.index('end')-1])
Gibt die tab_id der von Notebook.select () ausgewählten Registerkarte ohne Argumente zurück. Sie können die Anzahl der hinzugefügten Registerkarten überprüfen, indem Sie die für die index () -Methode der von Notebook.tabs () zurückgegebenen tab_id-Liste ausgewählte tab_id als Argument verwenden.
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()
Dieses Mal habe ich eine App im "Editor" -Stil erstellt, die Fenster mit Registerkarten verwendet. Wenn Sie mehrere Fenster verwenden, nicht nur den "Editor", ist es hilfreich, Registerkarten zu verwenden, um den Bildschirm sauberer zu gestalten.
Recommended Posts