【问题标题】:i want a button in tkinter to change colour independently without me physically clicking it我想要 tkinter 中的一个按钮来独立更改颜色,而无需我实际单击它
【发布时间】:2018-02-14 19:08:07
【问题描述】:

我希望 button2 自动触发 button1 的按下,每次按下之间的间隔为 0.2 秒,但是当我尝试将下面用星星包围的部分放入任何类型的循环中或尝试以任何方式重复它们似乎只做第一行,我知道这不仅仅是完成它们并且每次都将按钮更改为相同的颜色,因为我更改了代码以给出打印出颜色名称而不是更改按钮的结果颜色和每次打印出随机生成的名称。

感谢任何帮助

from tkinter import *
import random
import time

colour_list = ["red", "yellow", "pink",
               "green", "orange", "purple", "blue"]

def button1_function():
    button1.configure(bg = random.choice(colour_list))

*****def button2_function():
        Button.invoke(button1)*****

def button3_function():
    quit()

root = Tk()
button1 = Button(root, text = "Rainbow Button",
                 bg = "white", height = 5, width = 15, command = button1_function)

button1.place(relx = 0.5, rely = 0.5, anchor = CENTER)

button2 = Button(root, text = "Auto", bg = "grey", height = 2,
                 width = 10, command = button2_function)
button2.place(relx = 1.0, rely = 1.0, anchor = SE)

button3 = Button(root, text = "X", bg = "grey", command = button3_function)
button3.place(relx = 0.0, rely = 0.0, anchor = NW)
root.mainloop()

【问题讨论】:

  • 你想要tk.after
  • 您可能想使用button.after(200, root.tk.call, '::tk::ButtonInvoke', button) 来模拟按钮按下的整个过程。

标签: python user-interface button tkinter


【解决方案1】:

使用after。这会安排另一个回调在一段时间后运行。 root.after(x, f) 在 x 毫秒后运行 f()(其中 root 是控制 Tk 实例)

def button2_function():
    Button.invoke(button1)
    root.after(200, button2_function)

注意这段代码可以使用一些重构来停止使用全局变量,但我假设它只是示例代码!不过,在课堂上看起来会更好。

【讨论】:

猜你喜欢
  • 2019-09-22
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 2015-06-04
相关资源
最近更新 更多