首页 > 解决方案 > 将文本带入输入框并搜索的方法?

问题描述

我试图能够在输入框中输入信息,然后让一个函数读取它并根据输入的内容返回一个语句。每次我运行程序并尝试它时,我都会遇到一个失败,提示“类型错误只能将 str(而不是“int)连接到 str”

我尝试将文本条目设置为 stringvar,然后将其作为函数的一部分调用以搜索该条目变量,但它似乎没有改变任何东西。

这是我的代码:

E = Entry(top,text='var',textvariable=var,bd=5)
def faultCodes():
    x = E.get()
    for x in E:
        if x == 500 or x == 514:
            print("Follow fault code 9621F4A4.")
        else:
            print("Enter a fault code.")
    label = Label(text=x).place(x=0,y=300)

我正在寻找的结果是让用户能够输入 500 或 514 的值并打印语句。

标签: python-3.xtkinter

解决方案


您可以创建按钮来运行代码,该代码将从var.get()或从中获取文本E.get()并执行某些操作

E = Entry(top, text='var', textvariable=var, bd=5)
E.pack()

B = Button(top, text='OK', command=faultCodes)
B.pack()

def faultCodes():
    entry_text = var.get()

    if entry_text == "500" or entry_text == "514":
         print("Follow fault code 9621F4A4.")
    else:
         print("Enter a fault code.")

    label = Label(top, text=entry_text)
    label.pack()

或者您可以在按下时绑定<Return>Entry运行功能。Tkinter 将使用as 参数运行函数,因此函数必须获取此参数。EnterEntryevent

E = Entry(top, text='var', textvariable=var, bd=5)
E.pack()

E.bind('<Return>', faultCodes)

def faultCodes(event):
    entry_text = var.get()

    if entry_text == "500" or entry_text == "514":
         print("Follow fault code 9621F4A4.")
    else:
         print("Enter a fault code.")

    label = Label(top, text=entry_text)
    label.pack()

如果您使用,您甚至可以使用具有相同功能的两种方法event=None

完整的工作示例

from tkinter import *

def faultCodes(event=None):
    entry_text = var.get()

    if entry_text == "500" or entry_text == "514":
         print("Follow fault code 9621F4A4.")
    else:
         print("Enter a fault code.")

    label = Label(top, text=entry_text)
    label.pack()


top = Tk()

var = StringVar()
E = Entry(top, text='var', textvariable=var, bd=5)
E.pack()

E.bind('<Return>', faultCodes)

B = Button(top, text='OK', command=faultCodes)
B.pack()

top.mainloop()

顺便说一句:var.get()给出字符串,所以我与字符串“500”、“514”进行比较——而不是整数 500、514。


编辑:示例Label

from tkinter import *

# --- function ---

def faultCodes(event=None):
    entry_text = var.get()

    if entry_text == "500" or entry_text == "514":
         label['text'] = "Follow fault code 9621F4A4."
    else:
         label['text'] = "Enter a fault code."

# --- main ---

top = Tk()

var = StringVar()
E = Entry(top, text='var', textvariable=var, bd=5)
E.pack()

E.bind('<Return>', faultCodes)

B = Button(top, text='OK', command=faultCodes)
B.pack()

label = Label(top, text='')
label.pack()

top.mainloop()

编辑:字典示例

from tkinter import *

data = {
    "500": "Follow fault code 9621F4A4.",
    "514": "Follow fault code 9621F4A4.",
    # ...add more ...
}

# --- function ---

def faultCodes(event=None):
    entry_text = var.get()

    if entry_text in data:
         label['text'] = data[entry_text]
    else:
         label['text'] = "Enter a fault code."

# --- main ---

top = Tk()

var = StringVar()
E = Entry(top, text='var', textvariable=var, bd=5)
E.pack()

E.bind('<Return>', faultCodes)

B = Button(top, text='OK', command=faultCodes)
B.pack()

label = Label(top, text='')
label.pack()

top.mainloop()

推荐阅读