[PYTHON] App mit Registerkarten in Tkinter

Einführung

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.

Vollständiges Bild

Es ist eine App im "Editor" -Stil, die Fenster mit Registerkarten verwendet. tabedit.png

Kommentar

importieren

Importieren Sie tkinter und tkinter.ttk.

import tkinter as tk
import tkinter.ttk as ttk

Notizbuch erstellen

Erstellen Sie ein Notizbuch und platzieren Sie es im App-Fenster.

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

Registerkarte hinzufügen

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

Ausgewählte Registerkarte

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

Alle Quellcode

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

abschließend

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

App mit Registerkarten in Tkinter
Betten Sie das Matplotlib-Diagramm in Tkinter ein
[Python] Mit Tkinter mehrere Fenster anzeigen
Implementieren Sie einen Datumssetzer in Tkinter
Legen Sie das Modul in die Pepper-App
Einfache GUI App mit Tkinter Text
GUI-Erstellung in Python mit tkinter 2
GUI-Erstellung in Python mit tkinter Teil 1
Erstellen einer Bildaufteilungs-App mit Tkinter
Erstellen Sie eine einfache GUI-App in Python
Erstellen Sie eine GUI-App mit Tkinter of Python
Erstellen Sie eine Python-GUI-App in Docker (PySimpleGUI).
Starten Sie eine Flask-App in Python Anywhere
Tkinter konnte nicht in Python importiert werden
Setzen Sie Tkinter in Macbook ein und überprüfen Sie den Betrieb