繁体   English   中英

如何使用Entry小部件的框架和列表框?

[英]How to use Frames and Listboxes for an Entry widget?

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

但是,我想改变输入框并转入列表框,但也保留框架。 我怎么能这样做?

我试图做的就在下面。 如果我写username = 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()

我认为你想要的是一个Combobox。 这是tkinter.ttk的小部件。 组合框提供可从条目中选择的值列表或用户所需的文本。 我已经编辑了你的代码,用一个有三个选项的组合框来替换这个条目:username1,username2,&other。

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

只要选择了列表中的新值,就会调用此函数,如果选择的值为“其他”,则启用编辑模式( 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM