从颜色列表中使用for循环更改Tkinter框架颜色

Sab*_*oon 2 python tkinter

我有以下代码片段.我需要编码,当我单击按钮时,我需要框架颜色从定义的颜色列表中逐个更改.

 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)

PM *_*ing 5

您可以使用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个名字.这会在命名空间中造成不必要的混乱,并且可能导致名称冲突:如果您不小心使用导入神秘错误的导入名称之一命名其中一个变量.当你使用多个模块进行星级导入时,情况更糟,因为它们可以踩踏彼此的名字.此外,星型导入使代码更难阅读,因为您必须记住在本地定义哪些名称以及导入哪些名称.