【问题标题】:Python-Tkinter: Trying to unpack a button with an if statementPython-Tkinter:尝试使用 if 语句解压按钮
【发布时间】:2021-02-21 14:24:40
【问题描述】:

我知道有更好的方法,但我不知道是什么 这段代码错了,或者至少,为什么它不能按我想要的方式运行。目前我做了一个简单的测试程序来尝试我的概念远离我 主要代码。

from tkinter import *
root = Tk()
test = True
def click():
   global test
   print("working")
   test = False
button = Button(root, text="Hi", command=click)

if test:
   button.pack()

root.mainloop()

一切运行良好,但是当我按下按钮时,我得到的只是消息“工作”,而按钮没有消失。

【问题讨论】:

  • 试试button.pack_forget()

标签: python loops if-statement tkinter


【解决方案1】:

在您的代码中,python 检查 test 是否为 True,并且它会打包按钮并继续前进。您需要使用的是<tkinter widget>.pack_forget()。它从屏幕上删除小部件而不破坏它。如果您稍后调用 pack 它应该将其放回原来的位置。这是带有pack_forget 的代码:

from tkinter import *
root = Tk()

def click():
   print("working")
   button.pack_forget()

button = Button(root, text="Hi", command=click)
button.pack()

root.mainloop()

【讨论】:

  • 嗯。我理解这一点,但我更好奇为什么循环不能阻止包的发生。由于据我了解,它会不断循环并打包该按钮,并且应该通过它运行但 if 语句为假,因此不应该打包该按钮吗?
  • @SerkanSenyuz 关闭调用,但您应该了解mainloop() 之间的代码不会像循环一样运行两次或多次,它只会运行一次。因此,一旦它检查,它是真实的,因此放置了按钮。您更改函数内部的值,但这不会影响函数外部的if。根据你的逻辑,会有很多按钮,因为它们会不断重复button.pack() 很多次,但它不对?
  • @SerkanSenyuz 这需要时间,但mainloop 不是运行您的代码的循环,但mainloop 是一个处理事件并检查它们是否从 完成的循环list,所以他们继续检查待办事项列表(要处理的事件?)是否已完成,并在此基础上继续,所以这种重复?可能就是为什么它被称为mainloop。继续研究,你很快就会明白的。
  • 通过事件@CoolCloud 表示键绑定、鼠标点击/移动和脚本之后。所以tkinter的mainloop基本上就是:while window isn't closed: handle events coming in
  • 好的,我想我已经很好地掌握了这个概念,那么非常感谢您
猜你喜欢
  • 2018-10-07
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2016-10-02
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多