tkinter的text控件,又有新的问题

DateCtrl.py

from tkinter import *

import tkinter.font as tkFont

import calendar

from datetime import date

from tkinter import filedialog

class DateCtrl(Frame):

def __init__ (self, master=None, cnf={}, **kw):

Frame.__init__( self, bg='lightgray')

self.master = master

self.changed = False

#self.master.size = (800,1200)

#self.master.resizable(False, False)

self.master.resizable(True, True)

self.date = date.today()

self.master.title('我的日历')

self.master.rowconfigure( 0, weight = 1 )

self.master.columnconfigure( 0, weight = 1 )

self.grid( sticky = W+E+N+W )

self.dayid = []

self.noteid = []

self.notefile='NoteData.csv'

self.NoteData = self.ReadNoteFile()

self.UpdateUI()

def SetDate(self,date):

self.date = date

self.UpdateUI()

def GetDate(self):

return self.date

def ReadNoteFile(self):

data = []

# 读取csv文件方式1

try:

csvFile = open(self.notefile, "r")

reader = csv.reader(csvFile) # 返回的是迭代类型

for item in reader:

data.append(item)

csvFile.close()

except IOError:

#找不到文件时提示文件不存在

print("文件不存在!")

return data

def deldata(self,today):

line=self.GetItem_day(today)

if line>0:

del self.NoteData[line]

def exitsave(self):

self.WriteNoteFile()

root.destroy()

def WriteNoteFile(self):

self.UpdateData()

csvFile2 = open(self.notefile,'w', newline='') # 设置newline,否则两行之间会空一行

writer = csv.writer(csvFile2)

m = len(self.NoteData)

for i in range(m):

writer.writerow(self.NoteData[i])

csvFile2.close()

def UpdateData(self):

'''calendar.monthrange(2018, 10)

(0, 31)第一个元素,数字0是这个月的第一天是星期天(上一个月的最后一天为星期几(0-6)),星期天为0;

第二个元素,数字31是这个月的天数;

'''

ds=calendar.monthrange(self.date.year,self.date.month)[1]

print(self.date.year,self.date.month,ds)

for i in range(ds):

today=date(self.date.year,self.date.month,i+1).strftime('%Y-%m-%d')

self.deldata(today)

txt=self.noteid[i].get(0.0, self.noteid[i].END)

if len(txt)>0:

self.NoteData.append(list(today,txt))

def GetItem_day(self,today):

line = -1

m = len(self.NoteData)

for i in range(m):

if self.NoteData[i][0]==today:

line=i

break

return line

def GetItem_day2(self,y, m, d):

today=date(y, m, d).strftime('%Y-%m-%d')

return self.GetItem_day(today)

def FileAdd (self):

pass

#file_path = filedialog.askopenfilename()

self.UpdateUI()

def FileDel (self):

pass

self.UpdateUI()

def NoteChanged (self):

self.changed = True

print(self.note.get(1.0,END))

def MonthBack (self):

self.UpdateData()

if date == date.min:

return

if self.date.month == 1:

self.date = self.date.replace(year=self.date.year-1, month=12)

else:

if self.date.day > calendar.monthrange(self.date.year,self.date.month-1)[1]:

self.date = self.date.replace(month=self.date.month-1,day=calendar.monthrange(self.date.year,self.date.month-1)[1])

else:

self.date = self.date.replace(month=self.date.month-1)

self.UpdateUI()

def MonthFoeward (self):

self.UpdateData()

if date == date.max:

return

if self.date.month == 12:

self.date = self.date.replace(year=self.date.year+1,month=1)

else:

if self.date.day > calendar.monthrange(self.date.year,self.date.month+1)[1]:

self.date = self.date.replace(month=self.date.month+1,day=calendar.monthrange(self.date.year,self.date.month+1)[1])

else:

self.date = self.date.replace(month=self.date.month+1)

self.UpdateUI()

def UpdateUI (self):

lendayid = len(self.dayid)

for i in range(lendayid):

self.noteid[lendayid-i-1].destroy()

del(self.noteid[lendayid-i-1])

self.dayid[lendayid-i-1].destroy()

del(self.dayid[lendayid-i-1])

'''

self.note.destroy()

del(self.note)

self.fileAddBt.destroy()

del(self.fileAddBt)

'''

boldFont = tkFont.Font (size = 20, weight = "bold")

self.backwardBt = Button(text='

self.YMBtn = Button(text='%d-%d'%(self.date.year,self.date.month),command=lambda sf=self:print(sf.date),font = boldFont).grid(row=0, column=1,columnspan = 2, sticky=W+E+N+S)

self.forwardBt = Button(text='>',command=self.MonthFoeward,font = boldFont).grid(row=0, column=3, sticky=W+E+N+S)

self.fileAddBt = Button(text='document',command=self.FileAdd,font = boldFont).grid(row=0, column=4, sticky=W+E+N+S)

self.ClearBt = Button(text='FileDel',command=self.FileDel,font = boldFont).grid(row=0, column=5, sticky=W+E+N+S)

#self.exit = Button(text='exit',command=lambda : root.destroy(),font = boldFont).grid(row=0, column=6, sticky=W+E+N+S)

self.exit = Button(text='exit',command=self.exitsave,font = boldFont).grid(row=0, column=6, sticky=W+E+N+S)

col = 0

for wk in ['一','二','三','四','五','六','日']:

Label(text=wk).grid(row=1,column=col,sticky=W+E+N+S)

col += 1

row = 2

col = 0

today = date.today()

tttday = date.today().day

'''calendar.monthrange(2018, 10)

(0, 31)第一个元素,数字0是这个月的第一天是星期天(上一个月的最后一天为星期几(0-6)),星期天为0;

第二个元素,数字31是这个月的天数;

'''

for weekday in calendar.monthcalendar(self.date.year,self.date.month):

for dayt in weekday:

if dayt == 0:

col+=1

continue

bkcolour = 'lightgray'

'''

if col == 5:

bkcolour = 'red'

if col == 6:

bkcolour = 'yellow'

'''

if dayt == self.date.day:

bkcolour = 'yellow'

if dayt == today.day and self.date.month==today.month and self.date.year==today.year:

bkcolour = 'red'

tdrelief = FLAT

if dayt == today.day and self.date.month==today.month and self.date.year==today.year:

tdrelief = GROOVE

#bt = Button(self.master,text='%d'%dayt,relief=tdrelief,bg=bkcolour,command=lambda sf=self,dt=dayt:sf.rpday(dt))

lf=LabelFrame(height=100, width=200, text='%d'%dayt,bg=bkcolour)

lf.grid(row=row, column=col, sticky=W+E+N+S)

t_2 =Text(lf, height=3)

#t_2.bind("",lambda sf=self,dt=dayt:sf.rpday(dt)) # 绑定光标焦点事件

# 通过中介函数handlerAdaptor进行事件绑定

t_2.bind("", self.handlerAdaptor(self.handler, dt=dayt))

t_2.pack(side=TOP,expand=YES,fill=BOTH)

lab_2 =Label(lf,text=" ").pack(side=BOTTOM,expand=YES,fill=BOTH)

#self.dayid.append(t_2)

self.dayid.append(lf)

self.noteid.append(t_2)

line=self.GetItem_day2(self.date.year,self.date.month,dayt)

if line>=0:

t_2.insert (1.0,self.NoteData[line][1])

col+=1

row+=1

col=0

#print(str(dayt))

print(self.date.strftime( '%Y-%m-%d' ))

def handler(self,event, dt):

'''事件处理函数'''

self.date=self.date.replace(day=dt)

#self.UpdateUI()

def handlerAdaptor(self,fun, **kwds):

return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)

def rpday(self,dt):

self.date=self.date.replace(day=dt)

self.UpdateUI()

if name == '__main__':

print(date(2019,11,12).strftime('%Y-%m-%d'))

root = Tk()

root.geometry('1100x800+200+100')

#root.minsize(800, 480)

for i in range(2,8) :

root.rowconfigure(i, weight=1)

for i in range(7) :

root.columnconfigure(i, weight=1)

mainfram = DateCtrl(root)

tdt = date.today()

mainfram.SetDate(tdt.replace())#试试重置日期

root.mainloop()

python tkinter 窗口禁止编辑_tkinter的text控件,绑定事件后不能编辑了相关推荐

  1. python tkinter 窗口禁止编辑_Tkinter Toplevel 禁止主窗口功能

    实现点击主窗口按钮,弹出副窗口,同时禁止主窗口功能,在关闭窗口后,使能主窗口. from tkinter import * WINDOWSIZE = '710x510+50+50' def t_clo ...

  2. python tkinter 窗口禁止编辑_python tkinter禁用文本窗口中的换行

    在下面的代码中,我正在寻找一种方法来禁用文本小部件中的换行符.我只需要使用一个条目小部件,但是条目没有撤销功能.在 当我在文本小部件中按enter键时,parse函数会根据需要调用,但它也会转到下一行 ...

  3. Python tkinter的text控件加滚动条

    """ 文本控件:用于显示多行文本 """ import tkinterwin = tkinter.Tk() win.title('带滚动条 ...

  4. [译][Tkinter 教程10] Text 控件

    已获原作者授权. 原系列地址: Python Tkinter 简介及简例 Text 控件用来显示多行文本. Tkinter 的 Text 控件很强大, 很灵活, 可以实现很多功能. 虽然这个控件的主要 ...

  5. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(text.insert/link各种事件)

    Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(text.insert/link各种事件) 导读 动态演示调用python库的tkinter带你进入GUI世 ...

  6. python tkinter库Entry控件Text控件

    Entry控件是用来输入文本的(单行输入控件) Entry类构造方法的show关键字参数指定录入文本是回显某个字符 Text控件是用来输入文本的(多行文本,图像,富文本等) 下面实例有Entry控件 ...

  7. WPF下可编辑Header的Tab控件实现

    介绍 有这样一个需求,当用户双击Tab控件Header区域时, 希望可以直接编辑.对于WPF控件,提供一个ControlTemplate在加上一些Trigger就可以实现.效果如下: 代码 首先,我们 ...

  8. 在MFC中使用Static text控件显示消息

    1-新建一个MFC对话框xxDlg,从工具栏拖一个Static text控件到面板上,右键编辑属性,将ID改为IDC_ShowMsg 2-打开类视图,在CxxDlg上右键-->添加成员函数voi ...

  9. 【引用】窗口处理技巧大全 vb(窗体控件)

    Vb提供了API函数SetWindowLong和GetWindowLong,可以让我们很容易取得对窗口的操作:通过对窗口属性的操作,可以更改窗口的显示风格.有些看来是正常情况下无法实现的窗口,现在你可 ...

最新文章

  1. pyqt tableWidget 单元格设置颜色
  2. laravel中的数据迁移表结构、字段类型、定义整理
  3. Early Orders
  4. jquery判断toggle当前状态
  5. php 浮点数 模运算,同余与模运算
  6. x-scan mysql_X-Scan使用教程
  7. Exchange Server 2016 之三:邮箱角色部署
  8. MyBatis学习(01)之解决mapper绑定异常
  9. windows Server 2016 开启远程登录和多用户同时远程登录
  10. 引用springboot starter 的springboot项目无法引用 springboot starter依赖的项目中的类
  11. Hadoop基础-HDFS数据清理过程之校验过程代码分析
  12. Web漏洞扫描工具:AWVS下载
  13. SVN Server修改端口与SVN修改版本库URL
  14. JS代码获取当前项目名称
  15. 华为防火墙理论与管理
  16. criteria 用法
  17. MySQL - binlog 图文详解
  18. java计算机毕业设计志愿者管理系统演示录像2020源码+mysql数据库+系统+lw文档+部署
  19. crash report
  20. 国产浏览器通过meta指定急速模式

热门文章

  1. Cesium矢量建筑加载
  2. 嗯哼,Gitee 倒下了?到底是什么情况?
  3. [iOS]-NSTimer与循环引用的理解
  4. java知识点拾遗(基本语法)
  5. JavaScript(获取时间戳)
  6. 绝地求生按键指南-教程
  7. traceroute路由追踪-理论
  8. 泼辣修图教程:如何通过Polarr Photo打造艳丽夕阳效果
  9. java中怎么调用邮箱自动回信息_使用java发送短信和邮件
  10. OPPOa8计算机怎么变成科学,oppoa8怎么设置返回键 虚拟导航键和全面屏手势都可以...