我试图创建一组弹出窗口来确定不同数量的xy坐标

2024-09-19 23:16:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一系列两个弹出窗口,第一个窗口将确定用户将输入的坐标数,第二个窗口将允许用户输入精确的坐标数

第一个弹出窗口的代码如下所示:

root = Tk()
root.title("User Inputs")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

numofcoord = StringVar()

numofcoord = ttk.Entry(mainframe, width=7, textvariable=numofcoord)
numofcoord.grid(column=2, row=1, sticky=(W, E))

ttk.Button(mainframe, text="OK", command=user_coordinates).grid(column=1,    row=2, sticky=W)
ttk.Button(mainframe, text="CANCEL", command=quit).grid(column=2, row=2, sticky=W)

ttk.Label(mainframe, text="Number of Coordinates").grid(column=1, row=1, sticky=W)

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

root.mainloop()

第一部分工作,但在第二部分,我的弹出窗口看起来像这样,行数由第一个弹出窗口中的输入决定

http://i.imgur.com/dToI2qX.png

第二部分的代码如下所示:

try:
    noc = int(numofcoord.get())
    root = Tk()
    root.title("User Defined Coordinates")

    mainframe = ttk.Frame(root, padding="3 3 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)

    x = StringVar()
    y = StringVar()

    ttk.Label(mainframe, text="X").grid(column=1, row=1, sticky=(W, E))
    ttk.Label(mainframe, text="Y").grid(column=2, row=1, sticky=(W, E))

    for i in range(2, noc + 2):
        xcoord = ttk.Entry(mainframe, width=7, textvariable=x)
        xcoord.grid(column=1, row=i, sticky=(W, E))

        ycoord = ttk.Entry(mainframe, width=7, textvariable=y)
        ycoord.grid(column=2, row=i, sticky=(W, E))

    ttk.Button(mainframe, text="OK", command=test).grid(column=1, row=noc + 3, sticky=W)
    ttk.Button(mainframe, text="CANCEL", command=quit).grid(column=2, row=noc + 3, sticky=W)

    for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

    root.mainloop()

except ValueError:
    pass

问题是,在中,当您在X或Y列中放置一个值时,该列中的每个框都将填充该值,我希望每行都是一组坐标


Tags: textchildcolumnbuttonrootcommandgridrow
1条回答
网友
1楼 · 发布于 2024-09-19 23:16:44

问题是所有的条目小部件共享相同的StringVar。您需要为每个条目小部件创建一个StringVar的新实例。不过,您根本不需要使用StringVar。您真正需要做的就是保留对每个条目小部件的引用

例如:

x_entries = []
y_entries = []

for i in range(2, noc + 2):
    xcoord = ttk.Entry(mainframe, width=7)
    xcoord.grid(column=1, row=i, sticky=(W, E))

    ycoord = ttk.Entry(mainframe, width=7)
    ycoord.grid(column=2, row=i, sticky=(W, E))

    x_entries.append(xcoord)
    y_entries.append(ycoord)

稍后,您可以得到如下值:

print("first pair: ", x_entries[0].get(), y_entries[0].get())

您可以通过使用StringVar来做同样的事情,但在大多数情况下,这会增加复杂性,因为它会给您提供更多要管理的对象,但不会带来任何实际好处

举个例子:

x_vars = []
y_vars = []

for i in range(2, noc + 2):
    x = StringVar()
    y = StringVar()
    xcoord = ttk.Entry(mainframe, width=7, textvariable=x)
    xcoord.grid(column=1, row=i, sticky=(W, E))

    ycoord = ttk.Entry(mainframe, width=7, textvariable=y)
    ycoord.grid(column=2, row=i, sticky=(W, E))

    x_vars.append(x)
    y_vars.append(y)

相关问题 更多 >