gpt4 book ai didi

python - 在菜单打开时自定义 tkinter 菜单

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:02 24 4
gpt4 key购买 nike

我想让不太受欢迎的菜单项逐渐从白色淡入黑色。有什么方法可以在菜单仍然打开时更新颜色吗?我尝试过后命令和线程:

def update():
def color(c):
animal_menu.config(fg=c)
root.update()
print c
def adapt():
color('white')
root.after(100, color('#6E6E6E'))
root.after(100, color('black'))
## adapt() ##attempt no.1
## thread.start_new_thread(adapt, ()) ##attempt no.2

root = Tk()
menubutton = Menubutton(root, text="Animals")
animal_menu = Menu(menubutton, tearoff=0, postcommand=update)
animal_menu.add_command(label="Lion", command=print_time)
animal_menu.add_command(label="Tiger", command=print_time)
animal_menu.add_command(label="Bear", command=print_time)
menubutton.menu = animal_menu
menubutton["menu"] = menubutton.menu
menubutton.pack()
root.config()
root.mainloop()
到目前为止,第一次尝试在菜单出现之前完全运行(这是有道理的,因为在发布菜单之前调用了 postcommand),第二次尝试仅在菜单未打开时运行(我不明白):由打印语句证明。

有人可以给我一个关于如何使颜色正确动态变化以使菜单打开时项目淡入的指示吗?

最佳答案

回调中的 after 方法存在一些问题:

def update():
def color(c):
animal_menu.config(fg=c)
root.update()
print c
def adapt():
color('white')
root.after(100, color('#6E6E6E'))
root.after(100, color('black'))
adapt() ##attempt no.1

首先,如果要将参数传递给后面调用的函数,则必须使用 lambda 表达式或仅用逗号分隔它们:

root.after(100, color, 'black')

否则,括号将使该函数首先被计算。

第二,after 不适用于您可能习惯的典型控制流 - 它不会先评估一个,然后评估下一个 - 您要在要评估的调用之后设置两者100 毫秒后,这就是将会发生的情况。

以下是淡入淡出回调的​​工作示例:

from Tkinter import *

def fadein(color):
if color < 111111:
animal_menu.config(fg='#000000')
else:
print color
animal_menu.config(fg='#' + str(color))
root.after(100, fadein, color - 111111)

root = Tk()
menubutton = Menubutton(root, text="Animals")
animal_menu = Menu(menubutton, tearoff=0, postcommand=lambda: fadein(999999))
animal_menu.add_command(label="Lion")
animal_menu.add_command(label="Tiger")
animal_menu.add_command(label="Bear")
menubutton.menu = animal_menu
menubutton["menu"] = menubutton.menu
menubutton.pack()
root.config()
root.mainloop()

请注意 postcommand 中的 lambda 表达式,需要将参数传递给 fadein()

更多信息:http://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.after-method

关于python - 在菜单打开时自定义 tkinter 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com