Найти - Пользователи
Полная версия: Меняющаяся строка (Динамический интерфейс)
Начало » Python для новичков » Меняющаяся строка (Динамический интерфейс)
1
demigod
Думаю все знают, как выглядит прогресс бар в терминале линукса. Интересует такой вопрос, можно ли в питоне писать программы с такой же динамикой. Допустим мне нужно показать 1, 2, 3, 4, 5 и вместо вывода цифр на новую строку с каждой секундой, сделать так, чтобы цифра менялась в одном и том же месте. Надеюсь вы поняли о чем я
ZerG
отталкивайтесь от

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")
Lestoroer
Думал будет легкая задачка, которую я за 15 минут решу. Сидел 5 часов, в итоге получилось в PyQt5 сделать динамический интерфейс (если я правильно понял вашу трактовку дин.интерфейса) результат программы можно посмотреть в приложенной гифке.
Нажимаем кнопку “начать” и у нас идет отсчет.
Получается, динамический интерфейс сделать можно, правда придется прибегать к многопотоковости. Делал приложение 5 часов, потому что был вообще без понятия как это делается (многопоточность). Пробовал сделать однопоточное приложение, у меня не получись, когда вызывал sleep() приложение засыпало и ничего нельзя было с ним делать. Думаю, все же можно даже без потоков осуществить дин.интерфейс, т.е. вообще не использовать этот sleep(), но не уверен в этом.
Думаю, еще это можно сделать в Pygame, правда я с ним почти не знаком.
demigod
ZerG
отталкивайтесь от
Не знаю как это работает, но сначала строка приняла значение 12345, поочередно, когда скрипт закончился 1 и 2 пропали. Tак и было запланировано?
demigod
Lestoroer
Думал будет легкая задачка, которую я за 15 минут решу. Сидел 5 часов, в итоге получилось в PyQt5 сделать динамический интерфейс (если я правильно понял вашу трактовку дин.интерфейса) результат программы можно посмотреть в приложенной гифке. Нажимаем кнопку “начать” и у нас идет отсчет.Получается, динамический интерфейс сделать можно, правда придется прибегать к многопотоковости. Делал приложение 5 часов, потому что был вообще без понятия как это делается (многопоточность). Пробовал сделать однопоточное приложение, у меня не получись, когда вызывал sleep() приложение засыпало и ничего нельзя было с ним делать. Думаю, все же можно даже без потоков осуществить дин.интерфейс, т.е. вообще не использовать этот sleep(), но не уверен в этом.Думаю, еще это можно сделать в Pygame, правда я с ним почти не знаком.
Только начинаю с питоном разбираться, но мне кажется, что в терминале линукса это делается проще, поскольку для этого используется псевдографический интерфейс, насколько я понимаю.
Lestoroer
demigod
Ну и в питоне это несложно. Я просто совсем не был знаком с потоками, а писал в PyQt5, а для него нету вообще книг, только на PyQt4 есть, вот с этим и возникли сложности.
Если вы просто хотите вывести цифры 1,2,3,4,5 через функцию print, то сойдет вот такой код :
import time
y = 0
x = 5
while y < x:
    y = y+1
    print(str(y))
    time.sleep(1)
На основе этого кода становится понятно (да и у товарища ZerG тоже самое)
, что если бы была программа с граф. интерфейсом, то там так же бы выводились эти 1,2,3,4,5, но только в “одно” место программы, а не построчно.
Rodegast
> Допустим мне нужно показать 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
P.S. Если интересует псевдографика - читай про curses
py.user.next
Lestoroer
Думаю, все же можно даже без потоков осуществить дин.интерфейс
Да, раньше потоков не было, а прогрессбары были. Можешь и сейчас какие-нибудь коносольные программы посмотреть, многие исходники открыты.
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