Hallo,
wie kann ich in einem Entry den String rechtsbündig ausgeben wenn der String länger ist als das Entry?
Ich habe zwei Entries welche jeweils einen Pfad enthalten und damit schnell länger werden als das Entry.
Da mich bei den Pfaden nur die letzten ein- zwei directories unterschiedlich sind, hätte ich gerne diese
auch im Display.
Ich habe justify=RIGHT gesetzt, und wenn der Pfad kurz ist und ins Entry passt wird er auch rechtsbündig
angezeigt. Wird der Pfad jedoch länger als das Entry, ist er grundsätzlich linksbündig,
sprich [c:\bla\bla]h\fasel statt c:\bla\[blah\fasel] - die Eckigen Klammern symbolisieren den Darstellungsbereich des Entry's
Entry justify für lange strings
@thaloss
Ich würde dafür die `Tkinter.Entry.icursor()` und `Tkinter.Entry.xview()` Methoden nutzen:
mutetella
Ich würde dafür die `Tkinter.Entry.icursor()` und `Tkinter.Entry.xview()` Methoden nutzen:
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
entry = tk.Entry(root, width=15)
entry.insert(0, r'c:\this\is\a\very\long\path\to\any\location')
entry.icursor(tk.END)
entry.pack()
entry.xview(tk.END)
entry.focus()
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@mutetella
Danke, dein Programm funktioniert, aber in meinem nicht, liegt wahrscheinlich daran das ich ein ttk Entry mit Textvariable verwende
file_dir hält den Pfad für die interne Benutzung und wird entweder aus dem ini file gelesen oder per filedialog selektiert.
Ich habe die icursor und xview anweisungen beim definieren des Entry's angegeben. Siehe oben, hat aber keinen Effekt.
Achso ich bin mit python 3.4 unterwegs.
Danke, dein Programm funktioniert, aber in meinem nicht, liegt wahrscheinlich daran das ich ein ttk Entry mit Textvariable verwende
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import simpledialog
import os
import os.path as Path
import configparser
#[...]
file_dir_var = tk.StringVar()
#[...]
file_dir_var.set(file_dir) # file_dir wurde per configparser aus ini file gelesen
#[...]
file_btn = ttk.Button(locset, text='directory', command=LOC_filedir, width=16)
file_btn.grid(column=0, row=0, padx=10, pady=3)
file_ent = ttk.Entry(locset, textvariable=loc_file_dir_var, state="readonly", justify='right')
file_ent.grid(column=1, row=0, padx=2, pady=3, sticky='ew')
file_ent.icursor(tk.END)
file_ent.xview(tk.END)
#[...]
def LOC_filedir():
global file_dir
try: # try to open the directory
ld = Path.normpath(filedialog.askdirectory())
if (ld != '') and Path.isdir(ld) :
file_dir = ld
file_ent.configure(foreground='blue')
cnf_ver.set('Config unsaved')
else : # invalid Path
file_dir = 'Not a directory'
except PermissionError: # No permissin on directory
file_dir = 'No permission'
file_dir_var.set(file_dir)
return file_dir
Ich habe die icursor und xview anweisungen beim definieren des Entry's angegeben. Siehe oben, hat aber keinen Effekt.
Achso ich bin mit python 3.4 unterwegs.
"In jedem kleinen Problem steckt ein großes das gerne raus will"
@thaloss
Keine Ahnung weshalb, aber `ttk.Entry.xview()` akzeptiert im Gegensatz zum `tk` Pendant kein `tk.END` als Argument. Wenn Du stattdessen die Länge des Pfadstrings verwendest, sollte es klappen:
mutetella
Keine Ahnung weshalb, aber `ttk.Entry.xview()` akzeptiert im Gegensatz zum `tk` Pendant kein `tk.END` als Argument. Wenn Du stattdessen die Länge des Pfadstrings verwendest, sollte es klappen:
Code: Alles auswählen
Python 3.3.4 (default, Feb 9 2014, 12:04:33)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter as tk
>>> from tkinter import ttk
>>> root = tk.Tk()
>>> entry = ttk.Entry(root, width=15, justify=tk.RIGHT)
>>> path = r'c:\this\is\a\very\long\path\to\any\location'
>>> entry.insert(0, path)
>>> entry.icursor(tk.END)
>>> entry.pack()
>>> entry.xview(len(path))
>>> entry.focus()
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@mutetella
Yepp, Danke funktioniert mit dem len(path). Es reicht sogar nur der die Zeile
file_ent.xview(len(loc_file_dir))
hinter dem setzen der Textvariable um das Pfadende darzustellen.
Danke nochmals
Yepp, Danke funktioniert mit dem len(path). Es reicht sogar nur der die Zeile
file_ent.xview(len(loc_file_dir))
hinter dem setzen der Textvariable um das Pfadende darzustellen.
Danke nochmals
"In jedem kleinen Problem steckt ein großes das gerne raus will"