Форум сайта python.su
0
есть задумка, написать приложение в котором будет выведены часы(с обновлением до текущего времени раз в секунду…ну по сути обычные часы), далее кнопка (при нажатии на которую будет добавляться какая то строка в файл). после нажатия кнопки через определенный интервал времени (пускай 1 минута) должен срабатывать будильник и выскакивать какое то сообщение
from Tkinter import * import datetime now_time = datetime.datetime.now() cur_hours = now_time.hour cur_minutes = now_time.minute cur_sec = now_time.second def write_in_file(): global cur_hours, cur_minutes, cur_sec f = open('text.txt', 'a') f.write(now_time.strftime("\nyou went in %H:%M:%S\n")) f.close() root = Tk() mainLabel = Label(root, text='STATISTICK', width=20, background='red', font=("Arial", 20, "bold")) butCheck = Button(root, width=30, height=2, text='Click me when you go', bg='brown') cur_Label = Label(root, bg='red', font=("Arial", 15)) cur_Label.configure(text="now " + now_time.strftime("%H:%M:%S")) mainLabel.grid(row=1, column=1) butCheck.bind("<Button-1>", write_in_file()) butCheck.grid(row=2, column=1) cur_Label.grid(row=3, column=1) root.bind("<Control-z>", exit) root.mainloop()
Отредактировано Ramon_90 (Сен. 3, 2013 14:41:41)
Офлайн
63
Почему тема в этом разделе а не в GUI?
Ну да ладно. По сути. Что надо?
1. Чтобы на экран отображались часы от текущего времени.
2. Чтобы при нажатии на кнопку текущее время уходило в файл и дописывалось в конец, т.е. нажал - ушло текущее время. После открытия файла можно будет посмотреть лог нажатия клавиш.
3. После нажатия кнопки запускается таймер и спрабатывает будильник через 1 минуту.
P.S. Все это время часы должны непрерывно показывать текущее время…
Я все правильно понял?
Отредактировано 4kpt (Сен. 3, 2013 14:48:07)
Офлайн
0
да, вроде все верно
Офлайн
0
с часами вопрос снят, уже разобрался
Офлайн
63
Держите…
# coding: utf-8 # import Tkinter import time # file_ = open("timer.txt", "w") # def close(): file_.close() root.destroy() # def allert(): tpl = Tkinter.Toplevel() text = Tkinter.Label(tpl, text="Timer Allert!", bg="red") text.pack() # def set_data_to_file(event): file_.write(timer["text"] + "\n") timer.after(10000, allert) # def go_timer(): timer["text"] = "{3:02d}:{4:02d}:{5:02d}".format(*time.localtime()) timer.after(1000, go_timer) # root = Tkinter.Tk() root.focus_force() root.protocol("WM_DELETE_WINDOW", close) # timer = Tkinter.Label(root, font="Arial, 40") timer.pack() timer.after(0, go_timer) button = Tkinter.Button(root, text="Save to file") button.pack() button.bind("<Button-1>", set_data_to_file) # root.mainloop()
Отредактировано 4kpt (Сен. 3, 2013 16:49:45)
Офлайн
0
спасибо, сделал немножко по своему
from Tkinter import * import datetime, threading, time # now_time = datetime.datetime.now() cur_hours = now_time.hour cur_minutes = now_time.minute cur_sec = now_time.second # def change_time(): time_date = datetime.datetime.now().strftime('%H:%M:%S') cur_Label.config(text=time_date) cur_Label.after(1000, change_time) # def write_in_file(): f = open('text.txt', 'a') f.write(now_time.strftime("\nyou went in %H:%M:%S\n")) f.close() t = threading.Timer(10.0, alert) t.start() # def alert(): tpl = Toplevel() text = Label(tpl, text="asasdasd", bg="red") text.pack() # root = Tk() # mainLabel = Label(root, text='Smoking STATISTICK', width=20, background='red', font=("Arial", 20, "bold")) butCheck = Button(root, width=30, height=2, text='Click me when you go', bg='brown') cur_Label = Label(root, font=('Segoi UI', 20, 'bold'), bg='#000000', fg='#FFFFFF') cur_Label.configure(text="now " + now_time.strftime("%H:%M:%S")) mainLabel.grid(row=1, column=1) butCheck.bind("<Button-1>", write_in_file()) butCheck.grid(row=2, column=1) cur_Label.grid(row=3, column=1) # change_time() # root.bind("<Control-z>", exit) root.mainloop()
Офлайн
63
Побойтесь бога. Все работает. Нажимаю 10 раз…
Файл прикреплен.
Мультипоточность в Tkinter с использованием threading не работает! Об этом уже писали много раз. Гляньте в раздел GUI, куда я Вас уже направлял :)
У Tkinter свой механизм организации мультипоточности и у меня он представлен в коде:
def go_timer(): timer["text"] = "{3:02d}:{4:02d}:{5:02d}".format(*time.localtime()) timer.after(1000, go_timer)
Отредактировано 4kpt (Сен. 3, 2013 22:09:25)
Прикреплённый файлы:
timer.txt (100 байт)
Офлайн
0
спасибо за помощь, частично закончил)
если интересно прикрепляю код
в планах это засунуть в трей)
Прикреплённый файлы:
Cigarets_statistics.py (2,6 KБ)
Офлайн
63
Ramon_90
Не за что :)
Идея ясна. Но Вам нужно еще немножко поработать с дизайном интерфейса. Уж очень глаз режет.
Рекомендую почитать Головач В. “Дизайн пользовательского интерфейса”.
Офлайн