0
我有兩個選項菜單,通過從另一個菜單中選擇一個值來更新一個菜單的內容。雖然這是一種相當普遍的情況,但我似乎無法使其發揮作用。我現在有它,這樣的選項更新,但在從第二,更新的盒子,它拋出下面的錯誤選擇項目:OptionMenu在項目更新後無法工作
self.SelectFrame['menu'].add_command(label=frame, command=lambda v = self.varFrame, l=frame:v.set(1))
AttributeError: 'str' object has no attribute 'set'`
有問題的optionmenu聲明中的代碼如下:
self.varFrame = Tk.StringVar()
self.Frames = ["",""]
self.SelectFrame = Tk.OptionMenu(botLeftFrame, self.varFrame, *self.Frames)
self.varFrame.set("None selected")
self.SelectFrame.pack(side="left", padx = 5, pady = 10)
在同一類的另一種方法是這樣的代碼:
def runSelectionChanged(self,*args):
cnxn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Public\dbsDetectorBookingSystem.accdb')
cursor = cnxn.cursor()
cursor.execute("SELECT RunFilePath, RunID FROM tblRuns")
rows = cursor.fetchall()
for row in rows:
if row.RunFilePath == self.varRun.get():
chosenRunID = row.RunID
sqlString = "SELECT LocalFilePath, RunID FROM tblFrames WHERE RunID=?"
cursor.execute(sqlString, str(chosenRunID))
self.userFrames = cursor.fetchall()
self.Frames = ["",""]
for frame in self.userFrames:
self.Frames.append(frame.LocalFilePath)
newFrames = self.Frames
self.varFrame = ""
self.SelectFrame['menu'].delete(0, 'end')
for frame in newFrames:
self.SelectFrame['menu'].add_command(label=frame, command=lambda v = self.varFrame, l=frame:v.set(1))
,當你選擇它已被更新後的菜單中的項目將引發錯誤,我不明白爲什麼我確信lambda命令賦予它設置的能力。如果沒有使用lambda表達式這個命令,我嘗試過其他各種方式,但它似乎不起作用。
謝謝,我沒有發現 – JacobM