添加很多标签的更好方法

问题描述

我正在尝试在tkinter的窗口中添加很多文本,我希望它们排成一行。我能以比我正在做的事情更简单的方式来执行此操作,因为每次添加标签并更改行都非常烦人。 (“ bingbong”只是一个例子,我将连续使用不同的密码代替这些bingbong。)

from tkinter import *
from functools import partial

def validateLogin(password):
    print(password.get())
    if password.get() == "test":
        newWindow = Tk()
        newWindow.geometry('1800x800')
        newWindow.title("Passwords")
        tkWindow.destroy()
        Label(newWindow,text="bingbong").grid(row=1,column=0)
        Label(newWindow,text="bingbong").grid(row=2,text="bingbong").grid(row=3,text="bingbong").grid(row=4,text="bingbong").grid(row=5,text="bingbong").grid(row=6,text="bingbong").grid(row=7,text="bingbong").grid(row=8,column=0)
    if password.get() != "test":
        Label(tkWindow,text="Wrong password!",fg='red').grid(row=5,column=2)

#window
tkWindow = Tk()
tkWindow.geometry('250x100')
tkWindow.title('Passwords')

#password label and password entry Box
passwordLabel = Label(tkWindow,text="Password").grid(row=1,column=0)
password = StringVar()
passwordEntry = Entry(tkWindow,textvariable=password,show='*').grid(row=1,column=2)

validateLogin = partial(validateLogin,password)

#login button
loginButton = Button(tkWindow,text="Login",command=validateLogin).grid(row=4,column=2)

tkWindow.mainloop()

解决方法

使用循环创建它们,而不是一次手动创建

from tkinter import *
from functools import partial


words = ["foo","bar","baz","bingbong","foobar","foobaz","foofoo","barbar"]
def validateLogin(password):
    print(password.get())
    if password.get() == "test":
        newWindow = Tk()
        newWindow.geometry('1800x800')
        newWindow.title("Passwords")
        tkWindow.destroy()
        for index,word in enumerate(words):
            Label(newWindow,text=word).grid(row=index,column=0)

    if password.get() != "test":
        Label(tkWindow,text="Wrong password!",fg='red').grid(row=5,column=2)

#window
tkWindow = Tk()
tkWindow.geometry('250x100')
tkWindow.title('Passwords')

#password label and password entry box
passwordLabel = Label(tkWindow,text="Password").grid(row=1,column=0)
password = StringVar()
passwordEntry = Entry(tkWindow,textvariable=password,show='*').grid(row=1,column=2)

validateLogin = partial(validateLogin,password)

#login button
loginButton = Button(tkWindow,text="Login",command=validateLogin).grid(row=4,column=2)

tkWindow.mainloop()

编辑:使用枚举函数同时访问字符串值(在这种情况下为密码)并索引

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...