我有两个选项菜单,天和月。我要确保,如果选择的月份是“ 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)
答案 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()