鱼C论坛

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

Python 日历翻页问题

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

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

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

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

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

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

  6. #获取当前时间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)
  7. localtime = time.localtime(time.time())
  8. tm_year = localtime.tm_year
  9. tm_mon = localtime.tm_mon

  10. def current_time():
  11.         localtime = time.localtime(time.time())
  12.         tm_year = localtime.tm_year
  13.         tm_mon = localtime.tm_mon
  14.         return tm_year,tm_mon

  15. def add_year(data):
  16.         global tm_year
  17.         tm_year = data + 1
  18.         year.set(tm_year)
  19.        
  20. def del_year(data):
  21.         global tm_year
  22.         tm_year = data - 1
  23.         year.set(tm_year)
  24.        
  25. def add_mon(data):
  26.         global tm_mon
  27.         tm_mon = data + 1
  28.         mon.set(tm_mon)
  29.        
  30. def del_mon(data):
  31.         global tm_mon
  32.         tm_mon = data - 1
  33.         mon.set(tm_mon)


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

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

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

  42. h = 0     #从第0行开始

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

  45. h += 1

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

  50. h += 1

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

  55. h += 1

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

  62. h += 1

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

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

  71. #输出日历内容
  72. for j in range(1,ts+1):
  73.         xq += 1       
  74.         cc += 1
  75.         if xq % 7 == 0:                               
  76.                 butt = tk.Button(app,text=j,width=5).grid(row=h,column=cc)
  77.                 h += 1
  78.                 cc = -1
  79.         else:
  80.                 butt = tk.Button(app,text=j,width=5).grid(row=h,column=cc)               
  81. app.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

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

  6. #获取当前时间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)
  7. localtime = time.localtime(time.time())
  8. tm_year = localtime.tm_year
  9. tm_mon = localtime.tm_mon
  10. tm_mday = localtime.tm_mday

  11. class Li:
  12.     def __init__(self,year,mon,day):
  13.         self.year = year
  14.         self.mon = mon
  15.         self.day = day
  16.         self.display(self.year,self.mon,self.day)

  17.     def current_time(self):
  18.         self.localtime = time.localtime(time.time())
  19.         self.y = self.localtime.tm_year
  20.         self.m = self.localtime.tm_mon
  21.         self.d = self.localtime.tm_mday
  22.         self.display(self.y, self.m, self.d)

  23.     def add_time(self):
  24.         self.y = self.dy
  25.         self.m = self.dm
  26.         self.d = self.day
  27.         self.m += 1
  28.         if self.m <= 12:
  29.             self.display(self.y, self.m,self.d)
  30.         else:
  31.             self.y += 1
  32.             self.m = 1
  33.             self.display(self.y, self.m,self.d)

  34.     def del_time(self):
  35.         self.y = self.dy
  36.         self.m = self.dm
  37.         self.d = self.day
  38.         self.m -= 1
  39.         if self.m >=1 :
  40.             self.display(self.y, self.m,self.d)
  41.         else:
  42.             self.y -= 1
  43.             self.m = 12
  44.             self.display(self.y, self.m,self.d)

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

  52.         h = 0  # 从第0行开始

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

  56.         h += 1

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

  61.         h += 1

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

  68.         h += 1

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

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

  77.         # 输出日历内容
  78.         for j in range(1, ts + 1):
  79.             xq += 1
  80.             cc += 1
  81.             if xq % 7 == 0:
  82.                 butt = tk.Button(app, text=j, width=5).grid(row=h, column=cc)
  83.                 h += 1
  84.                 cc = -1
  85.             else:
  86.                 butt = tk.Button(app, text=j, width=5).grid(row=h, column=cc)

  87. dd = Li(tm_year,tm_mon,tm_mday)
  88. app.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 12:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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