【问题标题】:while loop to create entry boxes based on countwhile 循环根据计数创建输入框
【发布时间】:2021-07-10 04:51:24
【问题描述】:

有人可以帮我理解为什么我的 while 循环没有打印出我想要的吗?

我的代码创建了一个带有指定数量标签的 tkinter 窗口。然后它应该创建相同数量的输入框。这两个都做。

如果我打印 part_number 变量,它会按预期打印:“Part 1”、“Part 2”、“Part 3”。等等

如果我打印它返回的条目变量:“.!entry”、“.!entry1”、“.!entry2”等,它应该打印“part_entry1”、“part_entry2”、“part_entry3”。等等

感谢您的帮助。

from tkinter import *

main = Tk()
main.title('Job Logger')
main.geometry("850x750")

'''''''''
def submit():
    a = part_entry1.get()
    #b = part_entry2.get()
    #c = part_entry3.get()

    print(a)
    #print(b)
    #print(c)
'''

count = 0
x = 50
y = 30
x2 = 150
while count < 3:
    part_number = ('Part ' + (str(count + 1)))
    Label(main, text=part_number).place(x = x, y = y)
    entry = ('part_entry' + (str(count + 1)))
    entry = Entry(main)
    entry.place(width=120, x=x2, y=y)
    y += 30
    count += 1
    print(part_number)
    print(entry)

'''''''''
Button(main, text="Submit Run info", command=submit).place(width=100, x=375, y=200)
'''

mainloop()

【问题讨论】:

  • 首先,将entry 绑定到一个字符串。然后,在下一行,您立即丢弃该字符串并将entry 重新绑定到tkinter.Entry 小部件对象。
  • 这是我正在做的还是我需要做的?
  • 这就是你正在做的事情——而且是不正确的。
  • 你能详细说明我应该做什么吗?
  • 对变量使用不同的名称 - 即。 entry_text = 'part_entry' + (str(count + 1))entry = Entry(...) 以及后来的 print(entry_text) 。但是这样你就不能创建变量part_entry_1等。你不应该这样做,但你应该将它保留在列表中并使用索引来访问列表中的对象。

标签: python tkinter while-loop


【解决方案1】:

主要问题是您尝试动态创建变量(并且做错了),但这几乎总是一个糟糕的主意(请参阅How do I create variable variables?)。 我建议您将Entry 小部件放在一个列表中,并在您的回调函数中引用它。这就是我的意思:

from tkinter import *

main = Tk()
main.title('BTD Job Logger')
main.geometry("850x750")

def submit():
    for i, entry in enumerate(part_entries, start=1):
        print(f'part entry {i}: {entry.get()!r}')

NUM_PARTS = 3
x = 50
y = 30
x2 = 150

part_entries = []  # List of Entry widgets.
for i in range(NUM_PARTS):
    part_number = 'Part ' + str(i + 1)
    Label(main, text=part_number).place(x=x, y=y)
    entry = Entry(main)
    part_entries.append(entry)
    entry.place(width=120, x=x2, y=y)
    y += 30

Button(main, text="Submit Run info", command=submit).place(width=100, x=375, y=200)

mainloop()

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2020-01-18
    • 2013-02-27
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多