python - 在 python 类中使用队列 - ''function' 对象不可下标
问题描述
我已经创建了一个用于在 16x2 LVC/VFD 上创建和渲染菜单的库,并添加了一些用于在显示器上滚动消息的功能。这很好用,但我遇到的问题是,如果您在发生这种情况时尝试显示另一条消息,则显示将损坏。我能想出的最佳解决方案是使用队列,因此每个消息函数都排在下一个消息函数后面。但是,我在线程中遇到了问题。
这是我的工人阶级的开始:
class RpiLCDMenu(BaseMenu):
def __init__(self, pin_rs=26, pin_e=19, pins_db=[13, 6, 5, 21], GPIO=None, scrolling_menu=False):
"""
Initialize menu
"""
self.lcd_queue = queue.LifoQueue(maxsize=0)
self.scrolling_menu = scrolling_menu
self.pin_rs = pin_rs
self.pin_e = pin_e
self.pins_db = pins_db
self.GPIO = GPIO
self.lcd = RpiLCDHwd(self.pin_rs, self.pin_e, self.pins_db, self.GPIO)
self.lcd.initDisplay()
# clear it once in case of corruption
self.clearDisplay()
self.message("Hello")
super(self.__class__, self).__init__()
但是,如果我改用队列并尝试使用它,液晶屏仍然会被初始化,但消息失败并显示:
'function' 对象不可下标
不工作:
class RpiLCDMenu(BaseMenu):
def __init__(self, pin_rs=26, pin_e=19, pins_db=[13, 6, 5, 21], GPIO=None, scrolling_menu=False):
"""
Initialize menu
"""
self.lcd_queue = queue.LifoQueue(maxsize=0)
self.scrolling_menu = scrolling_menu
self.pin_rs = pin_rs
self.pin_e = pin_e
self.pins_db = pins_db
self.GPIO = GPIO
# todo implement message queue to avoid corruption
self.lcd_queue_processor()
super(self.__class__, self).__init__()
def lcd_queue_processor(self):
print("queue started")
self.lcd = RpiLCDHwd(self.pin_rs, self.pin_e, self.pins_db, self.GPIO)
self.lcd.initDisplay()
# clear it once in case of corruption
self.clearDisplay()
self.message("Hello")
while True:
print("running")
items = self.lcd_queue.get()
func = items[0]
args = items[1:]
func(*args)
我不确定为什么消息功能在这种情况下停止工作。
我绝不是开发人员,所以任何帮助表示赞赏!完整的图书馆...
解决方案
看起来您正在将一个函数推入队列。问题在
items = self.lcd_queue.get()
func = items[0]
args = items[1:]
get()
仅返回您无法索引的单个项目(在您的情况下为函数)。
推荐阅读
- kubernetes-helm - Helm Go 模板将现有值与外部 json 文件相结合
- python - 使用列值查找列名
- python - 在 Python 中的函数之间传递变量,然后返回菜单
- react-native - 添加动态标签导航屏幕的正确方法:createMaterialTopTabNavigator
- excel - 将 Excel 电子表格中的 TXT 文件导入特定单元格
- c# - Ef Core 3.1 Generate primary key by properties
- c# - WPF Scrollviewer 不允许我滚动并认为它的高度是无限的
- php - Docker PHP ext启用命令失败
- python - 有没有办法为 Jupyter Notebook 制作桌面快捷方式?
- git - 带有右箭头的 github 存储库文件夹是什么意思?