Python tkinter入口小部件,将点保持在固定位置

时间:2018-08-14 14:54:00

标签: tkinter

我制作了一个GUI,其中有四个输入字段,并且必须将键盘符号点(。)固定在光标位置3,7和11 上。用户输入任何值符号点(。)时都必须在其固定位置处,但无论输入的值是什么。但是在我的情况下,我在三个位置的开头都得到了一个点符号而且该点符号正在改变其位置,因此任何人都可以在下面给出的代码中帮助我解决此问题。

from tkinter import *
root = Tk()
e1=Entry(root, width=15, background='white',
                                   font='-weight bold')
e2= Entry(root, width=15, background='white',
                            font='-weight bold')
e3= Entry(root, width=15, background='white',
                                font='-weight bold')
e4= Entry(root, width=15, background='white',
                                   font='-weight bold')

e1.grid(padx=10, pady=5, row=0, column=1)
e2.grid(padx=10, pady=5, row=1, column=1)
e3.grid(padx=10, pady=5, row=2, column=1)
e4.grid(padx=10, pady=5, row=3, column=1)

entries=[e1,e2,e3,e4]

for widget in entries:
    for i in range(3,12,4):
        widget.insert(i,'.')

root.mainloop()

I have to make ENTRY Filed like this

1 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案是创建一个自定义小部件,该小部件由四个长度为3的Entry小部件以及三个Label点的小部件组成,所有小部件都位于{{1}内},用于提供边框。

例如:

Frame

您可以像使用其他任何小部件一样使用它:

class IPEntry(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent, borderwidth=1, relief="sunken",
                          background="white")
        self.entries = []
        for i in range(4):
            entry = tk.Entry(self, width=3, borderwidth=0,
                             justify="center",
                             highlightthickness=0, background="white")
            entry.pack(side="left")
            self.entries.append(entry)

            if i < 3:
                dot = tk.Label(self, text=".", background="white")
                dot.pack(side="left")

    def get(self):
        return ".".join([entry.get() for entry in self.entries])

上面将创建一个看起来像这样的窗口:

screenshot

要以字符串形式获取值,请调用root = tk.Tk() field = IPEntry(root) field.pack(side="top") 方法:

get

要提供更愉快的用户体验,您可能应该添加输入验证以仅允许数字,并且每个条目小部件最多允许三个。您还可以添加代码,以在用户在字段中输入三位数后将光标移动到下一个字段,如果用户在输入字段的开头按了退格键,则将光标移动到上一个字段。