选项菜单在项目更新后不工作

2024-09-28 03:13:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

在同一个类中的另一个方法中是以下代码:

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的话,我尝试过其他各种方法来表达这个命令,但是似乎不起作用。在


Tags: lambdainselffor选项菜单framecursor
1条回答
网友
1楼 · 发布于 2024-09-28 03:13:46

self.varFrame不是正常的string而是StringVar,您不能通过

 self.varFrame = ""

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

您必须始终使用set()

^{pr2}$

相关问题 更多 >

    热门问题