2017-04-16 45 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)