Я немного изменил ваш код. Теперь это работает! Сначала прокомментированная версия:
Первая строка сообщает Python, что этот исходный файл содержит символы utf-8
# -*- coding: utf-8 -*-
Затем вам нужно импортировать все, что вы в конечном итоге будете использовать. Вам не нужно делать это в начале файла, как это, но я парень C, и мне это нравится ...
import threading
import sys
import time
import os
spinner="▏▎▍▌▋▊▉█▉▊▌▍▎" #utf8
#convert the utf8 spinner string to a list
chars=[c.encode("utf-8") for c in unicode(spinner,"utf-8")]
class spin(threading.Thread): # not sure what to put in the brackets was (threading.Thread, but now im not sure whether to use processes or not)
Threading отлично подходит для этого
def __init__(self):
super(spin,self).__init__() # dont understand what this does
Поскольку вы переопределяете метод многопоточности init . В связи с вашим собственным init вам нужно вызвать init родительского класса, чтобы убедиться, что объект правильно инициализирован.
self._stop = False
Я изменил это на логическое значение. Поток. Для этого события излишни.
def run (self):
pos=0
while not self._stop:
sys.stdout.write("\r"+chars[pos])
sys.stdout.flush()
time.sleep(.15)
pos+=1
pos%=len(chars)
def cursor_visible(self):
os.system("tput cvvis")
def cursor_invisible(self):
os.system("tput civis")
def stop(self):
self._stop = True #the underscore makes this a private variable ?
В некотором роде. Это на самом деле не личное, подчеркивание просто говорит всем, что это плохая форма доступа к нему.
def stopped(self):
return self._stop == True
И, наконец, небольшой тест кода:
if __name__ == "__main__":
s = spin()
s.cursor_invisible()
s.start()
a = raw_input("")
s.stop()
s.cursor_visible()
А вот и некомментированная версия ...
# -*- coding: utf-8 -*-
import threading
import sys
import time
import os
spinner="▏▎▍▌▋▊▉█▉▊▌▍▎" #utf8
#convert the utf8 spinner string to a list
chars=[c.encode("utf-8") for c in unicode(spinner,"utf-8")]
class spin(threading.Thread): # not sure what to put in the brackets was (threading.Thread, but now im not sure whether to use processes or not)
def __init__(self):
super(spin,self).__init__() # dont understand what this does
self._stop = False
def run (self):
pos=0
while not self._stop:
sys.stdout.write("\r"+chars[pos])
sys.stdout.flush()
time.sleep(.15)
pos+=1
pos%=len(chars)
def cursor_visible(self):
os.system("tput cvvis")
def cursor_invisible(self):
os.system("tput civis")
def stop(self):
self._stop = True #the underscore makes this a private variable ?
def stopped(self):
return self._stop == True
if __name__ == "__main__":
s = spin()
s.cursor_invisible()
s.start()
a = raw_input("")
s.stop()
s.cursor_visible()