Hi,
zwei Fragen:
a) Gibt es eine Möglichkeit einen vertikalen Scrollbalken (Tkinter Scrollbar) ganz nach unten zu setzen?
b) Gibt es eine Möglichkeit, dass ein Benutzer nur ganz am Ende eines Tkinter Textwidget Text eingeben kann
mfg pysq
Scrollbar + Text Widget
Damit ich es richtig verstehe: Der Scrollbalken an sich soll vermutlich rechts (oder links) sein, du möchtest aber, dass die Marke (Slider) ganz nach unten gezogen ist Richtig?pysq hat geschrieben:Hi,
zwei Fragen:
a) Gibt es eine Möglichkeit einen vertikalen Scrollbalken (Tkinter Scrollbar) ganz nach unten zu setzen?
b) Gibt es eine Möglichkeit, dass ein Benutzer nur ganz am Ende eines Tkinter Textwidget Text eingeben kann
mfg pysq
"Ganz am Ende" soll heißen: Es ist schon Text drin und nach dem der Text drin ist (z.B. aus einer Datei geladen), soll der Eingabe-Cursor ans Ende dieses Textes gesetzt werden. Richtig?
Code: Alles auswählen
import Tkinter as tk
from random import randrange
root = tk.Tk()
editor = tk.Text(root)
editor.pack(side=tk.LEFT,fill=tk.BOTH,expand=True)
scroll_y = tk.Scrollbar(root,command=editor.yview)
scroll_y.pack(side=tk.LEFT,fill=tk.Y)
editor.config(width=30,padx=5,pady=5,yscrollcommand=scroll_y.set)
for k in range(200):
editor.insert("end",str(randrange(1000))*randrange(20)+"\n")
editor.see("end")
editor.focus_set()
root.mainloop()
ich will wie gesagt die Texteingabe nur am Ende des Textwidgets ermöglichen. Ich habe mittlerweile auch eine Idee, wie ich das realisieren könnte:
Eingabe über eine Tkinter StringVar kontrollieren, und mit deren trace Methode eine Funktion, die die Eingabe (also ob am Ende) kontrolliert, einbinden. Das Problem ist allerdings, das der Text in Tkinter.Text sich standardmäßig nicht über eine StringVar kontrollieren lässt. Gibt es eine Möglichkeit das zusammenzubasteln?
mfg pysq
Eingabe über eine Tkinter StringVar kontrollieren, und mit deren trace Methode eine Funktion, die die Eingabe (also ob am Ende) kontrolliert, einbinden. Das Problem ist allerdings, das der Text in Tkinter.Text sich standardmäßig nicht über eine StringVar kontrollieren lässt. Gibt es eine Möglichkeit das zusammenzubasteln?
mfg pysq
Ich dachte, ich hätte verstanden, was du meinst ...ich will wie gesagt die Texteingabe nur am Ende des Textwidgets ermöglichen.
Neuer Versuch: Mein Codeschnipsel unterscheidet sich in seiner Funktionalität von dem, was du willst, allein dadurch, dass du verhindern möchtest, dass an dem schon vorhandenen Text irgendetwas geändert wird, und nur noch Inhalte - am Ende - hinzugefügt werden können.
Oder soll das ganze Textfenster leer sein und man soll (nur) in die letzte Zeile schreiben können?
Vielleicht ist ein Text-Widget auch nicht der richtige Ansatz.
Beschreib doch mal, was du damit erreichen/realisieren willst.
kurzum, so eine Art Idle nachprogrammieren.
das einzige was mir noch fehlt ist, dass die Benutzereingaben nur am Ende stattfinden können, und der restliche text darf nicht mehr editierbar sein.
Ich habe mir die PyShell.py angeguckt, seh aber ehrlich gesagt an dieser Stelle nicht durch.
mfg
das einzige was mir noch fehlt ist, dass die Benutzereingaben nur am Ende stattfinden können, und der restliche text darf nicht mehr editierbar sein.
Ich habe mir die PyShell.py angeguckt, seh aber ehrlich gesagt an dieser Stelle nicht durch.
mfg
Dann wirst du entsprechende Tastatur- und auch Mausereignisse abfangen und wie gewünscht behandeln müssen.
Ein anderer Ansatz wäre dieser:
Wenn du dich damit begnügen könntest, wäre die Umsetzung um einiges einfacher, als wenn du alles in einem Text-Widget abfängst.
Ein anderer Ansatz wäre dieser:
Code: Alles auswählen
import Tkinter as tk
def enter(event):
shell.config(state=tk.NORMAL)
shell.insert("end",inline.get()+"n")
shell.config(state=tk.DISABLED)
inline.delete("0","end")
root = tk.Tk()
shell = tk.Text(root,bd=0,highlightthickness=0,state=tk.DISABLED)
shell.pack(expand=True,fill=tk.BOTH)
inline = tk.Entry(root,bd=0,highlightthickness=0)
inline.pack(fill=tk.X)
inline.bind("<KeyRelease-Return>",enter)
inline.focus_set()
root.mainloop()