首页 > 解决方案 > 从 python 控制台菜单获取返回值

问题描述

如何使用任何用户选择的值,或控制台菜单项中函数调用的返回值?

我已经确定我可以检查菜单是否存在,但我不确定如何询问它并查找操作、返回值或选择。

基于 PyPi 提供的使用示例

from consolemenu import *
from consolemenu.items import *

import logging
logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)

def add(number):
    return number+number

m = ConsoleMenu('Title')
item = MenuItem('Item one')
item_two = MenuItem('Item Two')
func = FunctionItem('add numbers', add, [5])

m.append_item(item)
m.append_item(item_two)
m.append_item(func)
logging.debug('starting up')
m.start()

while m.is_alive():
    # this is where the work gets done, but I'm not sure how to go about doing that.
    pass

m.join()

文档中有很多示例展示了从用户那里获得一次性响应的超级基本方法,但我无法找到一个展示如何使用正在运行的菜单的工作示例。

标签: python

解决方案


我也遇到了这个,这是我想出的解决方案:

访问正在运行的菜单的最简单方法可能是action覆盖FunctionItem.

from consolemenu import *
from consolemenu.items import *

import logging

logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)


class MyFunctionItem(FunctionItem):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def action(self):
        super().action()
        result = self.get_return()
        item_three = MenuItem(f"Result: {result}")
        m.append_item(item_three)


def add(number):
    return number + number


m = ConsoleMenu("Title")
item = MenuItem("Item one")
item_two = MenuItem("Item Two")
func = MyFunctionItem("add numbers", add, [5])

m.append_item(item)
m.append_item(item_two)
m.append_item(func)
logging.debug("starting up")

m.show()

这样也不需要讨厌的繁忙循环。


推荐阅读