【问题标题】:need some help for creating a working search function需要一些帮助来创建有效的搜索功能
【发布时间】:2021-03-29 12:54:30
【问题描述】:

这是我在 stackoverflow 中的第一篇文章。

我是一名飞行员,是软件界的新手,正在尝试自己学习 python。

我正在尝试使用 gui 创建一个简单的搜索功能来搜索列表中的多个值。

我为飞行员的姓名和等级创建了 2 个输入框。

我还创建了一个名为 Pilot 的类,其中包含 2 个随机飞行员信息的 2 个相邻列表。

我的目的是在填写姓名和排名框时搜索列表以返回有关飞行员的所有相关信息,但我已经停下来了。我还尝试连接“名称”和“排名”以进行搜索功能,但也失败了。

它给出了以下错误:

结果总是“未找到”

我的代码:

from tkinter import *

root = Tk()

class Pilot():

  def __init__(self, name, age, rank, fleet, callsign, fail):
    self.name = name
    self.age = age
    self.rank = rank
    self.fleet = fleet
    self.callsign = callsign
    self.fail = fail





  def __repr__ (self):

      return "({},{},{},{}, {}, {})".format(self.name, self.age,self.rank,self.fleet, self.callsign, self.fail)
    


p1= Pilot("tom kazansky","22","lt","f14", "iceman","0")
p2= Pilot("pete mitchell","23","lt","f14", "maverick","3")
pilots =[p1,p2]



label_1 = Label(root, text = "name")
label_2 = Label(root, text = "rank")
entry_1 = Entry(root)
entry_2 = Entry(root)

def p_name(pilots):
    return pilots.name
def p_rank(pilots):
    return pilots.rank


def search(*pilots, key1 = p_name, key2 = p_rank):
            
    if entry_1 and entry_2 in pilots:
        print("found!")
            
    elif entry_1 and entry_2 not in pilots:
        print("not found!")
        
        

button_1 =Button(root, text = "search", command = search)


label_1.grid(row =0)
label_2.grid(row =1)

entry_1.grid (row =0,column =1)
entry_2.grid (row =1,column =1)

button_1.grid(row =3)



    
root.mainloop()

是什么阻止了搜索返回记录?也许是关于 *args 或 ** kwargs 的?

【问题讨论】:

  • 您的search 方法有一个预期参数pilots。据我所知,您希望在使用该方法中的条件检查成员资格时预先填充它。您要么需要更新按钮以将某些内容传递给searchpilots 参数,要么在方法签名中为pilots 分配一个默认值。

标签: python database tkinter search


【解决方案1】:

你看起来很亲密。在能够提供太多帮助之前,我们可能需要知道您遇到了什么样的错误或究竟是什么不起作用。

我可以告诉你,你实际上并没有从 Entry GUI 对象中获取文本:

 entry_1 = Entry(root)

 if entry_1 and entry_2 and entry_3 in pilots:

根据您上面的代码entry_1 是文本对象本身(页面上的框)。 if 语句检查是否所有这些文本框对象都在您的试验对象列表中(我认为这是错误的)。

如果您想在按下搜索按钮时获取这些文本框的内容,那么您需要使用Entry.get()

如果我正确理解您的意图,那么您应该从更新以下函数开始

def search(pilots, key1 = p_name, key2 = p_rank):
        
if entry_1.get() and entry_2.get() in pilots:
    print("found!")
        
elif entry_1.get() and entry_2.get() not in pilots:
    print("not found!")

您可以使用此链接了解更多关于 Tkinter 的一般用途:

https://docs.python.org/3/library/tkinter.html#module-tkinter

此链接可获取更多具体信息

https://docs.python.org/3/library/tk.html

祝你好运!

【讨论】:

  • 非常感谢!我尝试了您的更新,但它仍然不断返回self.func(*args) TypeError: search() missing 1 required positional argument: 'pilots'
  • 看起来@gallen 已经在对您原始帖子的评论中回答了这个问题。调用搜索功能时,您缺少“飞行员”参数。使用Button.command 时添加函数 arg 稍微复杂一些。您必须包装函数调用以添加 arg,或将默认 arg 添加到函数声明中。我认为包装函数调用是最简单的,看起来像这样: button_1 = Button( root, text = "search", command = lambda: search(pilots) ) lamda 命令充当一个简单的函数,没有调用的 args带参数的搜索功能
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2016-10-28
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多