我有以下代码片段.我需要编码,当我单击按钮时,我需要框架颜色从定义的颜色列表中逐个更改.
from tkinter import *
from tkinter import ttk
def ChangeColor():
colors = ['red','green', 'orange','blue']
for color in colors:
#color = entry.get()
frame.config(bg = color)
root = Tk()
root.title("Title")
frame = Frame (root, width = 260, height = 200)
frame.pack()
btn = ttk.Button(frame, text = 'Change color', command = ChangeColor)
btn.place (x = 80, y = 100)
entry = ttk.Entry (frame, width = 20)
entry.place(x = 80, y = 70)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
您可以使用cycleitertools中的迭代器来实现此目的.
from tkinter import *
from tkinter import ttk
from itertools import cycle
root = Tk()
root.title("Title")
frame = Frame (root, width = 260, height = 200)
frame.pack()
colors = ['red','green', 'orange','blue']
color_gen = cycle(colors)
def ChangeColor():
frame.config(bg = next(color_gen))
btn = ttk.Button(frame, text = 'Change color', command = ChangeColor)
btn.place (x = 80, y = 100)
entry = ttk.Entry (frame, width = 20)
entry.place(x = 80, y = 70)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我需要提一件事:请避免做"明星"进口.当你这样做
from tkinter import *
Run Code Online (Sandbox Code Playgroud)
它将135个Tkinter名称放入您的命名空间; 在Python 2中,你得到175个名字.这会在命名空间中造成不必要的混乱,并且可能导致名称冲突:如果您不小心使用导入神秘错误的导入名称之一命名其中一个变量.当你使用多个模块进行星级导入时,情况更糟,因为它们可以踩踏彼此的名字.此外,星型导入使代码更难阅读,因为您必须记住在本地定义哪些名称以及导入哪些名称.