Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用tkinter创建日历的最佳方法是什么?_Python_Ms Access_Tkinter - Fatal编程技术网

Python 使用tkinter创建日历的最佳方法是什么?

Python 使用tkinter创建日历的最佳方法是什么?,python,ms-access,tkinter,Python,Ms Access,Tkinter,我正在为学校做一个项目,这是一个系统,工作人员可以输入他们的名字,然后输入他们的假期日期,这将显示在日历上。管理员还可以添加假期限制、删除假期以及添加/删除员工。 我使用tkinter来实现这个系统,我有一个access数据库来存储员工、假期日期等。 使用tkinter创建日历的最佳方法是什么?它需要在日期标记上显示假日,并可能显示在该日期休假的人的姓名。 如有任何建议,我们将不胜感激:)谢谢:) 以下是我目前的情况,如果有帮助的话: import tkinter as tk from tkin

我正在为学校做一个项目,这是一个系统,工作人员可以输入他们的名字,然后输入他们的假期日期,这将显示在日历上。管理员还可以添加假期限制、删除假期以及添加/删除员工。 我使用tkinter来实现这个系统,我有一个access数据库来存储员工、假期日期等。 使用tkinter创建日历的最佳方法是什么?它需要在日期标记上显示假日,并可能显示在该日期休假的人的姓名。 如有任何建议,我们将不胜感激:)谢谢:) 以下是我目前的情况,如果有帮助的话:

import tkinter as tk
from tkinter import END, PhotoImage
LARGE_FONT = ("Verdana", 12)
LARGER_FONT = ("Comic Sans MS", 20)
TITLE_FONT = ("Verdana", 15)


class HolSys(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand=True)

        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames = {}

        for F in (StartPage, PageOne, PageTwo, AdminSelection, StaffAddition, HolidayRemoval, HelpPage, RestrictionAddition):
            frame = F(container, self)
            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")
        self.winfo_toplevel().title("Holiday System")
        self.show_frame(StartPage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()


class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        label2 = tk.Label(self, text="Starter", font=LARGE_FONT).grid(
            row=1, column=1, pady=10, padx=10)

        button1 = tk.Button(self, text="Holiday Input", command=lambda: controller.show_frame(
            PageOne), width=14, height=2).grid(row=2, column=1)
        button2 = tk.Button(self, text="Admin", command=lambda: controller.show_frame(
            PageTwo), width=14, height=2).grid(row=2, column=2)
        buttonHelp = tk.Button(self, text="?", command=lambda: controller.show_frame(
            HelpPage), font=LARGER_FONT, width=1, height=1).grid(row=0, column=0)


class HelpPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        tk.Label(self, text="Help", font=TITLE_FONT).grid()
        button1 = tk.Button(self, text="Back to Home",
                            command=lambda: controller.show_frame(StartPage))
        button1.grid()


class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        month = tk.StringVar(self)
        year = tk.StringVar(self)

        monthList = [
            'pick a month',
            'Jan', 'Feb', 'Mar', 'Apr',
            'May', 'Jun', 'Jul', 'Aug',
            'Sep', 'Oct', 'Nov', 'Dec'
        ]
        yearList = ['2019', '2020', '2021', '2022']
        month31 = ["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"]
        month30 = ["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"]
        month29 = ["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"]
        month28 = ["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"]
        MonthsWith31D = ['Jan', 'Mar', 'May', 'Jul', 'Aug', 'Oct', 'Dec']
        MonthsWith30D = ['Apr', 'Jun', 'Sep', 'Nov']
        LeapYears = ['2020', '2024', '2028']
        Mvar = tk.StringVar(self)
        Mvar.set("January")  # initial value for month
        Dvar = tk.StringVar(self)
        Dvar.set("1st")  # initial value for date
        Yvar = tk.StringVar(self)
        Yvar.set("2019")  # initial value for year
        s_month = month31

        date = tk.OptionMenu(self, Dvar, *s_month)
        date.pack()  # creates the optionmenu button for dates

        def MonthSelEvent(*args):
            if month.get() == 'Feb':
                date['menu'].delete(0, 'end')
                if year.get() in LeapYears:
                    date['menu'].delete(0, 'end')
                    for x in month29:
                        date['menu'].add_command(
                            label=x, command=tk._setit(Dvar, x))
                        # set it to first/default for selection
                        Dvar.set(month29[0])
                    else:
                        date['menu'].delete(0, 'end')
                        for x in month28:
                            date['menu'].add_command(
                                label=x, command=tk._setit(Dvar, x))
                            # set it to first/default for selection
                            Dvar.set(month28[0])
            elif month.get() in MonthsWith31D:
                date['menu'].delete(0, 'end')
                for x in month31:
                    date['menu'].add_command(
                        label=x, command=tk._setit(Dvar, x))
                    # set it to first/default for selection
                    Dvar.set(month31[0])
            elif month.get() in MonthsWith30D:
                date['menu'].delete(0, 'end')
                for x in month30:
                    date['menu'].add_command(
                        label=x, command=tk._setit(Dvar, x))
                    # set it to first/default for selection
                    Dvar.set(month30[0])
            else:
                pass  # covers the 'select a month' option

        monthSelect = tk.OptionMenu(self, month, *monthList,
                                    command=MonthSelEvent).pack()
        # trace on the variable that is changed
        month.trace("w", MonthSelEvent)
        yearSelect = tk.OptionMenu(
            self, year, *yearList, command=MonthSelEvent).pack()
        year.trace('w', MonthSelEvent)
        year.set(yearList[0])
        month.set(monthList[0])  # set initial value of dropdown
        button1 = tk.Button(self, text="Back to Home",
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()


class PageTwo(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Admin", font=LARGE_FONT)
        L1 = tk.Label(self, text="Password").grid(row=0)
        e1 = tk.Entry(self, show="*")
        e1.grid(row=0, column=1)

        def callback(event=None):
            if e1.get() == "john":
                controller.show_frame(AdminSelection)
                e1.delete(0, END)
                e1.insert(0, "")
            else:
                L2.config(text="incorrect")
                e1.delete(0, END)
                e1.insert(0, "")
        L2 = tk.Label(self, text="")
        L2.grid()
        button1 = tk.Button(self, text="OK", command=callback).grid()
        self.bind_all("<Return>", callback)
        button1 = tk.Button(self, text="Back to Home",
                            command=lambda: controller.show_frame(StartPage)).grid()


class AdminSelection(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        tk.Label(self, text="sweet").grid()
        tk.Button(self, text="Staff\n Removal/Addition",
                  command=lambda: controller.show_frame(StaffAddition)).grid(column=0)

        tk.Button(self, text="Holiday Restriction/Addition",
                  command=lambda: controller.show_frame(RestrictionAddition)).grid(column=1)

        tk.Button(self, text="Holiday\n Removal", command=lambda: controller.show_frame(
            HolidayRemoval)).grid(column=1, row=1)

        tk.Button(self, text="Back to Home", command=lambda: controller.show_frame(
            StartPage)).grid(column=3)


class StaffAddition(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        tk.Label(self, text="Staff Addition").grid()
        tk.Button(self, text="Back", command=lambda: controller.show_frame(
            AdminSelection)).grid(column=3)


class RestrictionAddition(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        tk.Label(self, text="Restriction Addition").grid()
        tk.Button(self, text="Back", command=lambda: controller.show_frame(
            AdminSelection)).grid(column=3)


class HolidayRemoval(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        tk.Label(self, text="Holiday Removal").grid()
        tk.Button(self, text="Back", command=lambda: controller.show_frame(
            AdminSelection)).grid(column=3)

app = HolSys()
app.mainloop()
将tkinter作为tk导入
从tkinter导入端,PhotoImage
大字体=(“Verdana”,12)
大字体=(“漫画无MS”,20)
标题字体=(“Verdana”,15)
HolSys类(tk.tk):
定义初始化(self,*args,**kwargs):
tk.tk.\uuuuu初始化(self,*args,**kwargs)
容器=tk.框架(自身)
container.pack(side=“top”,fill=“both”,expand=True)
container.grid_rowconfigure(0,权重=1)
container.grid\u column配置(0,权重=1)
self.frames={}
对于F in(起始页、第一页、第二页、管理员选择、员工添加、假期删除、帮助页、限制添加):
框架=F(容器,自身)
self.frames[F]=帧
frame.grid(行=0,列=0,sticky=“nsew”)
self.winfo_toplevel().title(“假日系统”)
自显示帧(起始页)
def显示画面(自身,续):
帧=自身帧[续]
frame.tkraise()
类起始页(传统框架):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
self.controller=控制器
label2=tk.Label(self,text=“Starter”,font=LARGE\u font).grid(
行=1,列=1,pady=10,padx=10)
button1=tk.Button(self,text=“假日输入”,command=lambda:controller.show\u框架(
第一页),宽度=14,高度=2)。网格(行=2,列=1)
button2=tk.Button(self,text=“Admin”,command=lambda:controller.show\u框架(
第二页),宽度=14,高度=2)。网格(行=2,列=2)
buttonHelp=tk.Button(self,text=“?”,command=lambda:controller.show_帧(
帮助页),字体=大字体,宽度=1,高度=1)。网格(行=0,列=0)
类帮助页(tk.Frame):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
标签(self,text=“Help”,font=TITLE\u font).grid()
button1=tk.Button(self,text=“返回主页”,
命令=lambda:controller.show_帧(起始页))
按钮1.grid()
类别第一页(传统框架):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
self.controller=控制器
月=tk.StringVar(自身)
年份=tk.StringVar(自身)
月列表=[
“选择一个月”,
“一月”、“二月”、“三月”、“四月”,
“五月”、“六月”、“七月”、“八月”,
“九月”、“十月”、“十一月”、“十二月”
]
年表=['2019'、'2020'、'2021'、'2022']
月份31=[“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"]
月30=[“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"]
第29个月=[“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"]
第28个月=[“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"]
31天的月数=['1月'、'3月'、'5月'、'7月'、'8月'、'10月'、'12月']
30d的月数=['Apr'、'Jun'、'Sep'、'Nov']
LeapYears=[‘2020’、‘2024’、‘2028’]
Mvar=tk.StringVar(自)
Mvar.set(“一月”)#月份的初始值
Dvar=tk.StringVar(自)
Dvar.set(“第一”)#日期的初始值
Yvar=tk.StringVar(自)
Yvar.set(“2019”)#本年度初始值
s_月=月31
日期=tk.选项菜单(self,Dvar,*s_月)
date.pack()#为日期创建选项菜单按钮
def MonthSelEvent(*args):
如果月份.get()='Feb':
日期['menu']。删除(0,'end')
如果year.get()在LeapYears中:
日期['menu']。删除(0,'end')
对于29个月的x:
日期['menu']。添加命令(
标签=x,命令=tk.\u设置(Dvar,x))
#将其设置为第一个/默认值以进行选择
Dvar.set(29个月[0])
其他:
日期['menu']。删除(0,'end')
对于28个月的x:
日期['menu']。添加命令(
标签=x,命令=tk.\u设置(Dvar,x))
#将其设置为第一个/默认值以进行选择
Dvar.set(28个月[0])
elif month.get()在monthswith 31d中:
日期['menu']。删除(0,'end')
对于31个月内的x:
日期['menu']。添加命令(
标签=x,命令=tk.\u设置(Dvar,x))
#将其设置为第一个/默认值以进行选择
Dvar.set(月31[0])
elif month.get()在30天内的月份:
日期['menu']。删除(0,'end')
对于30个月内的x:
日期['menu']。添加命令(
标签=x,命令=tk.\u设置(Dvar,x))