如何在Python中根据RadioButton的点击创建循环

2024-09-29 07:29:01 发布

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

我编写了下面的代码,根据用户的点击来显示某些select选项。因此,如果用户单击第一个单选按钮(值1),只有一个选项将出现,如果他们单击第二个单选按钮(值2),将出现两个等。。。这将一直持续到值10(他们将有10个选项)。你知道吗

class MedTimes:
    def __init__(self, master):
        self.fr = LabelFrame(master, text = "Time to take Medication")
        self.fr.grid(row = 6, column = 0, columnspan = 4, padx=8,pady=8, sticky='we')

        Label(self.fr, text = "How many times a day do you need to take your medication?").grid(row = 0, column = 0, sticky = 'e', columnspan = 3)

        self.y = IntVar ()
        self.y.set(1)

        Radiobutton(self.fr,text = "Once",  fg = "dark green", variable = self.y, value = 1, padx = 20, command = self.timings).grid(row = 1, column = 1, sticky = 'w')
        Radiobutton(self.fr,text = "Twice", fg = "dark green", variable = self.y, value = 2, padx = 20, command = self.timings).grid(row = 2, column = 1, sticky = 'w')
        Radiobutton(self.fr,text = "Three times", fg = "dark green", variable = self.y, value = 3, padx = 20, command = self.timings).grid(row = 3, column = 1, sticky = 'w')
        Radiobutton(self.fr,text = "Four times", fg = "dark green", variable = self.y, value = 4, padx = 20, command = self.timings).grid(row = 4, column = 1, sticky = 'w')
        Radiobutton(self.fr,text = "Five times", fg = "dark green", variable = self.y, value = 5, padx = 20, command = self.timings).grid(row = 5, column = 1, sticky = 'w')
        Radiobutton(self.fr,text = "Six times", fg = "dark green", variable = self.y, value = 6, padx = 20, command = self.timings).grid(row = 1, column = 2, sticky = 'w') 
        Radiobutton(self.fr,text = "Seven times", fg = "dark green", variable = self.y, value = 7, padx = 20, command = self.timings).grid(row = 2, column = 2, sticky = 'w')   
        Radiobutton(self.fr,text = "Eight times", fg = "dark green", variable = self.y, value = 8, padx = 20, command = self.timings).grid(row = 3, column = 2, sticky = 'w')
        Radiobutton(self.fr,text = "Nine times", fg = "dark green", variable = self.y, value = 9, padx =20, command = self.timings).grid(row = 4, column = 2, sticky = 'w') 
        Radiobutton(self.fr,text = "Ten times", fg = "dark green", variable = self.y, value = 10, padx =20, command = self.timings ).grid(row = 5, column = 2, sticky = 'w')

    def timings(self):
        currentValue = self.y.get()
        #creating an array to hold the values oh hour and then minute (at a 5 min interval
        timelistHour = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"]
        timelistMinute = ["00", "05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55"]
        if currentValue == 1:
            timeHourOne = StringVar()
            timeHourOne.set(timelistHour[0])
            timeMinOne = StringVar()
            timeMinOne.set(timelistMinute[0])
            Label(self.fr, text = "Hour/Min :").grid(row = 6, column = 1, sticky = 'w')
            OptionMenu(self.fr, timeHourOne, *timelistHour).grid(row = 6, column = 1, sticky = 'e')
            Label(self.fr, text = "Minute :").grid(row = 6, column = 2, sticky = 'w')
            OptionMenu(self.fr, timeMinOne, *timelistMinute).grid(row = 6, column = 2, sticky = 'w')                
        elif currentValue == 2:
            timeHourTwo = StringVar()
            timeHourTwo.set(timelistHour[0])
            timeMinTwo = StringVar()
            timeMinTwo.set(timelistMinute[0])
            Label(self.fr, text = "Hour :").grid(row = 6, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourTwo, *timelistHour).grid(row = 6, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 6, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinTwo, *timelistMinute).grid(row = 6, column = 2, sticky = 'w')
            Label(self.fr, text = "Hour :").grid(row = 7, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourTwo, *timelistHour).grid(row = 7, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 7, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinTwo, *timelistMinute).grid(row = 7, column = 2, sticky = 'w')
        elif currentValue == 3:
            timeHourThree = StringVar()
            timeHourThree.set(timelistHour[0])
            timeMinThree = StringVar()
            timeMinThree.set(timelistMinute[0])
            Label(self.fr, text = "Hour :").grid(row = 6, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourThree, *timelistHour).grid(row = 6, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 6, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinThree, *timelistMinute).grid(row = 6, column = 2, sticky = 'w')
            Label(self.fr, text = "Hour :").grid(row = 7, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourThree, *timelistHour).grid(row = 7, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 7, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinThree, *timelistMinute).grid (row = 7, column = 2, sticky = 'w')
            Label(self.fr, text = "Hour :").grid(row = 8, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourThree, *timelistHour).grid(row = 8, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 8, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinThree, *timelistMinute).grid(row = 8, column = 2, sticky = 'w')
        elif currentValue == 4:
            timeHourFour = StringVar()
            timeHourFour.set(timelistHour[0])
            timeMinFour = StringVar()
            timeMinFour.set(timelistMinute[0])
            Label(self.fr, text = "Hour :").grid(row = 6, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourFour, *timelistHour).grid(row = 6, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 6, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinFour, *timelistMinute).grid(row = 6, column = 2, sticky = 'w')
            Label(self.fr, text = "Hour :").grid(row = 7, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourFour, *timelistHour).grid(row = 7, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 7, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinFour, *timelistMinute).grid(row = 7, column = 2, sticky = 'w')
            Label(self.fr, text = "Hour :").grid(row = 8, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourFour, *timelistHour).grid(row = 8, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 8, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinFour, *timelistMinute).grid(row = 8, column = 2, sticky = 'w')
            Label(self.fr, text = "Hour :").grid(row = 9, column = 0, sticky = 'e')
            OptionMenu(self.fr, timeHourFour, *timelistHour).grid(row = 9, column = 1, sticky = 'w')
            Label(self.fr, text = "Minute :").grid(row = 9, column = 1, sticky = 'e')
            OptionMenu(self.fr, timeMinFour, *timelistMinute).grid(row = 9, column = 2, sticky = 'w')

如您所见,我为此编写了一个if语句(带有9个elif语句-在上面的代码中,我只发布了第四个值,但它会重复到10)。我意识到我可以通过编写for循环来缩短代码。然而,我被困在如何写这个循环。你知道吗

如果有人能给我指点,那就太棒了!短暂性脑缺血发作


Tags: textselfcolumnfrlabelgridrowsticky
1条回答
网友
1楼 · 发布于 2024-09-29 07:29:01

下面是一个在timings函数中可能执行的操作的小示例:

timeHourTwo = StringVar()
timeHourTwo.set(timelistHour[0])
timeMinTwo = StringVar()
timeMinTwo.set(timelistMinute[0])
def recursion(n):
    Label(self.fr, text = "Hour :").grid(row = (5+n), column = 0, sticky = 'e')
    OptionMenu(self.fr, timeHourTwo, *timelistHour).grid(row = (5+n), column = 1, sticky = 'w')
    Label(self.fr, text = "Minute :").grid(row = (5+n), column = 1, sticky = 'e')
    OptionMenu(self.fr, timeMinTwo, *timelistMinute).grid(row = (5+n), column = 2, sticky = 'w') 
    if n > 1:
        recursion(n-1)

它并不完美,因为我无法测试它,而且标签也不会按你的分类(从大到小),但也许它能激励你。希望有帮助!你知道吗

基于此:

def recursion(n):
    print(5+n)
    if n > 1:
        recursion(n-1)

recursion(4)  #Output : 9 8 7 6

相关问题 更多 >