项目更新后 OptionMenu 不工作

OptionMenu not working after items are updated

我有两个选项菜单,其中一个的内容是通过 select输入另一个的值来更新的。虽然这是一种相当普遍的情况,但我似乎仍然无法让它发挥作用。我现在有了它,所以选项会更新,但是在 select 从第二个更新的框中输入一个项目时,它会抛出以下错误:

self.SelectFrame['menu'].add_command(label=frame, command=lambda v = self.varFrame, l=frame:v.set(1))
AttributeError: 'str' object has no attribute 'set'`

相关选项菜单的声明代码如下:

    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)

在相同的另一个方法中 class 是这段代码:

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))

当您 select 更新菜单中的项目时会抛出错误,我不明白为什么,因为我确信 lambda 命令可以设置它。如果在没有 lambda 的情况下表达这个命令,我已经尝试了各种其他方法,但它似乎不起作用。

self.varFrame 不是正常的 stringStringVar 并且您不能通过

设置值
 self.varFrame = ""

这样你就用普通的string替换了StringVar,现在你不能使用self.varFrame.set()(你的错误是v.set()

您必须始终使用 set()

 self.varFrame.set("")