Nur musste ich wieder von Text direkt ableiten, wegen der Horizontalen, sieht also wieder etwas komplexer aus.
Aber ich habe es gleich nochmal "schön" gemacht

Sie dir bitte genau an was ich gemacht habe, und frage wenn du etwas nicht verstehst.
Code: Alles auswählen
#!/usr/bin/env python
from datetime import datetime
from Tkconstants import *
import Tkinter as tkinter
class MyScrolledText(tkinter.Text):
"""Ein Text-Widget, mit einer vertikalen und horizontalen Scrollbar.
@type text: str
@ivar text: Beinhaltet den Text, welcher beim Aufruf der create-Methode in
das Text-Widget geschrieben wird.
@type frame: tkinter.Frame
@ivar frame: Der Frame, auf welchem das Text-Widget und die Scrollbars
gepackt werden.
@type vbar: tkinter.Scrollbar
@ivar vbar: Die vertikale Scrollbar.
@type hbar: tkinter.Scrollbar
@ivar hbar: Die horizontale Scrollbar.
"""
def __init__(self, master, rows, columns, cnf=()):
"""Initialisiert eine neue Instanz von MyScrolledText.
@type master: tkinter.Widget
@param master: Das \xdcbergeordnete Widget, auf welches das Text-Widget
gepackt werden soll.
@type rows: int
@param rows: Die Anzahl der sichtbaren Zeilen des Text-Widgets.
@type columns: int
@param columns: Die Anzahl der sichtbaren Spalten des Text-Widgets.
@type cnf: dict
@param cnf: Weitere Optionen, welche an das tkinter.Text Widget weiter
gegeben werden sollen.
"""
self.frame = tkinter.Frame(master)
self.vbar = tkinter.Scrollbar(self.frame)
self.hbar = tkinter.Scrollbar(self.frame, orient=HORIZONTAL)
self.vbar.pack(side=RIGHT, fill=Y)
self.hbar.pack(side=BOTTOM, fill=X)
cnf["width"] = columns
cnf["height"] = rows
cnf.update({"yscrollcommand": self.vbar.set})
cnf.update({"xscrollcommand": self.hbar.set})
tkinter.Text.__init__(self, self.frame, cnf)
self.pack(side=LEFT, fill=BOTH, expand=YES)
self.vbar.configure(command=self.yview)
self.hbar.configure(command=self.xview)
methods = vars(tkinter.Pack).keys()
methods += vars(tkinter.Grid).keys()
methods += vars(tkinter.Place).keys()
for m in methods:
if m[0] != '_' and m != 'config' and m != 'configure':
setattr(self, m, getattr(self.frame, m))
self.text = ""
def create(self, first=0, last=0):
"""Setzt den entsprechenden Text in das Text-Widget.
Ben\xf6tigt first und last als Angaben um zu gro\xdfe Texte
einzuschr\xe4nken.
Bei keiner Beschr\xe4nkung, wird der gesamte Text angezeigt.
@type first: int
@param first: Index des ersten Zeichens von dem aus der Text angezeigt
werden soll.
@type last: int
@param last: Index des letzten Zeichens welches vom Text angezeigt werden
soll.
"""
self.config(state=NORMAL)
self.delete(1.0, END)
if first == 0 and last == 0:
self.insert(END, self.text)
else:
self.insert(END, self.text[first:last])
self.config(state=DISABLED)
def text_from_file(self, textfile):
"""L\xe4dt einen Text aus einer Datei und zeigt diesen an.
@type textfile: str
@param textfile: Der Pfad zur Textdatei.
"""
with open(textfile) as view_file:
self.text = view_file.read()
self.create()
if __name__ == "__main__":
root = tkinter.Tk()
root.option_add("*font", ("courier",7,"bold"))
print(datetime.now().strftime("%H:%M:%S"))
text_options = { "bg" : "#333333",
"fg" : "#FFFFFF",
"cursor" : "xterm",
"wrap" : NONE
}
display = MyScrolledText(root, 50, 110, text_options)
display.text_from_file("test.txt")
display.pack()
scrollbar_options = { "bg" : "#999999",
"activebackground" : "#555555",
"troughcolor" : "#333333"
}
display.vbar.configure(scrollbar_options)
display.hbar.configure(scrollbar_options)
print(datetime.now().strftime("%H:%M:%S"))
root.mainloop()