Форум сайта python.su
0
Не могу понять в чем дело. Я хочу создать ежедневник в tkinter. Выбор года и месяца через Combobox, поставил автоматическое обновление окна, чтобы при выборе следующего месяца календарь обновлялся. Почему-то обновление происходит только один раз в соответствии с заложенными по умолчанию цифрами. Инструкции ниже.
from tkinter import * import tkinter.ttk as ttk import time tek_god=time.strftime('%Y') tek_mes=time.strftime('%m') root=Tk() root.title('Ежедневник') spiski=Frame(root) nadp1=Label(spiski,text='Год') spisok_god=ttk.Combobox(spiski,height=6, values=[2019,2020,2021,2022,2023,2024]) spisok_god.set(tek_god) nadp2=Label(spiski,text='Месяц') mesyaci=['январь','февраль','март','апрель','май','июнь','июль','август', 'сентябрь','октябрь','ноябрь','декабрь'] spisok_mesyac=ttk.Combobox(spiski,height=12,values=mesyaci) spisok_mesyac.set(mesyaci[int(tek_mes)-1]) tablica=Canvas(width=280,height=260,bg='gray80') zapisi=Frame(root,bg='white') spiski.grid(row=0,column=1) tablica.grid(row=1,column=1) zapisi.grid(row=2,column=1) nadp1.grid(row=0,column=1) spisok_god.grid(row=0,column=2) nadp2.grid(row=1,column=1) spisok_mesyac.grid(row=1,column=2) x=0;y=0 for n in range(7): dni=tablica.create_rectangle(x,y,x+40,y+20,fill="white") x=x+40 y=y+20 for i in range(6): x=0 for j in range(7): kletka=tablica.create_rectangle(x,y,x+40,y+40,fill="white") x=x+40 y=y+40 dni_nedeli=['Пн','Вт','Ср','Чт','Пт','Сб','Вс'] x=10;y=10 for elem in dni_nedeli: tablica.create_text(x,y,text=elem,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 import calendar def obnovl_kalendar(): tablica.delete('all') global mesyaci god=int(spisok_god.get()) mesyac=spisok_mesyac.get() mesyac_chislo=mesyaci.index(mesyac)+1 c=calendar.Calendar(0) kalendar=c.monthdayscalendar(god, mesyac_chislo) x=0;y=0 for n in range(7): dni=tablica.create_rectangle(x,y,x+40,y+20,fill="white") x=x+40 y=y+20 for i in range(6): x=0 for j in range(7): kletka=tablica.create_rectangle(x,y,x+40,y+40,fill="white") x=x+40 y=y+40 dni_nedeli=['Пн','Вт','Ср','Чт','Пт','Сб','Вс'] x=10;y=10 for elem in dni_nedeli: tablica.create_text(x,y,text=elem,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 y=40 for elem in kalendar: x=10 for elem1 in elem: if elem1==0:elem1='' elif elem1<10:elem1=' '+str(elem1) tablica.create_text(x,y,text=elem1,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 y=y+40 root.after(100,obnovl_kalendar) root.mainloop()
Офлайн
294
Konstantin1984+
... y=y+40 root.after(100,obnovl_kalendar)#добавить root.after(100,obnovl_kalendar) root.mainloop()
from tkinter import * import tkinter.ttk as ttk import time import calendar tek_god=time.strftime('%Y') tek_mes=time.strftime('%m') mesyaci=['январь','февраль','март','апрель','май','июнь','июль','август', 'сентябрь','октябрь','ноябрь','декабрь'] root=Tk() root.title('Ежедневник') spiski=Frame(root) nadp1=Label(spiski,text='Год') spisok_god=ttk.Combobox(spiski,height=6, values=[2019,2020,2021,2022,2023,2024]) spisok_god.set(tek_god) nadp2=Label(spiski,text='Месяц') spisok_mesyac=ttk.Combobox(spiski,height=12,values=mesyaci) spisok_mesyac.set(mesyaci[int(tek_mes)-1]) tablica=Canvas(width=280,height=260,bg='gray80') zapisi=Frame(root,bg='white') spiski.grid(row=0,column=1) tablica.grid(row=1,column=1) zapisi.grid(row=2,column=1) nadp1.grid(row=0,column=1) spisok_god.grid(row=0,column=2) nadp2.grid(row=1,column=1) spisok_mesyac.grid(row=1,column=2) def obnovl_kalendar(e=None): tablica.delete('all') global mesyaci god=int(spisok_god.get()) mesyac=spisok_mesyac.get() mesyac_chislo=mesyaci.index(mesyac)+1 c=calendar.Calendar(0) kalendar=c.monthdayscalendar(god, mesyac_chislo) x=0;y=0 for n in range(7): dni=tablica.create_rectangle(x,y,x+40,y+20,fill="white") x=x+40 y=y+20 for i in range(6): x=0 for j in range(7): kletka=tablica.create_rectangle(x,y,x+40,y+40,fill="white") x=x+40 y=y+40 dni_nedeli=['Пн','Вт','Ср','Чт','Пт','Сб','Вс'] x=10;y=10 for elem in dni_nedeli: tablica.create_text(x,y,text=elem,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 y=40 for elem in kalendar: x=10 for elem1 in elem: if elem1==0:elem1='' elif elem1<10:elem1=' '+str(elem1) tablica.create_text(x,y,text=elem1,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 y=y+40 obnovl_kalendar() spisok_god.bind('<<ComboboxSelected>>', obnovl_kalendar) spisok_mesyac.bind('<<ComboboxSelected>>', obnovl_kalendar) root.mainloop()
[code python][/code]
Офлайн
0
Спасибо! Многоуважаемый PEHDOM, Вы продолжаете меня просвещать. Не подскажете, где (из каких источников) можно получить столь глубинные знания tkinter?
Офлайн
294
Konstantin1984+хмм, вот тут http://slav0nic.org.ua/static/books/python/ есть куча книг по пайтону вообще и ткинтеру в частности, например http://slav0nic.org.ua/static/books/python/an-introduction-to-tkinter.pdf
Не подскажете, где (из каких источников) можно получить столь глубинные знания tkinter?
[code python][/code]
Отредактировано PEHDOM (Фев. 9, 2020 14:50:26)
Офлайн
0
Спасибо за ссылки!
По поводу практики, у меня новая проблема в той же программе: я хочу получить при нажатии на конкретную дату календаря вывод в нижней части окна непосредственно записей ежедневника. Делаю я это по ссылке на тег. Но что-то не выходит каменный цветочек.
f
rom tkinter import * import tkinter.ttk as ttk import time tek_god=time.strftime('%Y') tek_mes=time.strftime('%m') root=Tk() root.title('Ежедневник') spiski=Frame(root) nadp1=Label(spiski,text='Год') spisok_god=ttk.Combobox(spiski,height=6, values=[2019,2020,2021,2022,2023,2024]) spisok_god.set(tek_god) nadp2=Label(spiski,text='Месяц') mesyaci=['январь','февраль','март','апрель','май','июнь','июль','август', 'сентябрь','октябрь','ноябрь','декабрь'] spisok_mesyac=ttk.Combobox(spiski,height=12,values=mesyaci) spisok_mesyac.set(mesyaci[int(tek_mes)-1]) tablica=Canvas(width=280,height=260,bg='gray80') zapisi=Frame(root,bg='white') spiski.grid(row=0,column=1) tablica.grid(row=1,column=1) zapisi.grid(row=2,column=1) nadp1.grid(row=0,column=1) spisok_god.grid(row=0,column=2) nadp2.grid(row=1,column=1) spisok_mesyac.grid(row=1,column=2) import calendar def obnovl_kalendar(e=None): tablica.delete('all') global mesyaci god=int(spisok_god.get()) mesyac=spisok_mesyac.get() mesyac_chislo=mesyaci.index(mesyac)+1 c=calendar.Calendar(0) kalendar=c.monthdayscalendar(god, mesyac_chislo) x=0;y=0 for n in range(7): dni=tablica.create_rectangle(x,y,x+40,y+20,fill="white") x=x+40 y=y+20 for i in range(6): x=0 for j in range(7): global znach_tag znach_tag=i*10+j global kletka kletka=tablica.create_rectangle(x,y,x+40,y+40,fill="white", tag=znach_tag) x=x+40 y=y+40 dni_nedeli=['Пн','Вт','Ср','Чт','Пт','Сб','Вс'] x=10;y=10 for elem in dni_nedeli: tablica.create_text(x,y,text=elem,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 y=40 global elem1 for elem in kalendar: x=10 for elem1 in elem: if elem1==0:elem1='' elif elem1<10:elem1=' '+str(elem1) chislo=tablica.create_text(x,y,text=elem1,anchor="w", font='Roman 12',justify=CENTER, fill='black',tag=elem1) x=x+40 y=y+40 obnovl_kalendar() spisok_god.bind('<<ComboboxSelected>>', obnovl_kalendar) spisok_mesyac.bind('<<ComboboxSelected>>', obnovl_kalendar) def perechen_del(event): tablica.itemconfig(elem1,fill='red') nadp_zapisi1=Label(zapisi,text='09.00-09.30') nadp_zapisi2=Label(zapisi,text='09.30-10.00') nadp_zapisi3=Label(zapisi,text='10.00-10.30') nadp_zapisi4=Label(zapisi,text='10.30-11.00') nadp_zapisi5=Label(zapisi,text='11.00-11.30') nadp_zapisi6=Label(zapisi,text='11.30-12.00') nadp_zapisi7=Label(zapisi,text='12.00-12.30') nadp_zapisi8=Label(zapisi,text='12.30-13.00') nadp_zapisi9=Label(zapisi,text='13.00-13.30') nadp_zapisi10=Label(zapisi,text='13.30-14.00') nadp_zapisi11=Label(zapisi,text='14.00-14.30') nadp_zapisi12=Label(zapisi,text='14.30-15.00') nadp_zapisi13=Label(zapisi,text='15.00-15.30') nadp_zapisi14=Label(zapisi,text='15.30-16.00') nadp_zapisi15=Label(zapisi,text='16.00-16.30') nadp_zapisi16=Label(zapisi,text='16.30-17.00') nadp_zapisi17=Label(zapisi,text='17.00-17.30') nadp_zapisi18=Label(zapisi,text='17.30-18.00') nadp_zapisi1.grid(row=0,column=1) nadp_zapisi2.grid(row=1,column=1) nadp_zapisi3.grid(row=2,column=1) nadp_zapisi4.grid(row=3,column=1) nadp_zapisi5.grid(row=4,column=1) nadp_zapisi6.grid(row=5,column=1) nadp_zapisi7.grid(row=6,column=1) nadp_zapisi8.grid(row=7,column=1) nadp_zapisi9.grid(row=8,column=1) nadp_zapisi10.grid(row=9,column=1) nadp_zapisi11.grid(row=10,column=1) nadp_zapisi12.grid(row=11,column=1) nadp_zapisi13.grid(row=12,column=1) nadp_zapisi14.grid(row=13,column=1) nadp_zapisi15.grid(row=14,column=1) nadp_zapisi16.grid(row=15,column=1) nadp_zapisi17.grid(row=16,column=1) nadp_zapisi18.grid(row=17,column=1) j=2 for i in range(18): delo=Entry(zapisi) delo.grid(row=i,column=j) tablica.tag_bind(elem1,'<Button-1>',perechen_del) root.mainloop()
Офлайн
294
Метод tag_bind() позволяет привязать событие (например, щелчок кнопкой мыши) к определенной фигуре на Canvas.
tablica.tag_bind(elem1,'<Button-1>',perechen_del) привязывает событе непонятно к чему, так как elem1 на момент привязки равен ‘ ’.
from tkinter import * import tkinter.ttk as ttk import time tek_god=time.strftime('%Y') tek_mes=time.strftime('%m') root=Tk() root.title('Ежедневник') spiski=Frame(root) nadp1=Label(spiski,text='Год') spisok_god=ttk.Combobox(spiski,height=6, values=[2019,2020,2021,2022,2023,2024]) spisok_god.set(tek_god) nadp2=Label(spiski,text='Месяц') mesyaci=['январь','февраль','март','апрель','май','июнь','июль','август', 'сентябрь','октябрь','ноябрь','декабрь'] spisok_mesyac=ttk.Combobox(spiski,height=12,values=mesyaci) spisok_mesyac.set(mesyaci[int(tek_mes)-1]) tablica=Canvas(width=280,height=260,bg='gray80') zapisi=Frame(root,bg='white') spiski.grid(row=0,column=1) tablica.grid(row=1,column=1) zapisi.grid(row=2,column=1) nadp1.grid(row=0,column=1) spisok_god.grid(row=0,column=2) nadp2.grid(row=1,column=1) spisok_mesyac.grid(row=1,column=2) import calendar def perechen_del(event): tablica.itemconfig(elem1,fill='red') nadp_zapisi1=Label(zapisi,text='09.00-09.30') nadp_zapisi2=Label(zapisi,text='09.30-10.00') nadp_zapisi3=Label(zapisi,text='10.00-10.30') nadp_zapisi4=Label(zapisi,text='10.30-11.00') nadp_zapisi5=Label(zapisi,text='11.00-11.30') nadp_zapisi6=Label(zapisi,text='11.30-12.00') nadp_zapisi7=Label(zapisi,text='12.00-12.30') nadp_zapisi8=Label(zapisi,text='12.30-13.00') nadp_zapisi9=Label(zapisi,text='13.00-13.30') nadp_zapisi10=Label(zapisi,text='13.30-14.00') nadp_zapisi11=Label(zapisi,text='14.00-14.30') nadp_zapisi12=Label(zapisi,text='14.30-15.00') nadp_zapisi13=Label(zapisi,text='15.00-15.30') nadp_zapisi14=Label(zapisi,text='15.30-16.00') nadp_zapisi15=Label(zapisi,text='16.00-16.30') nadp_zapisi16=Label(zapisi,text='16.30-17.00') nadp_zapisi17=Label(zapisi,text='17.00-17.30') nadp_zapisi18=Label(zapisi,text='17.30-18.00') nadp_zapisi1.grid(row=0,column=1) nadp_zapisi2.grid(row=1,column=1) nadp_zapisi3.grid(row=2,column=1) nadp_zapisi4.grid(row=3,column=1) nadp_zapisi5.grid(row=4,column=1) nadp_zapisi6.grid(row=5,column=1) nadp_zapisi7.grid(row=6,column=1) nadp_zapisi8.grid(row=7,column=1) nadp_zapisi9.grid(row=8,column=1) nadp_zapisi10.grid(row=9,column=1) nadp_zapisi11.grid(row=10,column=1) nadp_zapisi12.grid(row=11,column=1) nadp_zapisi13.grid(row=12,column=1) nadp_zapisi14.grid(row=13,column=1) nadp_zapisi15.grid(row=14,column=1) nadp_zapisi16.grid(row=15,column=1) nadp_zapisi17.grid(row=16,column=1) nadp_zapisi18.grid(row=17,column=1) j=2 for i in range(18): delo=Entry(zapisi) delo.grid(row=i,column=j) def obnovl_kalendar(e=None): tablica.delete('all') global mesyaci god=int(spisok_god.get()) mesyac=spisok_mesyac.get() mesyac_chislo=mesyaci.index(mesyac)+1 c=calendar.Calendar(0) kalendar=c.monthdayscalendar(god, mesyac_chislo) x=0;y=0 for n in range(7): dni=tablica.create_rectangle(x,y,x+40,y+20,fill="white") x=x+40 y=y+20 for i in range(6): x=0 for j in range(7): global znach_tag znach_tag=i*10+j global kletka kletka=tablica.create_rectangle(x,y,x+40,y+40,fill="white", tag=znach_tag) x=x+40 y=y+40 dni_nedeli=['Пн','Вт','Ср','Чт','Пт','Сб','Вс'] x=10;y=10 for elem in dni_nedeli: tablica.create_text(x,y,text=elem,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 y=40 global elem1 for elem in kalendar: x=10 for elem1 in elem: if elem1==0:elem1='' elif elem1<10:elem1=' '+str(elem1) chislo=tablica.create_text(x,y,text=elem1,anchor="w", font='Roman 12',justify=CENTER, fill='black',tag=elem1) tablica.tag_bind(chislo,'<Button-1>',perechen_del) #привязывать нужно тут x=x+40 y=y+40 obnovl_kalendar() spisok_god.bind('<<ComboboxSelected>>', obnovl_kalendar) spisok_mesyac.bind('<<ComboboxSelected>>', obnovl_kalendar) root.mainloop()
[code python][/code]
Офлайн
0
Да, я напутал. Спасибо!
Офлайн
-1
Спасибо за ссылки!
пригодятся обязательно
Офлайн