Python Tkinter输入板文本

时间:2018-08-13 12:50:50

标签: python tkinter tkinter-entry pad

我应该如何填充条目窗口小部件,以使它无法立即在窗口小部件的边界处开始书写?视觉上,与入口小部件边框之间的空间很小。

我的进度:

entry_widget.bind('<FocusIn>', lambda f: entry_widget.insert(0, ' '))

当用户单击窗口小部件时,这会添加一个空白空间,但是此解决方案存在多个问题:

  1. 当单击并再次单击时,它将在空白区域或用户填写的任何文本的顶部添加另一个空间。我考虑过清除FocusOut上的输入小部件,但这也会清除用户可能已经写过的所有文本。

  2. 用户可以删除插入的空格

  3. 获取内容时,开头会有额外的空间。尽管这是一个小问题,但可以通过删除内容的第一个字符来解决。

可能还有更多我没有考虑的问题。

我认为我的代码前进的方向不好,因此我问是否有人知道如何“正确地”填充条目小部件?

5 个答案:

答案 0 :(得分:3)

我不知道调整Entry填充的原生方法,但是这是一种获取类似内容的方法。通过给其FLAT样式,使条目的边框不可见,并将该条目嵌入到充当条目边框的Frame中。然后,您可以通过调整条目的borderwidth来指定填充。示例:

import tkinter as tk

root = tk.Tk()
frame = tk.Frame(root, borderwidth=5, relief=tk.SUNKEN)
frame.pack()
entry = tk.Entry(frame, borderwidth=15, relief=tk.FLAT)
entry.pack()
root.mainloop()

结果:

code

答案 1 :(得分:2)

我遇到了这个问题,经过一番挖掘,我发现您可以在内部填充ttk的Entry小部件:

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

ttk.Style().configure('pad.TEntry', padding='5 1 1 1')
ent = ttk.Entry(root, style='pad.TEntry')
ent.pack()

root.mainloop()

其中'5 1 1 1'是像素的“ ipad_left ipad_top ipad_right ipad_bottom”(默认为'1 1 1 1')。使用'TEntry'参数确实会更改每个ttk.Entry的样式,因此,如果要避免这种情况,可以创建新样式:

ttk.Style().configure('pad.TEntry', padding='5 1 1 1')
ent1 = ttk.Entry(root, style='pad.TEntry')
ent2 = ttk.Entry(root)

ent1会有多余的填充,而ent2不会有多余的填充。

我发现通过运行print(Style().configure('TEntry'))存在的'padding'选项可以返回TEntry的所有样式选项(在本例中为'padding')。但这带来了一个问题。 ttk的小部件通常没有很多可用的自定义选项(TEntry缺少背景,边框宽度,浮雕等),这意味着您必须“创建”它们。有关更多信息,请参见以下链接:ttk widgets || Using and customizing ttk styles || ttk.Entry information || (example) adding fieldbackground to ttk.Entry

答案 2 :(得分:0)

这是一个简单的示例,说明如何在用户键入内容时强制使用空格开头并进行绑定,然后保留该空格。

import tkinter as tk

root = tk.Tk()

def check_for_space(event):
    if entry.get() == "":
        entry.insert(0, " ")
    elif entry.get()[0] != " ":
        entry.insert(0, " ")
    else:
        pass

entry = tk.Entry(root)
entry.insert(0, " ")
entry.pack()
entry.bind("<Key>", check_for_space)

root.mainloop()

答案 3 :(得分:0)

使用tkinter 8.6U

entry.config(padx = 15)

答案 4 :(得分:0)

我在程序中使用padx =一个数字,得到了我想要的填充。就我而言,带有文本框。参见下面的第三行:

text_B = Text(mdle2, width=48, borderwidth=5, height=10, wrap=WORD)
text_B.grid(row=3, rowspan=4, column=0, columnspan=3, sticky=W, padx=85, pady=3)
text_B.config(padx=10)