簡體   English   中英

值錯誤:<tkinter.OptionMenu object .!optionmenu> 不在列表中

[英]ValueError: <tkinter.OptionMenu object .!optionmenu> is not in list

我正在嘗試從另一個列表中打印一個列表索引的相應值,如下所示:

打印(safeDis[chem.index(self.drop2)])

但是這樣做時,我收到了上述錯誤。 我相信我在之前的迭代中使用過這個,但我找不到那個。

import tkinter as tk
from tkinter import ttk

safeDis = [4,88,18,50,12,100]
chem = ["HTP 50%","HTP 84%","HTP 90%","Kerosene","Benzene"]

class Page4:
    def __init__(self,root):
        self.root = root           
        self.toplbl = ttk.Label(root, text="Select firing point meterials ",font=("arial",12)) #lable for select meterial 1
        self.lbl1 = ttk.Label(root, text="Meterial 1: ",font=("arial",10)) #lable for select meterial 1
        self.lbl2 = ttk.Label(root, text = "Meterial 2: " ,font = ("arial",10)) #lable for meterial 2 
        self.masslbl = ttk.Label(root, text="Mass in Kg:",font=("arial",10)) 
        self.masslbl2 = ttk.Label(root, text="Mass in Kg:",font=("arial",10)) 
        self.typelbl = ttk.Label(root, text="Type:",font=("arial",10))
        self.typelbl2 = ttk.Label(root, text="Type:",font=("arial",10))
        self.Apply = ttk.Button(root, text="Apply", command = self.new_window)  #button to confirm the meterial choices      
        self.Back = ttk.Button(root, text="Back", command = print("DONG"))
        self.mass1 = ttk.Entry(root, width=8)                       
        self.mass2 = tk.Entry(root,width=8)
        self.clicked = tk.StringVar()   #set the variable to a string value allowing the meterial names to apeer in it
        self.clicked.set(chem[3])    #set the default meterial from the chem list
        self.clicked2 = tk.StringVar()
        self.clicked2.set(chem[3])
        self.drop2 = tk.OptionMenu(root, self.clicked2, *chem)   #setup the dropdown menue with optionmenue function set to the chem list
        self.drop = tk.OptionMenu(root, self.clicked, *chem) 
        
        self.toplbl.grid(column=0, row=0,columnspan=3,sticky="w",padx=10,pady=10)    #place meterial label 1
        self.lbl1.grid(column=0, row=1,padx=10)    #place meterial label 1
        self.lbl2.grid(column=0, row=3,padx=10)      #place meterial label 2
        self.mass1.grid(column=2, row=2) 
        self.mass2.grid(column=2, row=4)
        self.masslbl.grid(column=1, row=2)  
        self.masslbl2.grid(column=1, row=4)            
        self.typelbl.grid(column=1, row=1,sticky="w") 
        self.typelbl2.grid(column=1, row=3,sticky="w")
        self.drop.grid(column=2, row=1)        #place the dropdown menue
        self.drop2.grid(column=2, row=3)                                                               
        self.Apply.grid(column=2,row=5,pady=10,padx=10) 
        self.Back.grid(column=1,row=5,pady=10,padx=10)
        print(safeDis[chem.index(self.drop2)])
    def new_window(self):       
        
        #print(dongalong) 
        for widget in self.root.winfo_children():
            widget.destroy()              
        self.app = Page3(self.root)
#class Page5:
def main(): 
    root = tk.Tk()
    app = Page4(root)
    root.mainloop()

if __name__ == '__main__':
    main()

問題是, self.drop2是的目的OptionMenu ,不是它的值。 要獲取它返回的值,請對其定義的變量( self.clicked2.get() )使用get()方法

所以應該是:

print(safeDis[chem.index(self.clicked2.get())])

希望它解決了錯誤,如果還有疑問,請告訴我

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM