诅咒替代windows

时间:2013-02-08 18:59:01

标签: python curses

在Windows中使用python的curses模块有什么替代方法吗?我查看了python文档,但是它提到了它在unix中的使用。我对这些不是很熟悉,所以有没有办法在windows中使用curses模块或者是否有一些专门用于windows的类似模块? [我正在使用Python 3.3]

7 个答案:

答案 0 :(得分:73)

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

您可以运行安装程序,并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

答案 1 :(得分:24)

最初的问题是Windows上是否存在替代诅咒。

一个答案是使用Win32 console API。如果您已经熟悉控制台API,可以使用优秀的pywin32软件包直接在Python中编程。

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

因此,我已经整合了一个高级跨平台API,以便从终端/控制台执行大多数人想要的所有操作。 asciimatics包将提供您的大部分输入和输出需求。如果您使用Linux,这是一种更人性化的编程方式。如果您使用的是Windows,那么同一个类的工作原理就是没有外部二进制依赖项。请参阅下面的示例屏幕截图:

Sample output

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

答案 2 :(得分:9)

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

你最好的选择是运行CygWin或MinGW32,两者都是“松散术语”,Linux系统+终端模拟器,它有很多你需要的二进制文件。他们可以在终端内部运行本机Linux / Unix二进制文件,并随时访问您的“主机”系统文件,因此就像使用一个带有Linux世界所有好东西的kick-ass终端来修补Windows。 你仍然需要一些关于Linux的基本知识以及命令等的工作原理,但你会弄明白的。

Screenshot of MinGW and 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()

以下是该代码的输出:

enter image description here

答案 3 :(得分:3)

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

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

的东西
pip install C:\..packetPath..\curses-2.2-cp35-none-win_amd64.whl

答案 4 :(得分:2)

以下是通过pip安装what ashes999 linked to in their answer的方法:

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

这应该可以添加到PyPI中,以便更容易安装pip(因此可以按名称而不是URL安装。)

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

官方文件提出以下内容(here在该段的底部):

  

Windows版本的Python不包含curses模块。   可以使用名为UniCurses的移植版本。你也可以   试试Fredrik Lundh写的the Console module,但不是   使用与curses相同的API,但提供游标可寻址文本输出   并完全支持鼠标和键盘输入。