我应该如何填充条目窗口小部件,以使它无法立即在窗口小部件的边界处开始书写?视觉上,与入口小部件边框之间的空间很小。
我的进度:
entry_widget.bind('<FocusIn>', lambda f: entry_widget.insert(0, ' '))
当用户单击窗口小部件时,这会添加一个空白空间,但是此解决方案存在多个问题:
当单击并再次单击时,它将在空白区域或用户填写的任何文本的顶部添加另一个空间。我考虑过清除FocusOut
上的输入小部件,但这也会清除用户可能已经写过的所有文本。
用户可以删除插入的空格
获取内容时,开头会有额外的空间。尽管这是一个小问题,但可以通过删除内容的第一个字符来解决。
可能还有更多我没有考虑的问题。
我认为我的代码前进的方向不好,因此我问是否有人知道如何“正确地”填充条目小部件?
答案 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()
结果:
答案 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)