python calendar widget – 返回用户选择的日期
发布时间:2020-12-20 11:39:53 所属栏目:Python 来源:网络整理
导读:这个 ttk calendar class根据tkinter制作日历.如何让它返回所选日期的值?下面是我试过的,它返回’NoneType对象不可调用’: def test(): import sys root = Tkinter.Tk() root.title('Ttk Calendar') ttkcal = Calendar(firstweekday=calendar.SUNDAY) ttkc
这个
ttk calendar class根据tkinter制作日历.如何让它返回所选日期的值?下面是我试过的,它返回’NoneType对象不可调用’:
def test(): import sys root = Tkinter.Tk() root.title('Ttk Calendar') ttkcal = Calendar(firstweekday=calendar.SUNDAY) ttkcal.pack(expand=1,fill='both') x = ttkcal.selection() #this and the following line are what i inserted print 'x is: ',x #or perhaps return x if 'win' not in sys.platform: style = ttk.Style() style.theme_use('clam') root.mainloop() if __name__ == '__main__': test() 解决方法
选择是@property,因此您需要以下内容才能使您的代码得到满足:
x = ttkcal.selection 此外,使用此日历,您可以在关闭callendar小部件后(即在mainloop()之后)获取所选日期.因此,您的代码应该是: def test2(): import sys root = Tkinter.Tk() root.title('Ttk Calendar') ttkcal = Calendar(firstweekday=calendar.SUNDAY) ttkcal.pack(expand=1,fill='both') if 'win' not in sys.platform: style = ttk.Style() style.theme_use('clam') root.mainloop() x = ttkcal.selection print 'x is: ',x 以防万一.如果您不想关闭日历窗口以获取所选值,但是您希望在点击它们时“实时”显示它们,例如将它们显示在其他窗口的标签中,您可以执行以下操作: 首先扩展Calendar类以添加每次选择某个日期时将调用的回调函数: class Calendar2(Calendar): def __init__(self,master=None,call_on_select=None,**kw): Calendar.__init__(self,master,**kw) self.set_selection_callbeck(call_on_select) def set_selection_callbeck(self,a_fun): self.call_on_select = a_fun def _pressed(self,evt): Calendar._pressed(self,evt) x = self.selection #print(x) if self.call_on_select: self.call_on_select(x) 有了这个,你可以制作新的test2示例,它有两个窗口.一个用于日历,一个窗口带有一些标签(例如): class SecondFrame(Tkinter.Frame): def __init__(self,*args,**kwargs): Tkinter.Frame.__init__(self,**kwargs) self.l = Tkinter.Label(self,text="Selected date") self.l.pack() self.pack() def update_lable(self,x): self.l['text'] = x; def test2(): import sys root = Tkinter.Tk() root.title('Ttk Calendar') ttkcal = Calendar2(firstweekday=calendar.SUNDAY) ttkcal.pack(expand=1,fill='both') if 'win' not in sys.platform: style = ttk.Style() style.theme_use('clam') sf = SecondFrame(Tkinter.Toplevel()) ttkcal.set_selection_callbeck(sf.update_lable) root.mainloop() 在此示例中,每次在日历中选择某个日期时,SecondFrame中的标签都会更新. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |