鱼C论坛

 找回密码
 立即注册
查看: 1443|回复: 3

Python 日历翻页问题

[复制链接]
发表于 2018-2-4 19:53:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 syyfonline 于 2018-2-6 17:20 编辑

请教我用Tkinter 做了个日历,但是不知道怎么翻页。请大神指教
代码如下:
import calendar as cal
import tkinter as tk
import time 

app = tk.Tk()
app.title('Syyf-Office')

#获取当前时间time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=28, tm_sec=49, tm_wday=3, tm_yday=98, tm_isdst=0)
localtime = time.localtime(time.time())
tm_year = localtime.tm_year
tm_mon = localtime.tm_mon

def current_time():
        localtime = time.localtime(time.time())
        tm_year = localtime.tm_year
        tm_mon = localtime.tm_mon
        return tm_year,tm_mon

def add_year(data):
        global tm_year
        tm_year = data + 1
        year.set(tm_year)
        
def del_year(data):
        global tm_year
        tm_year = data - 1
        year.set(tm_year)
        
def add_mon(data):
        global tm_mon
        tm_mon = data + 1
        mon.set(tm_mon)
        
def del_mon(data):
        global tm_mon
        tm_mon = data - 1
        mon.set(tm_mon)


year = tk.StringVar()
year.set(tm_year)

mon = tk.StringVar()
mon.set(tm_mon)        

#获取显示的时间
datas = cal.monthrange(tm_year,tm_mon)
xq = datas[0]    #当前月从星期几开始
ts = datas[1]    #当前月一共多少天

h = 0     #从第0行开始

#显示当前时间
butt = tk.Button(app,text=str(tm_year) +"年"+str(tm_mon) + "月",width=5*9,command=current_time).grid(row=h,column=0,columnspan=7)

h += 1

#显示当前年+、-操作
butt = tk.Button(app,text="<",width=5,command=del_year(tm_year)).grid(row=h,column=0)
label = tk.Label(app,textvariable=year,width=5*6).grid(row=h,column=0,columnspan=7)
butt = tk.Button(app,text=">",width=5,command=add_year(tm_year)).grid(row=h,column=6)

h += 1

#显示当前月+、-操作
butt = tk.Button(app,text="<<",width=5,command=del_mon(tm_mon)).grid(row=h,column=0)
label = tk.Label(app,textvariable=mon,width=5*6).grid(row=h,column=0,columnspan=7)
butt = tk.Button(app,text=">>",width=5,command=add_mon(tm_mon)).grid(row=h,column=6)

h += 1

#显示星期
weeks = ("星期一","星期二","星期三","星期四","星期五","星期六","星期日")
columns = 0
for week in weeks:
        butt = tk.Label(app,text=week,width=5).grid(row=h,column=columns)
        columns += 1

h += 1

c = 0     #从第0列开始
x = xq    #获得每个月从星期几开始

#填充每个月没有的星期的天数
while x != 0:        
        butt = tk.Label(app,text=" ",width=5).grid(row=h,column=c)
        c += 1
        x -= 1
cc = xq - 1

#输出日历内容
for j in range(1,ts+1):
        xq += 1        
        cc += 1
        if xq % 7 == 0:                                
                butt = tk.Button(app,text=j,width=5).grid(row=h,column=cc)
                h += 1
                cc = -1
        else:
                butt = tk.Button(app,text=j,width=5).grid(row=h,column=cc)                
app.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 11:57:29 From FishC Mobile | 显示全部楼层
可以用Button组件做个按钮,绑定个函数,函数内实现删除当前页面组件,并更新下一页面组件。(大致思路,未经实测)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-6 14:20:08 | 显示全部楼层
本帖最后由 syyfonline 于 2018-2-6 14:21 编辑

问题已经自己解决了,谢谢大家 代码给大家分享:
import calendar as cal
import tkinter as tk
import time

app = tk.Tk()
app.title('Syyf-Office')

#获取当前时间time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=28, tm_sec=49, tm_wday=3, tm_yday=98, tm_isdst=0)
localtime = time.localtime(time.time())
tm_year = localtime.tm_year
tm_mon = localtime.tm_mon
tm_mday = localtime.tm_mday

class Li:
    def __init__(self,year,mon,day):
        self.year = year
        self.mon = mon
        self.day = day
        self.display(self.year,self.mon,self.day)

    def current_time(self):
        self.localtime = time.localtime(time.time())
        self.y = self.localtime.tm_year
        self.m = self.localtime.tm_mon
        self.d = self.localtime.tm_mday
        self.display(self.y, self.m, self.d)

    def add_time(self):
        self.y = self.dy
        self.m = self.dm
        self.d = self.day
        self.m += 1
        if self.m <= 12:
            self.display(self.y, self.m,self.d)
        else:
            self.y += 1
            self.m = 1
            self.display(self.y, self.m,self.d)

    def del_time(self):
        self.y = self.dy
        self.m = self.dm
        self.d = self.day
        self.m -= 1
        if self.m >=1 :
            self.display(self.y, self.m,self.d)
        else:
            self.y -= 1
            self.m = 12
            self.display(self.y, self.m,self.d)

    def display(self,y,m,d):
        self.dy = y      #存储当前选择的年
        self.dm = m      #存储当前选择的月
        self.day = d     #存储当前天
        datas = cal.monthrange(y,m)
        xq = datas[0]  # 当前月从星期几开始
        ts = datas[1]  # 当前月一共多少天

        h = 0  # 从第0行开始

        # 显示当前时间
        butt = tk.Button(app, text="当前时间:%d年%d月%d日" % (self.year,self.mon,self.day), width=5 * 9,command=self.current_time).grid(
            row=h, column=0, columnspan=7)

        h += 1

        # 显示当前年+、-操作
        butt = tk.Button(app, text="<", width=5,command=self.del_time).grid(row=h, column=0)
        label = tk.Label(app, text=str(y)+"年"+str(m)+"月", width=5 * 6).grid(row=h, column=0, columnspan=7)
        butt = tk.Button(app, text=">", width=5,command=self.add_time).grid(row=h, column=6)

        h += 1

        # 显示星期
        weeks = ("星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日")
        columns = 0
        for week in weeks:
            butt = tk.Label(app, text=week, width=5).grid(row=h, column=columns)
            columns += 1

        h += 1

        c = 0  # 从第0列开始
        x = xq  # 获得每个月从星期几开始

        # 填充每个月没有的星期的天数
        while x != 0:
            butt = tk.Label(app, text=" ", width=5).grid(row=h, column=c)
            c += 1
            x -= 1
        cc = xq - 1

        # 输出日历内容
        for j in range(1, ts + 1):
            xq += 1
            cc += 1
            if xq % 7 == 0:
                butt = tk.Button(app, text=j, width=5).grid(row=h, column=cc)
                h += 1
                cc = -1
            else:
                butt = tk.Button(app, text=j, width=5).grid(row=h, column=cc)

dd = Li(tm_year,tm_mon,tm_mday)
app.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-6 17:21:39 | 显示全部楼层
但是用类里的方法再次引用的话,只是覆盖了,并没有删除原来的页面。。求大神解救
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 03:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表