Python t了解如何在不使用字典的情况下创建动态选项菜单

Python t了解如何在不使用字典的情况下创建动态选项菜单,python,dynamic,tkinter,optionmenu,Python,Dynamic,Tkinter,Optionmenu,我发现,这有助于了解方法,但我想使用他们的方法而不使用字典 基本上,在Python中,我尝试使用Tkinter中的两个optionmenu,其中第一个将包含excel文档的选项卡,然后第二个将包含我从第一个optionmenu中选择选项卡后从其中一列中读取的信息。由于我不想事先存储和读取每个选项卡,因此在选择选项卡后调用函数读取数据似乎比事先创建字典效率更高。有人知道这样做的方法吗 以下是我到目前为止所拥有的(excel_transfer是一个基于openpyxl的自建库-如果您对我正在做的事情

我发现,这有助于了解方法,但我想使用他们的方法而不使用字典

基本上,在Python中,我尝试使用Tkinter中的两个optionmenu,其中第一个将包含excel文档的选项卡,然后第二个将包含我从第一个optionmenu中选择选项卡后从其中一列中读取的信息。由于我不想事先存储和读取每个选项卡,因此在选择选项卡后调用函数读取数据似乎比事先创建字典效率更高。有人知道这样做的方法吗

以下是我到目前为止所拥有的(excel_transfer是一个基于openpyxl的自建库-如果您对我正在做的事情有进一步的问题,请随时提问,否则就没有必要为了这个问题而进入其中):


第一个选项用于查找选项卡,但我遇到的问题是read_列只在GUI最初打开时出现,它仍然是一个空值。如何使self.list_值响应第一个选项菜单中选择的选项卡?我可以不用字典使用trace吗?我确信有更好的方法来编写我写过的代码——我愿意接受建设性的批评,因为总有很多东西需要学习。谢谢你的帮助

好的,所以我在继续使用它来帮助将来有同样问题的人之后找到了答案。 我将self.TAB_选项更改为:

self.TAB_OPTION(tab, self.tabsvar, *self.list_of_tabs, command=self.read_columns)
通过添加该命令,我必须将一个变量传入self.read_列,因为添加该命令会自动传递用户在第一个选项菜单中选择的值。因此,我将self.read_列更改为:

def read_columns(self, board):
    sheet = board
    #sheet = self.tabs_var.get()
我还取出了上面显示要注释的行,因此它从TAB_选项接收到第一个选项菜单中选择的值,而不是读取从GUI中选择的值。我还补充说:

self.VALUES_OPTION['menu'].delete(0, 'end')
for item in values:
    self.VALUES_OPTION['menu'].add_command(label=item)
在read_columns函数的末尾,它将重新生成第二个选项菜单的值。它删除所有以前的值,然后通过迭代数组添加从excel中读取的每个值。我不再需要函数末尾的返回值。 我希望这能帮助其他困惑的程序员:)

self.VALUES_OPTION['menu'].delete(0, 'end')
for item in values:
    self.VALUES_OPTION['menu'].add_command(label=item)