我在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()
如果希望在用户在spinbox输入字段中键入并按下enter键时更新颜色,则需要将函数绑定到
<Return>
事件您可以创建一个接受tkinter自动发送的事件参数的新函数,修改现有函数以接受事件参数,或者使用
lambda
或functools.partial
接受并忽略该参数以下是如何修改现有函数:
下面是如何在不修改
update_val
的情况下使用lambda
:相关问题 更多 >
编程相关推荐