Python tkinter spinbox中的箭头按钮使用textvariable而不是Return键更新标签的颜色和文本

2024-04-24 20:38:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在FAQ中查找了我的问题,并找到了一些提示。 但他们不能解决我的问题。 因此,我的问题是:

我已经用Python3.8编写了一个GUI,它对RGB颜色的3个值使用了三个微调框。 开始时,它以灰色显示三个值(127127127)。 右侧的两个标签显示颜色和十六进制值

通过使用Spinbox的两个箭头按钮并保持按下状态,两个标签的颜色和十六进制值将同时改变

我的问题是“Return”键不会更新颜色和十六进制值,因为它们没有以正常方式使用textvariable和StringVar()

显示前必须生成十六进制值,并且必须在更新函数中设置标签的颜色

这就是我认为“Return”键不起作用的问题

我还为Spinbox使用了绑定选项,在手动输入字段并按Reurn键后,该选项不会立即更新值

使用旋转框的箭头按钮或键盘上的箭头键后,它会更改标签的颜色和十六进制值

如果你有任何想法或看到我在哪里做了错误的一步,任何建议是感激的

下面是说明问题的代码:

from tkinter import *

root = Tk()

val_str = StringVar()

color_bg = ['red', 'green', 'blue', 'black', 'orange', 'cyan']
color_fg = ['white', 'yellow', 'cyan', 'white', 'blue', 'red']

def update_val():
    global val_str, fg_col, bg_col

    var_int = int(spin.get())
    val_str.set(str(var_int))

    label['bg'] = color_bg[(var_int%6)-1]
    label['fg'] = color_fg[(var_int%6)-1]

spin = Spinbox(root,
               from_=1,
               to=100,
               width=10,
               textvariable=val_str,
               command=update_val,
               font='Helvetica 30 bold',
               justify=CENTER,
               fg='red',
               bg='yellow')
spin.pack()

label = Label(root,
              width=10,
              textvariable=val_str,
              font='Helvetica 30 bold',
              fg='red',
              bg='white')
label.pack()

root.mainloop()

Tags: 颜色varvalredroot标签labelcolor
1条回答
网友
1楼 · 发布于 2024-04-24 20:38:08

如果希望在用户在spinbox输入字段中键入并按下enter键时更新颜色,则需要将函数绑定到<Return>事件

您可以创建一个接受tkinter自动发送的事件参数的新函数,修改现有函数以接受事件参数,或者使用lambdafunctools.partial接受并忽略该参数

以下是如何修改现有函数:

def update_val(event=None):
    global val_str, fg_col, bg_col

    var_int = int(spin.get())
    val_str.set(str(var_int))

    label['bg'] = color_bg[(var_int%6)-1]
    label['fg'] = color_fg[(var_int%6)-1]
...
spin.bind("<Return>", update_val)

下面是如何在不修改update_val的情况下使用lambda

spin.bind("<Return>", lambda event: update_val())

相关问题 更多 >