2017-04-16 76 views
-3

我做了一个程序的代码,将显示可从主菜单访问的图片。在我的菜单中,有一个搜索选项可以打开一个新窗口,您可以在其中搜索数据库(这是一个列表),如果输入的单词在列表中,它将激活一个功能。该部分代码显示搜索功能:没有错误...搜索功能仍然不起作用

def search(): 
    def compare(words): 
     key=words.get() 
     print(key) 
     for i in base: 
      if i==key: 
       if key=="apple": 
        AppleFunction() 

       if key=="pear": 
        PearFunction() 
       else: 
        messagebox.showerror("Eror!","Wrong entry, please correct!") 
     return 
    searchWindow=Toplevel(main) 
    searchWindow.geometry("425x125+225+145") 
    searchWindow.resizable(False,False) 
    searchWindow.config(bg=mycolor) 
    searchWindow.title("Search") 
    searchWindow.iconbitmap(r"f.ico") 

    words=Entry(searchWindow) 
    words.config(font="Times", width=20) 

    text1=Label(searchWindow, text="Search by key words:", wraplength=250, justify="center") 
    text1.pack(pady=5) 
    text1.config(bg=mycolor, font="Times") 
    words.pack(pady=5) 

    picture1=PhotoImage(file="ttt.gif") 
    searchButton=Button(searchWindow, image=picture1, height=19) 
    searchButton.config(bg=mycolor) 
    searchButton.bind("<Button>", compare(words)) 
    searchButton.pack(pady=5) 

    searchWindow.mainloop() 
    return 

它都是用Tkinter模块制成的。我尝试了全局变量和函数参数,但没有错误。虽然没有错误,但该程序仍然无法正常工作。有人可以帮我解决问题吗?

+0

* *问题是什么? *“不起作用”*是什么意思? – jonrsharpe

+0

这是一个糟糕的问题:你的代码不清楚,你的变量是用一种可能对你有意义的外语来命名的,但是让我们很难帮助你。目前还不清楚你想要做什么,哪些不起作用。首先创建一个最小的工作示例。如果您在最小示例中遇到错误,请发布最小示例的代码和错误。如果您的示例中没有出现错误,请查找您在真实代码中做了哪些不同之处。 https://en.wikipedia.org/wiki/Minimal_Working_Example – polo

+0

@polo请注意,评论中的[mcve]扩展为:[mcve]。 – jonrsharpe

回答

0

因此,我通过使Entry全局并给出内部函数来比较字符串“事件”参数来解决问题。下面是正确的代码:

def search(): 
    def compare(event): 
     key=str(words.get()) 
     for i in base: 
      if i==key: 
       if key=="Apple": 
        AppleFunction() 

       elif key=="Pear": 
        PearFunction() 
     else: 
      messagebox.showerror("Error!","Wrong entry, please correct!") 
     return 
    searchWindow=Toplevel(main) 
    searchWindow.geometry("425x125+225+145") 
    searchWindow.resizable(False,False) 
    searchWindow.config(bg=mycolor) 
    searchWindow.title("Tražilica") 
    searchWindow.iconbitmap(r"f.ico") 

    text1=Label(searchWindow, text="Search by key words:", wraplength=250, justify="center") 
    text1.pack(pady=5) 
    text1.config(bg=mycolor, font="Times") 

    global words 
    words=Entry(searchWindow) 
    words.config(font="Times", width=20) 
    words.pack(pady=5) 

    picture1=PhotoImage(file="ttt.gif") 
    searchButtton=Button(searchWindow, image=picture1, height=19) 
    searchButtton.config(bg=mycolor) 
    searchButtton.bind("<Button>", trazi) 
    searchButttonb.pack(pady=5) 

    searchWindow.mainloop() 
    return 

虽然,当我退出程序,它让我发现,我的情况下创建时的字符串不匹配的错误消息,并打开一个随机的新的空Tkinter的窗口,它不该不会发生,因为在程序运行时,它已经通过关键字正确地找到了我正在寻找的东西,并给了我正确的图片。此外,有在控制台这个错误(但不是在壳牌):

无效的命令名称 “!!顶层的按钮” 在执行 “$ W cget -relief” (程序“TK ::的buttonDown “line 9) 从 内调用”tk :: ButtonDown。!toplevel。!button“ (command bound to event)