Python更新选项菜单内容

2024-09-30 18:17:03 发布

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

所以我现在遇到的问题是,我想更新第二个选项菜单,基于用户在第一个选项中选择的内容。我想我必须在这里使用一个lambda函数,以便帧更新或其他什么,但我不确定具体怎么做。 以下是我目前为止的代码:

from tkinter import *
import time
class CustomerEntryForm(Frame):
    def __init__(self):

        Frame.__init__(self)
        self.master.title("Customer Entry form:")
        self.pack()

        execute = True
        thirtyMonthList = [4,6,9,11]
        thirtyOneMonthList = [1,2,6,7,8,10,12]
        monthList = []
        dayList = []

        for i in range(1,13):
            monthList.append(i)

        initialMonth = IntVar(self)
        initialMonth.set(monthList[0])
        initialDay = IntVar(self)

        def resetDayOptionMenu():
            for i in range(1,len(dayList)+1):
                dayList.remove(i)

        def setDayList():
            resetDayOptionMenu()
            if initialMonth.get() == 2:
                for i in range(1, 29):
                    dayList.append(i)
                    initialDay.set(dayList[0])
            elif initialMonth.get() in thirtyMonthList:
                for i in range(1, 31):
                    dayList.append(i)
                    initialDay.set(dayList[0])
            elif initialMonth.get() in thirtyOneMonthList:
                for i in range(1, 32):
                    dayList.append(i)
                    initialDay.set(dayList[0])


        self.om2 = OptionMenu(self, initialMonth, *monthList, command = setDayList())
        self.om2.grid(row=0)
        self.om = OptionMenu(self, initialDay, *dayList)
        self.om.grid(row=1)



root = CustomerEntryForm()
root.mainloop()

谢谢你的帮助。 谢谢。在


Tags: inimportselfforgetdef选项range
1条回答
网友
1楼 · 发布于 2024-09-30 18:17:03

删除并在月份更改后添加第二个OptionMenu字段会更容易。在

像这样:

    ...

    thirtyMonthList = [4,6,9,11]

    initialMonth = IntVar(self)
    initialMonth.set(1)
    initialDay = IntVar(self)
    initialDay.set(1)

    def removeDayOptionMenu():
        self.om.destroy()

    def setDayList(event):
        removeDayOptionMenu()
        if initialMonth.get() == 2:
            addDayOptionMenu(range(1,29))
        elif initialMonth.get() in thirtyMonthList:
            addDayOptionMenu(range(1,31))
        else:
            addDayOptionMenu(range(1,32))

    def addDayOptionMenu(dayList):
        self.om = OptionMenu(self, initialDay, *dayList)
        self.om.grid(row=1)

    self.om2 = OptionMenu(self, initialMonth, *range(1,12), command = setDayList)
    self.om2.grid(row=0)
    self.om = OptionMenu(self, initialDay, *range(1,32))
    self.om.grid(row=1)

相关问题 更多 >