41

python 有没有其他的curses模块可以在windows中使用?我在 python 文档中查找,但其中提到它用于在 unix 中使用。我对这些不太熟悉,所以有没有办法在 windows 中使用 curses 模块,或者有一些专门用于 windows 的类似模块?[我正在使用 Python 3.3]

4

7 回答 7

76

我很高兴地报告,现在有一个 Windows 版本的 Curses 可作为 Windows 上的 Python 的扩展,来自这里。(不是我写的,也不知道是谁维护的。)

您可以运行安装程序,并import curses让 curses 运行。(已在 64 位 Windows 7 和 Windows 8 上验证。)

@ArtOfWarfare 指出,您可以通过 Pip 安装它,并带有以下推荐:

pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl
于 2013-11-08T03:50:21.040 回答
34

最初的问题是在 Windows 上是否有替代诅咒的方法。

一种答案是使用Win32 控制台 API。如果您已经熟悉控制台 API,则可以使用出色的 pywin32 包直接在 Python 中进行编程。

但是,我发现这对于我最近的项目来说太低了。我也不太热衷于强迫我的用户构建/安装 PDcurses,此外,我还发现对于像 Python 这样的现代 OO 语言来说,curses 的级别太低了。

因此,我整合了一个高级跨平台 API 来完成大多数人想要从他们的终端/控制台完成的所有事情。asciimatics包将满足您的大部分输入和输出需求。如果您使用的是 Linux,这是一种更人性化的 curses 编程方式。如果您在 Windows 上,则相同的类可以正常工作,没有外部二进制依赖项。请参阅下面的示例屏幕截图:

样本输出

您可以在图库中找到许多其他可用的效果和小部件,但如果您需要额外的功能,请告诉我,我会看看我能做些什么。

于 2015-09-03T20:50:56.113 回答
11

那你恐怕就不​​走运了。没有真正的跨平台版本或curses / ncurses端口,有一个“对话”端口可以工作,但功能有限。

最好的办法是运行 CygWin 或 MinGW32,用“松散的术语”来说,两者都是 Linux 系统+终端仿真器,其中包含您需要的许多二进制文件。他们可以在终端内运行本机 Linux/Unix 二进制文件并随时访问您的“主机”系统文件,所以这就像用一个踢屁股的终端为 Windows 打补丁,里面装满了您来自 Linux 世界的所有好东西。你仍然需要一些 Linux 的基本知识以及命令等如何工作,但你会弄明白的。

MinGW 和 CygWin 的截图

这是一个 Pyglet GUI 示例:

import pyglet
from pyglet.gl import *

class main (pyglet.window.Window):
    def __init__ (self):
        super(main, self).__init__(800, 600, fullscreen = False)
        self.button_texture = pyglet.image.load('button.png')
        self.button = pyglet.sprite.Sprite(self.button_texture)

        ## --- If you'd like to play sounds:
        #self.sound = pyglet.media.load('music.mp3')
        #self.sound.play()

        self.alive = 1

    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def on_mouse_press(self, x, y, button, modifiers):
        if x > self.button.x and x < (self.button.x + self.button_texture.width):
            if y > self.button.y and y < (self.button.y + self.button_texture.height):
                self.alive = 0

    def on_key_press(self, symbol, modifiers):
        if symbol == 65307: # [ESC]
            self.alive = 0

    def render(self):
        self.clear()
        self.button.draw()
        self.flip()

    def run(self):
        while self.alive == 1:
            self.render()

            # -----------> This is key <----------
            # This is what replaces pyglet.app.run()
            # but is required for the GUI to not freeze
            #
            event = self.dispatch_events()


x = main()
x.run()

这是该代码的输出:

在此处输入图像描述

于 2013-02-08T19:08:40.723 回答
4

以下是如何通过 pip在他们的答案中安装ashes999 链接的内容:

pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl

这可能应该被添加到 PyPI 以使 pip 安装更加容易(因此它可以通过名称而不是 URL 安装。)

于 2015-02-06T15:03:09.160 回答
4

你可以试试这个。我曾经为此做过Win64端口(在那里合并)。但是,您需要编写一些不同的 Python 代码。这会将所有 curses 调用重定向到 UNIX 上的本机 Python 版本,但在 Windows 上调用 PDCURSES.DLL(单独下载 DLL)。据我记得它支持unicode:

http://sourceforge.net/projects/pyunicurses/

于 2015-09-24T13:30:43.013 回答
4

这不是一个新的解决方案,只是对前一个解决方案的编辑。

如果pip命令出现 404 错误,您可以尝试从http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses下载数据包 ,然后编写类似

pip install C:\..packetPath..\curses-2.2-cp35-none-win_amd64.whl
于 2017-06-04T15:51:17.890 回答
2

官方文档提出以下建议(段落底部):

Windows 版本的 Python 不包含curses模块。有一个名为UniCurses的移植版本可用。您还可以尝试Fredrik Lundh 编写的 Console 模块,它不使用与 curses 相同的 API,但提供光标可寻址的文本输出和对鼠标和键盘输入的完全支持。

于 2016-08-02T18:11:42.683 回答