更改选项基于其他输入的菜单

时间:2019-11-22 15:29:54

标签: python-3.x tkinter

我有两个选项菜单,天和月。我要确保,如果选择的月份是“ 2月”或“ 2”,则日期最多只能显示28,即{1 .... 28}

dayVar = StringVar(top)
day = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}
dayMenu = OptionMenu(top, dayVar, *day)
Label(top, text="Day").grid(row = 0, column = 0)
dayMenu.grid(row = 1, column = 0)

#month
monthVar = IntVar(top)
month = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
monthMenu = OptionMenu(top, monthVar, *month)
Label(top, text="Month").grid(row = 0, column = 1)
monthMenu.grid(row = 1, column = 1)

1 个答案:

答案 0 :(得分:0)

可能有些落伍,但希望您能明白:

import tkinter as tk
from tkinter import ttk


class App(tk.Frame):
    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, self.master)

        self.days_in_month = {
            'January': 31,
            'February': 28,
            'March': 31,
            'April': 30,
            'May': 31,
            'June': 30,
            'July': 31,
            'August': 31,
            'September': 30,
            'October': 31,
            'November': 30,
            'December': 31
        }

        self.configure_gui()
        self.create_widgets()

    def configure_gui(self):
        self.master.title("Days in Month")

    def populate_days(self, event):
        self.days_menu.set('')

        # populate the days menu
        self.days_menu['values'] = [
            i + 1 for i in range(self.days_in_month[self.months_menu.get()])
        ]

    def create_widgets(self):
        # set up months label
        self.months_label = ttk.Label(self.master, text="Months:")
        self.months_label.grid(row=0, column=0, padx=(12, 6), pady=(12, 0))

        #set up months menu
        self.months_menu = ttk.Combobox(self.master, state='readonly')
        self.months_menu['values'] = list(self.days_in_month.keys())
        self.months_menu.bind('<<ComboboxSelected>>', self.populate_days)
        self.months_menu.grid(row=1, column=0, padx=(12, 6), pady=(6, 12))

        # set up days label
        self.days_label = ttk.Label(self.master, text="Days:")
        self.days_label.grid(row=0, column=1, padx=(6, 12), pady=(12, 0))

        # set up days menu
        self.days_menu = ttk.Combobox(self.master, state='readonly')
        self.days_menu['values'] = []
        self.days_menu.grid(row=1, column=1, padx=(6, 12), pady=(6, 12))


if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    root.mainloop()