Форум сайта python.su
0
Думаю все знают, как выглядит прогресс бар в терминале линукса. Интересует такой вопрос, можно ли в питоне писать программы с такой же динамикой. Допустим мне нужно показать 1, 2, 3, 4, 5 и вместо вывода цифр на новую строку с каждой секундой, сделать так, чтобы цифра менялась в одном и том же месте. Надеюсь вы поняли о чем я 
Офлайн
61
отталкивайтесь от
from sys import stdout from time import sleep text = '12345' for i in range(len(text)): stdout.write(text[i]) stdout.flush() sleep(1) stdout.write("\r \r\n")
Офлайн
5
Думал будет легкая задачка, которую я за 15 минут решу. Сидел 5 часов, в итоге получилось в PyQt5 сделать динамический интерфейс (если я правильно понял вашу трактовку дин.интерфейса) результат программы можно посмотреть в приложенной гифке.
Нажимаем кнопку “начать” и у нас идет отсчет.
Получается, динамический интерфейс сделать можно, правда придется прибегать к многопотоковости. Делал приложение 5 часов, потому что был вообще без понятия как это делается (многопоточность). Пробовал сделать однопоточное приложение, у меня не получись, когда вызывал sleep() приложение засыпало и ничего нельзя было с ним делать. Думаю, все же можно даже без потоков осуществить дин.интерфейс, т.е. вообще не использовать этот sleep(), но не уверен в этом.
Думаю, еще это можно сделать в Pygame, правда я с ним почти не знаком.
Отредактировано Lestoroer (Апрель 13, 2016 14:07:15)
Прикреплённый файлы:
Animation.gif (42,9 KБ)
Офлайн
0
ZerGНе знаю как это работает, но сначала строка приняла значение 12345, поочередно, когда скрипт закончился 1 и 2 пропали. Tак и было запланировано?
отталкивайтесь от
Офлайн
0
LestoroerТолько начинаю с питоном разбираться, но мне кажется, что в терминале линукса это делается проще, поскольку для этого используется псевдографический интерфейс, насколько я понимаю.
Думал будет легкая задачка, которую я за 15 минут решу. Сидел 5 часов, в итоге получилось в PyQt5 сделать динамический интерфейс (если я правильно понял вашу трактовку дин.интерфейса) результат программы можно посмотреть в приложенной гифке. Нажимаем кнопку “начать” и у нас идет отсчет.Получается, динамический интерфейс сделать можно, правда придется прибегать к многопотоковости. Делал приложение 5 часов, потому что был вообще без понятия как это делается (многопоточность). Пробовал сделать однопоточное приложение, у меня не получись, когда вызывал sleep() приложение засыпало и ничего нельзя было с ним делать. Думаю, все же можно даже без потоков осуществить дин.интерфейс, т.е. вообще не использовать этот sleep(), но не уверен в этом.Думаю, еще это можно сделать в Pygame, правда я с ним почти не знаком.
Офлайн
5
demigodНу и в питоне это несложно. Я просто совсем не был знаком с потоками, а писал в PyQt5, а для него нету вообще книг, только на PyQt4 есть, вот с этим и возникли сложности.
import time y = 0 x = 5 while y < x: y = y+1 print(str(y)) time.sleep(1)
Офлайн
186
> Допустим мне нужно показать 1, 2, 3, 4, 5 и вместо вывода цифр на новую строку с каждой секундой, сделать так, чтобы цифра менялась в одном и том же месте.
> что если бы была программа с граф. интерфейсом, то там так же бы выводились эти 1,2,3,4,5, но только в “одно” место программы, а не построчно.
>>> for i in range(5): ... stdout.write("\b") ... stdout.write(str(i)) ... sleep(1) 4
Отредактировано Rodegast (Апрель 13, 2016 15:56:07)
Офлайн
857
LestoroerДа, раньше потоков не было, а прогрессбары были. Можешь и сейчас какие-нибудь коносольные программы посмотреть, многие исходники открыты.
Думаю, все же можно даже без потоков осуществить дин.интерфейс
Офлайн