Python 我怎样才能像在美国国旗上一样创建一组重复的条纹呢

Python 我怎样才能像在美国国旗上一样创建一组重复的条纹呢,python,user-interface,tkinter,pycharm,Python,User Interface,Tkinter,Pycharm,各位节目主持人好。我是编程新手,我正在通过tkinter为一个创建美国国旗的项目寻求帮助。这是我第一次练习。我的问题实际上是创建重复的条纹。我的想法是在循环中遍历我的.pack(),让程序一个接一个地打包每个条带(红色然后白色)。我使用I%2==0来判断I是偶数还是奇数。如果我是偶数,那就在里面放一条红色条纹。如果不是,则为白色条纹。当我运行下面的代码时,我只看到白色海洋中的一条红色条纹。请告诉我我所犯的错误 我的想法是创建条纹,然后将蓝色海洋覆盖在条纹上,然后以某种方式用星号“*”填充蓝色。如

各位节目主持人好。我是编程新手,我正在通过tkinter为一个创建美国国旗的项目寻求帮助。这是我第一次练习。我的问题实际上是创建重复的条纹。我的想法是在循环中遍历我的.pack(),让程序一个接一个地打包每个条带(红色然后白色)。我使用I%2==0来判断I是偶数还是奇数。如果我是偶数,那就在里面放一条红色条纹。如果不是,则为白色条纹。当我运行下面的代码时,我只看到白色海洋中的一条红色条纹。请告诉我我所犯的错误

我的想法是创建条纹,然后将蓝色海洋覆盖在条纹上,然后以某种方式用星号“*”填充蓝色。如果你也能给我指出一个好的方向,我会得到额外的积分

谢谢你抽出时间

from tkinter import *

window = Tk()

window.geometry("500x300")
red_stripe = Label(window, bg= "red")
white_stripe = Label(window, bg= "white")

# sea_of_blue = Frame(window, bg= "blue", width= 220, height= 130)
for i in range(5):
    if i % 2 == 0:
        one.pack(fill=x)
    else:
        two.pack(fill=x)

# sea_of_blue.place(relx= 0)

window.mainloop()

示例1: 我在循环中声明了标签,如下所示,它似乎有效:

from tkinter import *

window = Tk()
window.geometry("500x300")

for i in range(10):
    if i % 2 == 0:
        Label(window, bg= "red",width=500).grid(row=i)
    else:
        Label(window, bg= "white",width=500).grid(row=i)

window.mainloop()
请注意,我在循环中定义标签,这样每次都会创建新标签并将其放置在备用位置,而
range(10)
将其限制为10条。这里我给出了
width=100
,这样标签就填满了整个窗口

示例2: 如果您不打算重复使用标签,示例1可以,否则如果您想对其进行其他使用,则必须分别分配一个变量和
grid()
,如:

for i in range(5):
    if i % 2 == 0:
        first = Label(window, bg="red",width=500)
        first.grid(row=i)
    else:
        second = Label(window, bg="white",width=500)
        second.grid(row=i)
但这只允许您控制最后的相应标签

示例3: 或者,如果希望对条带进行单独控制,则创建一个标签并将其附加到列表中,然后调用列表的第n项以获取第n个标签

labels = []
for i in range(5):
    if i % 2 == 0:
        labels.append(Label(window, bg= "red",width=100))
        labels[i].grid(row=i)
    else:
        labels.append(Label(window, bg= "white",width=100))
        labels[i].grid(row=i)

Button(window,text='Click me',command=lambda:labels[3].config(bg='green')).grid(row=i+1,sticky='w')
请注意,当您单击按钮时,第四个标签会改变颜色,这是列表中的第四项。因此,您可以访问每个标签,如
labels[n]
,其中n是从0开始的所需标签的行号

示例4: 使用三元运算符的一个非常简单和更好的示例,以消除
if
语句:

labels = []
for i in range(5):
    bg = 'white' if i%2 else 'red'
    labels.append(Label(window, bg=bg,width=100))
    labels[i].grid(row=i)

但是,您的第二个问题仍然不清楚,最好在一篇文章中只问一个问题。

请提供预期的答案。显示中间结果与预期结果的偏差。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。您发布的代码在未定义的变量上失败。我看不出你在这里创造了多条条纹;您不断覆盖现有的。什么是
x
one
two
?您的意思是说
fill='x'
tkinter是错误的工具。使用一个图像编辑模块,如:Novel-你为什么这么说?这可以作为编程练习。Tkinter是一个非常有能力的框架。@CoolCloud-很抱歉,这实际上是我的错。一和二是我在这里提问之前在IDE中使用的变量的名称。我更改了周围的变量,以便读者能够更好地理解它,但我错过了这些更改如果我%2 else“red”,您可以使用三元运算符
bg=“white”,而不用
if…else
@HenryYik我以前从未使用过三元运算符,希望这是正确的way@CoolCloud-感谢您如此深入的回复。真正地我很高兴醒来,看到我的问题得到了超出我预期的回答@酷云-明白了!再次感谢!