我的代码使用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()
答案 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()