gpt4 book ai didi

python 日历小部件 - 返回用户选择的日期

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:38 26 4
gpt4 key购买 nike

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, *args, **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 中的标签将在您每次选择日历中的某个日期时更新。

enter image description here

关于python 日历小部件 - 返回用户选择的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27774089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com