Найти - Пользователи
Полная версия: Как обновить время в консоли?
Начало » Python для новичков » Как обновить время в консоли?
1 2
Scorp1978
Здравствуйте всем, подскажите что делаю не так, почему в консоли не обновляется время?
 import datetime
import time
from unicurses import *
import sys
reload(sys)
sys.setdefaultencoding('utf8')
now = datetime.datetime.now()
period=10
stdscr = initscr() 
cbreak() 
noecho() 
curs_set(0) 
keypad(stdscr, True)
start_color()
refresh() 
init_pair(1, 2, COLOR_BLACK) 
init_pair(2, 3, COLOR_BLACK)
init_pair(3, 4, COLOR_BLACK)
init_pair(4, 5, COLOR_BLACK)
init_pair(5, 6, COLOR_BLACK)
init_pair(6, 7, COLOR_BLACK)
init_pair(7, 8, COLOR_BLACK)
init_pair(8, 9, COLOR_BLACK)
init_pair(9, 10, COLOR_BLACK)
init_pair(10, 11, COLOR_BLACK)
init_pair(11, 12, COLOR_BLACK)
init_pair(12, 13, COLOR_BLACK)
   
def create_label(mColor, sty, stx, mText, mB):
    mvaddstr(sty, stx, mText)
    mvchgat(sty, stx, len(mText), mB, mColor , None)
create_label(5, 3, 60,"Balance   Delta,%",0)
create_label(2,4,54,"USD",0)
create_label(2,5,54,"LTC",0)
create_label(2,6,54,"ZEC",0)
create_label(2,7,54,"ZEN",0)
create_label(2,8,54,"BCH",0)
create_label(2,9,54,"DASH",0)
create_label(2,10,54,"ETC",0)
create_label(2,11,54,"XMR",0)
create_label(5,3,33,"Price POLONIEX",0)
create_label(2,4,32,"USD/BTC",0)
create_label(2,5,32,"LTC/BTC",0)
create_label(2,6,32,"ZEC/BTC",0)
create_label(2,7,32,"ZEN/BTC",0)
create_label(2,8,32,"BCH/BTC",0)
create_label(2,9,32,"DASH/BTC",0)
create_label(2,10,32,"ETC/BTC",0)
create_label(2,11,32,"XMR/BTC",0)
create_label(1, 1, 49,"Current time: "+str(now.strftime("%H:%M %d-%m-%Y")),0)
getch()
endwin()
   
while True:
        time.sleep(int(period))
        create_label(1, 1, 49,"Current time: "+str(now.strftime("%H:%M %d-%m-%Y")),0)
        getch()
        endwin()
 
vic57
getch() будет ждать нажатия клавиши
вроде нужно stdscr.nodelay(1) в инициализации
Scorp1978
getch() убрал не помогло
что значит stdscr.nodelay(1) в инициализацию?
Scorp1978
 import datetime
import time
from unicurses import *
import sys
now = datetime.datetime.now()
period=10
stdscr = initscr() 
cbreak() 
noecho() 
curs_set(0) 
keypad(stdscr, True)
start_color()
refresh() 
init_pair(1, 2, COLOR_BLACK) 
  
def create_label(mColor, sty, stx, mText, mB):
    mvaddstr(sty, stx, mText)
    mvchgat(sty, stx, len(mText), mB, mColor , None)
create_label(1, 1, 49,"Current time: "+str(now.strftime("%H:%M %d-%m-%Y")),0)
getch()
endwin()
   
while True:
        time.sleep(int(period))
        create_label(1, 1, 49,"Current time: "+str(now.strftime("%H:%M %d-%m-%Y")),0)
        endwin()
убрал лишнее
Scorp1978
Вопрос открытый …

FishHook
Scorp1978
почему в консоли не обновляется время?
Ну а почему оно должно обновляться то? Где в вашей программе происходит процесс этого обновления? Ваша переменная now ничем не хуже и не лучше любой другой переменной, вы дали ей значение - результат функции datetime.datetime.now() и это значение тихонько себе лежит в памяти, никто не просил его обновляться, никто не давал ему никакого другого значения.

Scorp1978
FishHook
while True:
time.sleep(int(period))
create_label(1, 1, 49,“Current time: ”+str(now.strftime(“%H:%M %d-%m-%Y”)),0)
endwin()

бесконечный цикл на функцию create_label() которая mvaddstr(sty, stx, mText) рисует время на экране. Ну я как то так представлял.
FishHook
Scorp1978
рисует время на экране
Она рисует ровно то, что у вас находится в данный момент в переменной now. Но так как значение переменной нигде не изменяется, вы получаете одно и то же. Логично вроде.
Scorp1978
FishHook
Ничего не понимаю. Ведь str(now.strftime(“%H:%M %d-%m-%Y”)) возвращает в разный момент времени разное время, в частности каждые time.sleep(int(period)) 10 секунд.
И почему нигде не меняется, вот здесь разве не меняется str(now.strftime(“%H:%M %d-%m-%Y”))
FishHook
Scorp1978
возвращает в разный момент времени разное время
Да с чего это?

 >>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>> now
datetime.datetime(2017, 11, 28, 12, 42, 49, 781132)
>>>

ничего не меняется, удивительное дело!

Scorp1978
вот здесь разве не меняется str(now.strftime(“%H:%M %d-%m-%Y”))
что именно по-вашему делает метод strftime(“%H:%M %d-%m-%Y”)?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB