如何为条目小部件使用框架和列表框?

时间:2019-04-02 20:12:42

标签: python user-interface tkinter listbox frames

我的代码使用frame方法来构造我的Username小部件标签和条目。我的标签称为“ unLab”,条目称为“用户名”。 我的用户名小部件的框架称为usernameFrame。

但是,我想更改输入框并变成一个列表框,但还要保留框架。我该怎么办?

我想做的就是在下面。 如果我写的用户名= Entry(END,item), 它将返回“ str未识别为tk”。  谢谢

listbox = Listbox(usernameFrame)
listbox.pack(side = TOP)

listbox.insert(END, "usernames")

for item in ["username1", "username2"]:
    listbox.insert(END, item)
from tkinter import *
root= Tk()
root.title("OCR PPP Program that EVALUATES a student's details")
usernameFrame = Frame(root)
usernameFrame.pack(side = TOP)
large_font = ("Calibri,40")
unLab = Label(usernameFrame,text="Enter username: ",fg="light green",bg="green",font = "Calibri 26 italic",bd=1, relief="solid")
unLab.pack(side = LEFT)
username = Entry(usernameFrame,font=large_font)
username.pack(side = LEFT)
root.mainloop()

1 个答案:

答案 0 :(得分:0)

我认为您要查找的是组合框。这是tkinter.ttk中存在的小部件。组合框提供了可以从条目中选择的值列表或用户所需的文本。我已经编辑了您的代码,以将其替换为具有3个选项的组合框:username1,username2和其他。

uname = StringVar()
username = Combobox(root, textvariable = uname, values = ["username1", "username2", "other"])
username.bind("<<ComboboxSelected>>", usernameSelect)
username.pack(side = LEFT)

每当从列表中选择一个新值时,都会调用此函数,如果所选值是'other'(state='normal'表示编辑模式),则会启用编辑模式

def usernameSelect(event):
if uname.get() not in ["username1", "username2"]:
    username.config(state = 'normal')
    uname.set('')
else:
    username.config(state = 'readonly')

现在只需使用uname.get()方法来获取Combobox中的值。 这是完整的代码

from tkinter import *
from tkinter.ttk import Combobox

def usernameSelect(event):
    if uname.get() not in ["username1", "username2"]:
        username.config(state = 'normal')
        uname.set('')
    else:
        username.config(state = 'readonly')

root= Tk()
root.title("OCR PPP Program that EVALUATES a student's details")
usernameFrame = Frame(root)
usernameFrame.pack(side = TOP)
large_font = ("Calibri,40")
unLab = Label(usernameFrame,text="Enter username: ",fg="light green",bg="green",font = "Calibri 26 italic",bd=1, relief="solid")
unLab.pack(side = LEFT)
uname = StringVar()
username = Combobox(root, textvariable = uname, values = ["username1", "username2", "other"] )
username.bind("<<ComboboxSelected>>", usernameSelect)
username.pack(side = LEFT)
root.mainloop()