如何在Python中创建交互式文本菜单?

时间:2016-07-09 15:40:13

标签: python

我不确定该怎么称呼它。我想知道如何制作其中一个菜单,您可以使用箭头键突出显示您的选项,然后按Enter键接受它。

3 个答案:

答案 0 :(得分:2)

提问者承认不确定如何清楚地陈述他们所追求的内容(我知道这种感觉!)并且在发布问题后 但鉴于他们的评论暗示他们是在 文本 之后,我相信python-prompt-toolkit之类的内容,用于在许多Python中提供基于文本的自动完成功能项目,可以提供解决方案。

有文档here,其中包含使用WordCompleter的示例:

from prompt_toolkit import prompt
from prompt_toolkit.completion import WordCompleter

html_completer = WordCompleter(['<html>', '<body>', '<head>', '<title>'])
text = prompt('Enter HTML: ', completer=html_completer)
print('You said: %s' % text)

产生如下输出:

enter image description here

上面的示例仍然相对像仅仅在文本中呈现的ComboBox,但是有一些方法可以生成其他样式的菜单,如图库here中所示。

如果这还不够,那么另一个选项是查看包裹ncurses的内容,例如https://bitbucket.org/npcole/npyscreenhttp://urwid.org/

答案 1 :(得分:0)

我认为你的意思是Combobox。 以下是基于thisPyQt的简短示例:

from PyQt4 import QtGui, QtCore
import sys

class CheckableComboBox(QtGui.QComboBox):
    def __init__(self):
        super(CheckableComboBox, self).__init__()
        self.view().pressed.connect(self.handleItemPressed)
        self.setModel(QtGui.QStandardItemModel(self))

    def handleItemPressed(self, index):
        item = self.model().itemFromIndex(index)
        if item.checkState() == QtCore.Qt.Checked:
            item.setCheckState(QtCore.Qt.Unchecked)
        else:
            item.setCheckState(QtCore.Qt.Checked)

class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(QtGui.QMainWindow,self).__init__()
        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()
        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)
        self.toolbutton = QtGui.QToolButton(self)
        self.toolbutton.setText('Select Categories ')

        self.toolmenu = QtGui.QMenu(self)
        for i in range(3):
            action = self.toolmenu.addAction("Category " + str(i))
            action.setCheckable(True)
        self.toolbutton.setMenu(self.toolmenu)
        self.toolbutton.setPopupMode(QtGui.QToolButton.InstantPopup)
        myBoxLayout.addWidget(self.toolbutton)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    combo = Dialog_01()
    combo.show()
    combo.resize(480,320)
    sys.exit(app.exec_())

答案 2 :(得分:0)

您的问题(包括您提供的示例)的答案是诅咒。该软件包在很大程度上取决于基础操作系统。因此,如果平台独立性是关键,那么您将遇到问题。例如,有一个Windows端口UniCurses,但是您的实现必须在必要时处理此切换。

在curses之上还有一些工具。四个例子乌尔维德。

我个人对curses有一定的经验,如果您将Linux作为基础系统,那么如果您的要求既稳健又简单,这可能会很有趣。像您的菜单要求。我不得不说,学习曲线相当陡峭。

希望这会有所帮助。但是鉴于这个广泛的问题,因此是现阶段唯一需要提供的详细信息。