我有一个adafruit液晶屏幕,并希望按钮能够导航下行和向上的文字从一个文本文件。
我花了一整天的时间来解决这个问题。
到目前为止,我有这样一个:
if lcd.is_pressed(LCD.UP):
lcd.clear()
text = txt.readline()
lcd.message(("%s") % text)
print "%s" % text
time.sleep (0.5)
elif lcd.is_pressed(LCD.DOWN):
lcd.clear()
# this is where I need help can you do read line last or somthing
text = txt.readline()
lcd.message(("%s") % text)
print "%s" % text
time.sleep (0.5)我有所有的位驱动液晶显示工作,但只能向下文件。
发布于 2015-09-26 02:10:54
Python提供了 module,虽然内置它是为了支持友好的回溯,但它可以很好地处理大多数文本文件。它将将所有行读入内存和实时读取文件之间的区别分开,它的设计基本上适合您正在考虑的场景(在相邻行之间移动,帮助缓存)。
import linecache
...
lineno = 0
txtfilename = '...'
...
if lcd.is_pressed(LCD.UP) or lcd.is_pressed(LCD.DOWN):
lineno += 1 if lcd.is_pressed(LCD.UP) else -1 # These numbers match the behavior in your example, but I think you may want to reverse them, so UP goes up one line...
lcd.clear()
text = linecache.getline(txtfilename, lineno)
lcd.message(("%s") % text)
print "%s" % text
time.sleep (0.5)发布于 2015-09-25 22:33:13
您可以将整个文件作为一行数组加载到内存中,并使用指针(整数,最初为0)。每次按下按钮时,增加/减少指针,并显示相应的行。
如果文件太大,无法一次在内存中加载,则只需记录最后的N个文件指针位置(使用txt.tell())。当按下“后退”按钮时,将指针重置到所需的位置(使用txt.seek())并读取该行。当按下前向按钮时,请正常读取直线并记录指针位置。
发布于 2015-09-25 22:34:17
如果文本文件的大小不足以容纳内存,最简单的方法是将整个文件读入列表(我假设txt是打开的文件引用):
text = txt.readlines()现在text[0]将是您文件的第一行,text[1]是第二行等等。您可以将变量设置为0,我们将其称为line,然后根据按下的按钮增加或减少值,每次将正确的行发送到LCD
lcd.message(("%s") % text[line])https://stackoverflow.com/questions/32791111
复制相似问题