web-dev-qa-db-ja.com

Windows用のCursesの代替

python windowsで使用するcursesモジュールの代替手段はありますか?pythonのドキュメントで調べましたが、 unix。私はこれらにあまり詳しくないので、Windowsでcursesモジュールを使用する方法はありますか、またはWindows用に同様のモジュールがありますか?[私はPython 3.3]を使用しています

35
Chandan

その後、あなたは運が悪いのではないかと心配しています。実際のクロスプラットフォームバージョンやcurses/ncursesのポートはありません。機能する「ダイアログ」ポートがありますが、機能は制限されています。

あなたの最善の策は、CygWinまたはMinGW32を実行することです。どちらも、「ゆるい言葉で」、必要なバイナリの多くを備えたLinuxシステム+ターミナルエミュレータです。ターミナル内でネイティブのLinux/Unixバイナリを実行し、「ホスト」システムファイルにいつでもアクセスできるので、Linuxの世界から得たものすべてを使って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

9
Torxed

Pythonの拡張機能として here からのCursesのWindowsビルドが利用可能になったことを報告できて嬉しいです。誰がそれを維持しているのかわかりません。)

インストーラーを実行して、import 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
73
ashes999

元々の質問は、Windowsにはcursesにalternativeがあるかどうかでした。

1つの答えは、 Win32コンソールAPI を使用することです。コンソールAPIに精通している場合は、優れたpywin32パッケージを使用してPythonで直接プログラミングできます。

しかし、最近のプロジェクトにはこれが低すぎることがわかりました。また、ユーザーにPDcursesのビルド/インストールを強制することに熱心ではありませんでした。また、現代のOO言語のようなPython =も。

したがって、ほとんどの人が端末/コンソールから望むすべてのことを行うために、高レベルのクロスプラットフォームAPIをまとめました。 asciimatics パッケージは、入力と出力のニーズのほとんどを提供します。 Linuxを使用している場合、これはcursesをプログラムするより人間的な方法です。 Windowsを使用している場合、同じクラスがそのまま機能し、外部のバイナリ依存関係はありません。スクリーンショットの例については、以下を参照してください。

Sample output

gallery には他にも多くのエフェクトやウィジェットがありますが、必要な追加機能がある場合はお知らせください。何がで​​きるかを確認します。

24
Peter Brittain

これは新しいソリューションではなく、以前のソリューションの単なる編集です。

pipコマンドで404エラーが発生した場合は、 http://www.lfd.uciからパケットをダウンロードしてみてください。 edu /〜gohlke/pythonlibs /#curses そして、次のように書きます

pip install C:\..packetPath..\curses-2.2-cp35-none-win_AMD64.whl
3
Lossan

これを試してみてください。私はかつてこのためにWin64ポートを作成しました(そこに統合されました)。ただし、Pythonコードを少し変更する必要があります。これは、すべてのcurses呼び出しをUNIXのネイティブPythonバージョンにリダイレクトしますが、PDCURSES.DLLを呼び出します。 Windowsの場合(DLLを個別にダウンロード)。覚えている限り、Unicodeをサポートしています。

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

2
Flo

インストール方法は 回答でashes999がリンクしたもの pipを介して:

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

これはおそらく、pipでのインストールをさらに簡単にするためにPyPIに追加する必要があります(したがって、URLではなく名前でインストールできます)。

2
ArtOfWarfare

公式ドキュメントでは、次のことを提案しています( here 段落の下部):

WindowsバージョンのPythonには curses モジュールは含まれていません。 niCurses と呼ばれる移植バージョンが利用可能です。 Consoleモジュール Fredrik Lundhによって書かれました。これはcursesと同じAPIを使用しませんが、カーソルでアドレス指定可能なテキスト出力を提供し、マウスおよびキーボード入力を完全にサポートします。

1
JeromeJ