【问题标题】:Method of taking text into entry box and searching for it?将文本带入输入框并进行搜索的方法?
【发布时间】:2019-04-15 08:31:48
【问题描述】:

我试图能够在输入框中输入信息,然后让函数读取它并根据输入的内容返回一条语句。每次我运行程序并尝试它时,我都会收到一个错误提示“类型错误只能将 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 并打印语句。

【问题讨论】:

  • 错误的完整回溯是什么?它在哪条线上?
  • 鉴于E 是一个小部件,你认为for x in E 会做什么?
  • Rassar-error on line 1489, in cget Bryan-我认为添加 for 循环将允许此代码作为日志运行,因为输入框中有信息,但我现在意识到我可能不需要那个。我只是尝试将其取出并运行代码-我不再失败,但它也没有运行if 循环。它只是在提交按钮上打印输入的信息。
  • 哪一行是 1489 ?始终将完整的错误消息(完整的 Traceback)放在问题中 - 不在评论中。有很多有用的信息。而且会比文字更有用error on line 1489
  • 请添加一个最小且可执行的示例

标签: python-3.x tkinter


【解决方案1】:

您可以创建按钮来运行代码,该代码将从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()

或者您可以在Entry 中按Enter 时将<Return> 绑定到Entry 以运行函数。 Tkinter 将以event 作为参数运行函数,因此函数必须获取此参数。

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()

【讨论】:

  • 我已经尝试过这些方法,但每次我在输入框中输入内容并单击按钮时,它都会返回与我作为标签输入的值相同的值。我假设这是因为函数中的标签设置为label = Label(text=entry_text)。如何让它以标签形式返回所需的语句?
  • 如果您需要在标签中使用不同的文字,请在Label(text="differen text")中使用不同的文字
  • 我的问题是它没有打印函数中 if 循环中的语句。如果我在输入框中输入 500 作为值,它应该打印 Follow fault code 9621F4A4. 但它只是重复 entry_text 变量。如何让函数中的循环真正正常工作?
  • 正如我之前所说 - 使用 Label(text="Follow fault code 9621F4A4")
  • 你的意思是像label = Label(text="Follow fault code 9621F4A4")这样在循环中分配标签,因为这会返回一个标签在分配之前被引用的错误。如果您的意思是将标签分配为循环之外的标签,那么它不会按我的预期执行,因为无论输入什么值,它都会始终显示该标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 2019-08-14
  • 2013-07-19
相关资源
最近更新 更多