В вашем коде есть пара ошибок.Для начала вы определяете c
как cal.get_date
, когда cal
еще даже не был создан.
Далее вы передаете c
как textvariable
для label
виджета.Это не вызовет никакой ошибки, но также не будет обновлено - вам нужен объект StringVar
.
У вас также нет механизма для обновления текстовой переменной при выборе календаря.Даже если ваш исходный код исправлен, дата будет обновляться только один раз после выполнения.
Вот как вы можете заставить все работать:
from tkinter import *
from tkcalendar import Calendar #I assume you are using tkcalendar
def pay_cal():
def cal_fun():
t = Toplevel()
global cal
cal = Calendar(t, year=2019, month=6, day=1, foreground='Blue', background='White', selectmode='day')
cal.pack()
cal.bind("<<CalendarSelected>>",lambda e: c.set(cal.get_date())) #make use of the virtual event to dynamically update the text variable c
sub_win = Tk()
sub_win.geometry('400x500+600+100')
sub_win.title('Payout Calculator')
c = StringVar() #create a stringvar here - note that you can only create it after the creation of a TK instance
l1 = Button(sub_win, text= 'Check-In Date:', command= cal_fun)
chck_in_date = Label(sub_win, textvariable=c)
l1.grid(row=1)
chck_in_date.grid(row=1, column=2)
sub_win.mainloop()
pay_cal()
Наконец, я заметил, что вы используете sub_win
в качестве переменнойимя для этой функции - это означает, что у вас может быть main_win
что-то еще.Как правило, не рекомендуется использовать несколько экземпляров Tk
- если вам нужны дополнительные окна, просто используйте Toplevel
.