Erstellen Sie mit Tkinter aus Python eine einfache GUI-App, die wie ein "Texteditor" aussieht. Wir haben ein Text-Widget und eine Bildlaufleiste integriert, um es zu einer Klasse für die einfache Wiederverwendung zu machen.
Es ist eine einfache Anwendung im "Texteditor" -Stil.
Importieren Sie zuerst, um Tkinter, die Standard-Python-GUI-Bibliothek und den Dateidialog zu verwenden.
import tkinter as tk
from tkinter import filedialog
Erstellen Sie eine Textrahmenklasse mit einer Bildlaufleiste. Klassen werden aus Frames abgeleitet, um Text-, vertikale und horizontale Bildlaufleisten zu erstellen und diese mithilfe eines Rasters auf dem Basisrahmen zu platzieren.
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
Überspringen Sie fileopen () und filesave () und springen Sie zur Erklärung von main (). Erstellen Sie zu Beginn von main () ein Anwendungsfenster und legen Sie den Titel und die Fenstergröße fest.
def main():
root = tk.Tk()
root.title('editor')
root.geometry('400x300')
Erstellen Sie dann einen Textrahmen mit einer Bildlaufleiste und platzieren Sie ihn im gesamten Anwendungsfenster. Mit "expand = True" ändert sich die Größe des Textrahmens entsprechend der Fenstergröße.
textframe = SbTextFrame(root)
textframe.pack(side='top',fill='both',expand=True)
Erstellen Sie ein Dateimenü und platzieren Sie es in der Menüleiste des Anwendungsfensters.
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)
Der gesamte Quellcode lautet wie folgt.
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()
Diesmal habe ich eine einfache GUI-App in Python erstellt. Es war etwas ärgerlich, dem Text-Widget vertikale und horizontale Bildlaufleisten hinzuzufügen, deshalb habe ich versucht, es zu einer Klasse zu machen, damit es in Zukunft wiederverwendet werden kann. Ich denke, es ist nützlich, wenn Sie eine App erstellen, die Text-Widgets mit vertikalen und horizontalen Bildlaufleisten stark nutzt.
Recommended Posts