【问题标题】:Code not executing after a for loop with if and else clauses inside在带有 if 和 else 子句的 for 循环之后代码不执行
【发布时间】:2020-01-22 21:26:00
【问题描述】:

试图寻找其他类似的问题,但找不到。

我正在使用名为 tkinter 的 Python 上的 GUI 库构建桌面应用程序。以下是代码中的一个函数,它在按下按钮后加载一个完整的框架(有点像应用程序的页面)。它只需要一个名为 pom 的元组并(使用 for 循环)在框架上显示其中的信息,同时它允许用户通过输入条目编辑其上的一些值。

我想制作一个保存按钮,该按钮将调用一个外部函数,为其提供新的编辑元组,以便我可以继续执行,但由于某种原因,我无法在 for 循环工作后编写任何代码。

我想知道为什么。我已经有一个小时了,并且会继续尝试,直到找出这东西到底是怎么回事。提前谢谢你。

 def edit_pom(pom):
    #Edit frame set up.
    editFrame.tkraise()
    IdLabel = tk.Label(editFrame, text=str("Editing "+str(pom[-1])), bg=FRAME_BG_COLOR, font=(FONT, 28), fg="white")
    IdLabel.place(relx=1/2, rely=1/45, relwidth=1, anchor="n")

    dataFrame = tk.Frame(editFrame, bg=FRAME_BG_COLOR)
    dataFrame.place(relx=1/2, rely=(1/20)+(1/6), width=WIDTH, relheight=1/2, anchor="n")

    titles = ["dummy","Time","Date","Description","Code","Minutes"]
    entries = []


    index = 1
    for i in pom:
        label1 = tk.Label(dataFrame, text=titles[index]+":", bg=FRAME_BG_COLOR, font=(FONT, 18), fg="white")
        label1.grid(row=index, column=0, sticky="W")

        if titles[index] == "Code" or titles[index] == "Description":
            Entry1 = tk.Entry(dataFrame)
            Entry1.grid(row=index, column=1, sticky="E")
            Entry1.insert(0, i)
            entries.append(Entry1)

        else:
            label2 = tk.Label(dataFrame, text=i, bg=FRAME_BG_COLOR, font=(FONT, 18), fg="white")
            label2.grid(row=index, column=1, sticky="E")

            label1.grid_columnconfigure(0, weight=10)
            label2.grid_columnconfigure(1, weight=10)
        
        index += 1

    print("This part is not being printed.")

【问题讨论】:

  • 你的程序卡住了吗?我怀疑您的 for 循环中的某些内容没有返回或静默失败。一些更精细的打印语句怎么样?没有一段代码可以运行我只能推测
  • 我也想过静默失败,但这没有意义,我在 for 循环的底部放置了一个 print 语句,它会执行它应该进行的所有迭代屏幕也显示了它所支持的一切。我还尝试在 for 循环中进行评论,并且下面的代码有效。这真的很令人困惑,就像我在 foo 循环下写的任何东西都不存在一样。
  • 不是在 for 的底部,而是在 if 和 else 的底部内打印。另外,当您说 for 的 bottom 时,您是什么意思?里面还是外面?
  • 我的意思是在for的底部。而且我还在 if 和 else 的底部做了两个,并且表现得像预期的那样。但我想我终于解决了。你注意到“索引”变量了吗?在 for 完成后,它应该是 5,所以我在里面添加了一个带有该条件的 if 和一个 break 语句,最后执行继续进行(函数底部和 for 外部的代码工作)。

标签: python for-loop execution


【解决方案1】:

我不知道为什么 for 循环会这样。我最好的猜测是它与 tkinter 的主循环的内部功能有关。

无论如何,解决方案是手动中断 for cicle:

index = 0
for i in pom:
    if index == 5:
        break

    label1 = tk.Label(dataFrame, text=titles[index]+":", bg=FRAME_BG_COLOR, font=(FONT, 18), fg="white")
    label1.grid(row=index, column=0, sticky="W")

    if titles[index] == "Code" or titles[index] == "Description":
        pass

    else:
        label2 = tk.Label(dataFrame, text=i, bg=FRAME_BG_COLOR, font=(FONT, 18), fg="white")
        label2.grid(row=index, column=1, sticky="E")

    index += 1

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 2016-09-24
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多