tkinter - Tkinter 背景换色器
问题描述
我对 tkinter 很陌生。我正在尝试创建一个 tkinter 应用程序,其中有一个显示“开始换色器”的按钮,然后我的 tkinter 应用程序的背景会更改其背景。该部分工作正常,但我对其进行了编码,以便当您单击“开始换色器”时,背景会不断变化,并出现一个新按钮,上面写着“停止换色器”。我认为停止换色器是问题,因为当我单击“停止换色器”时,换色器会继续运行!请你帮帮我。
这是我的代码:
from tkinter import *
root = Tk()
def opposite_of_get_colour():
colours2 = ['white']
for colour in colours2:
while True:
yield colour
def get_colour():
colours = ['#e0ffff', '#7FDBFF', '#01FF70', '#FFFFFF', '#DDDDDD', '#AAAAAA', '#FF851B']
while True:
for c in colours:
yield c
def start():
stopButton = Button(root, text = "Stop colour changer", command = stop)
stopButton.grid(row = 8, column = 0)
root.configure(background=next(colour_getter))
root.after(1000, start) # run this function again after 1000ms
colour_getter = get_colour()
startButton = Button(root, text="Start colour changer",command=start)
startButton.grid(row = 7, column = 0)
def stop():
root.configure(background=next(no_colour_getter))
new_stop_button = Button(root, text = "Stop coour change.", state = DISABLED)
new_stop_button.grid(row = 8, column = 0)
no_colour_getter = opposite_of_get_colour()
root.mainloop()
解决方案
成功的after()
调用将返回一个取消 ID。这可用于通过调用来停止计划函数的运行after_cancel()
。
这是使用您的代码的示例:
from tkinter import *
root = Tk()
def opposite_of_get_colour():
colours2 = ['white']
for colour in colours2:
while True:
yield colour
def get_colour():
colours = ['#e0ffff', '#7FDBFF', '#01FF70', '#FFFFFF', '#DDDDDD', '#AAAAAA', '#FF851B']
while True:
for c in colours:
yield c
def start():
stopButton = Button(root, text = "Stop colour changer", command = stop)
stopButton.grid(row = 8, column = 0)
root.configure(background=next(colour_getter))
# define global variable so other functions can access the current id
# if using classes, you might want to use an instance variable for this
global id
# store the current id
id = root.after(1000, start) # run this function again after 1000ms
colour_getter = get_colour()
startButton = Button(root, text="Start colour changer", command=start)
startButton.grid(row = 7, column = 0)
def stop():
root.configure(background=next(no_colour_getter))
new_stop_button = Button(root, text = "Stop colour change.", state = DISABLED)
new_stop_button.grid(row = 8, column = 0)
# cancel invoking the callback with the latest id
root.after_cancel(id)
no_colour_getter = opposite_of_get_colour()
root.mainloop()
推荐阅读
- c# - 在将项目保存到数据库之前强制文本框数据绑定更新
- android - 如何从每页项目数和总项目数 API 响应中获取总页数?
- c++ - 带有模板模板参数的 CRTP 派生类
- javascript - 有没有办法在 cron 中立即启动作业,然后在执行完成后停止它?
- python - 在创建并使用 django 提交其表单后将作者重定向到他的帖子
- jquery - 在检查 if 后使用 javascript 将某些类设置为 html
- python - 如果 docx 文件打开,则关闭它
- php - cURL - how can I turn into a variable
- javascript - 回调如何看到它在脚本的初始执行中最初遇到时可以看到的内容?
- git - git status 不会转义未跟踪文件的路径