【问题标题】:Python Simon Game: I Cannot Make the Command of the Button Work the Way I NeedPython Simon 游戏:我无法让按钮的命令按我需要的方式工作
【发布时间】:2016-08-27 00:29:39
【问题描述】:

我正在使用 Tkinter 在 Python 中开发 Simon 游戏,但在使用按钮命令时遇到问题。

对于游戏,按钮的活动背景必须在单击时从正常颜色变为另一种颜色,然后返回正常颜色,并且我必须能够重复该动作以无限次点击。

必要的代码是:

import Tkinter

base = Tkinter.Tk()

fr = Tkinter.Frame(base, bg="black", width="238", height="238")

def yellowClick():

    yellow.configure(activebackground="yellow3")

yellow = Tkinter.Button(base, bd="0", highlightthickness="0",
                    width="7", height="5", activebackground="yellow",  
                    bg="yellow3", command = yellowClick)

yellow.place(x = 30, y = 30)

fr.pack()

base.mainloop()

这里的yellowClick()函数中的实际代码使按钮的activebackground正确地将颜色变为黄色3,但我不知道如何在3秒后将其返回为黄色,然后能够重复动作无限次点击。

我用这种方式尝试了 time.sleep():

def yellowClick():

    yellow.configure(activebackground="yellow3")

    time.sleep(3)

    yellow.configure(activebackground="yellow")

但它只会使按钮变为黄色并持续 3 秒。不要变成黄色3,而是等待 3 秒,然后返回黄色。

欢迎任何帮助。

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    但我不知道如何在 3 秒后将其恢复为黄色,

    Tkinter 小部件有一个名为 after 的方法来处理这类事情。如果您想在三秒钟内将其更改为不同的颜色,您可以这样做:

     yellow.configure(activebackground="yellow3")
     yellow.after(3000, lambda: yellow.configure(activebackground="yellow"))
    

    这将创建一个匿名函数,该函数将在未来运行大约三秒(3000 毫秒)。

    【讨论】:

      【解决方案2】:
      import Tkinter
      import time
      
      base = Tkinter.Tk()
      fr = Tkinter.Frame(base, bg="black", width="238", height="238")
      
      def yellowClick():
          yellow.configure(activebackground="yellow")
          time.sleep(3)
          yellow.configure(activebackground="yellow3")
      
      yellow = Tkinter.Button(base, bd="0", highlightthickness="0",
                          width="7", height="5", activebackground="yellow",
                          bg="yellow3", command = yellowClick)
      
      yellow.place(x = 30, y = 30)
      fr.pack()
      base.mainloop()
      

      这对我有用。你的机器上的结果是什么?

      【讨论】:

      • 对我来说这是颠倒的,因为它使颜色顺序在 3 秒内变为黄色,然后是黄色 3,它必须从黄色变为黄色 3,然后是黄色。
      • 我把 3 移了 2 行 :)
      • 如果你的意思是在两个 Yellow.configure 之间,那就是我尝试过的。
      • time.sleep(3) 将阻止您在其前面看到 configure 的结果。
      • 那么它涵盖了第一个配置?
      猜你喜欢
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多