检查Python(3.4)Tkinter条目是否已满

时间:2016-07-18 17:42:32

标签: python tkinter directory tkinter-entry

我使用标准的tkinter条目来输入目录路径。当用户按下回车键时 - 如果字符串的物理长度超过条目的长度,我希望程序将显示的文本修改为... [目录结尾]。我有这个想法的后勤,但到目前为止我没有准确的方法来测试输入框是否已满或者有多满

我尝试过的事情:

  • 使用'PIL.ImageFont.truetype(“font.otp”,fontsize).size' - 无法计算剪切目录的点
  • 简单地使用字符串的长度与条目的长度不一致 - 因为我正在使用的字体(如果可能,我不想改变),每个字符的长度不同

我尝试的另一个折衷行为是让条目“看起来”在路径的开头。我尝试插入,选择并将光标移动到位置0,但没有一个工作

1 个答案:

答案 0 :(得分:1)

您可以使用Entry的{​​{3}}方法。 xview返回条目中显示的文本的可见部分。您可以使用它以交互方式创建适合条目的文本。

这是一个快速而肮脏的概念证明

from tkinter import *

root = Tk()

v = StringVar(root)
e = Entry(root,textvariable=v)
e.pack(fill=BOTH)
v.set('abcdefghijklmnopqrstuvwxyz0123456789')

new_s = None

def check_length():
    global new_s
    original_s = v.get()

    def shorten():
        global new_s
        e.xview(0)
        if e.xview()[1] != 1.0:
            new_s = new_s[:-4] + '...'
            v.set(new_s)
            print("new_s: " + new_s)
            e.xview(0)
            e.after(0,shorten)
            print(e.xview()[1])
    if e.xview() != (0.0,1.0):
        new_s = original_s + '...'
        shorten()

b = Button(root,text="hop",command=check_length)
b.pack()

e.mainloop()