Найти - Пользователи
Полная версия: Вывод списка файлов на текстовый дисплей
Начало » Python для новичков » Вывод списка файлов на текстовый дисплей
1
Giffr
Нужно написать программу для Raspberry Pi, которая выводит на текстовый экран (16x2) список файлов определенного разрешения из определенной директории. Чтобы потом можно было с помощью подключенного блока кнопок прокручивать этот список и выбирать файлы. К примеру выбрать файл и потом отправить его печататься.
Написал тестовую программы, которая выводит массив в виде текста, разбивая его на строки (один файл – одна строка). Проблема в том, что программа выводит массив только из двух файлов, остальные отбрасывает, соответственно листать там больше нечего. И выводится это все в виде текста, а это значит никакие действия с выведенными файлами в списке совершать невозможно.
Как решить эту проблему?

Ниже прикрепил, то что дает программа на выходе.

Код программы:
#!/usr/bin/python  
  
import RPi.GPIO as GPIO
import os  
from time import sleep 
directory = '/media/TRANSCEND'
files = os.listdir(directory) 
images = filter(lambda x: x.endswith('.jpg'), files)  
class HD44780:  
  
    def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]):  
  
        self.pin_rs=pin_rs  
        self.pin_e=pin_e  
        self.pins_db=pins_db  
  
        GPIO.setmode(GPIO.BCM)  
        GPIO.setup(self.pin_e, GPIO.OUT)  
        GPIO.setup(self.pin_rs, GPIO.OUT)  
        for pin in self.pins_db:  
            GPIO.setup(pin, GPIO.OUT)  
  
        self.clear()  
  
    def clear(self):  
          
        self.cmd(0x33) # $33 8-bit mode  
        self.cmd(0x32) # $32 8-bit mode  
        self.cmd(0x28) # $28 8-bit mode  
        self.cmd(0x0C) # $0C 8-bit mode  
        self.cmd(0x06) # $06 8-bit mode  
        self.cmd(0x01) # $01 8-bit mode  
  
    def cmd(self, bits, char_mode=False):  
          
        sleep(0.001)  
        bits=bin(bits)[2:].zfill(8)  
  
        GPIO.output(self.pin_rs, char_mode)  
  
        for pin in self.pins_db:  
            GPIO.output(pin, False)  
  
        for i in range(4):  
            if bits[i] == "1":  
                GPIO.output(self.pins_db[::-1][i], True)  
  
        GPIO.output(self.pin_e, True)  
        GPIO.output(self.pin_e, False)  
  
        for pin in self.pins_db:  
            GPIO.output(pin, False)  
  
        for i in range(4,8):  
            if bits[i] == "1":  
                GPIO.output(self.pins_db[::-1][i-4], True)  
  
  
        GPIO.output(self.pin_e, True)  
        GPIO.output(self.pin_e, False)  
  
    def message(self, text):  
          
        for char in text:  
            if char == ',':  
                self.cmd(0xC0) # переход на следующую строку  
            else:  
                self.cmd(ord(char),True)  
  
if __name__ == '__main__':  
  
    lcd = HD44780()
	images = str(images)	
    lcd.message(images

vic57
все верно. выдает весь список
files = os.listdir("/home")
f_index = 0
f_len = len(files)
while True:
    s = raw_input()
    if s == 'q': break
    elif s == 'n':
        f_index += 1
        f_index %= f_len
    elif s == 'p':
        f_index -= 1
        f_index += f_len
        f_index %= f_len
    print f_index, files[f_index]
py.user.next
Giffr
Как решить эту проблему?
Сначала напиши правильно исполнитель, который работает с этим табло. Он не должен понимать, какой текст ему подают. Он должен правильно выводить любой текст.

Вот этот метод неправильный.
Giffr
    def message(self, text):  
        
        for char in text:  
            if char == ',':  
                self.cmd(0xC0) # переход на следующую строку  
            else:  
                self.cmd(ord(char),True)
Во-первых, в тексте, выводимом на табло, может быть запятая. Поэтому он не должен заменять запятую, а должен выводить её. Во-вторых, если нужен перевод строки, то для этого нужно использовать стандартный \n. В-третьих, нужно следить за длиной сообщения, сдвигая его влево на табло, если она превышена. Для этого нужно хранить буфер внутри, который и будет выводиться.

Вот когда у тебя будет рабочий исполнитель, ты его оформишь в виде отдельного модуля и потом симпортируешь в основной модуль.
А в основном модуле у тебя должны доставаться пути, переводиться в текст и передаваться исполнителю для вывода на табло.

Фактически, табло не должно понимать, кем и какой текст ему передаётся, а тот, кто ищет пути, не должен знать, куда они дальше будут переданы.

Giffr
Чтобы потом можно было с помощью подключенного блока кнопок прокручивать этот список и выбирать файлы.
А блок кнопок тоже не должен знать про табло. У тебя должна быть программа, которая управляет тремя независимыми вещами: табло, поисковиком путей и блоком кнопок.
Это как в машине - когда ты крутишь руль, поворачиваются колёса. Но руль не знает про колёса, а колёса не знают про руль. Вот в программах всё то же самое.
vic57
и тут ошибка
images = str(images)
>>> lst = ['a','s','d','f']
>>> lst
['a', 's', 'd', 'f']
>>> str(lst)
"['a', 's', 'd', 'f']"
>>>
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