Windowsで使用するPython用のcursesモジュールの代替手段はありますか?私はPythonのドキュメントを調べましたが、UNIXで使用するためのものであると記載されています。私はこれらにあまり精通していないので、Windowsでcursesモジュールを使用する方法はありますか、それともWindows専用の同様のモジュールがありますか?[Python3.3を使用しています]
7 に答える
ここから、Windows 上の Python の拡張機能として利用できる Curses の Windows ビルドがあることを報告できることをうれしく思います。(私が書いたわけではありません。誰が管理しているのかわかりません。)
インストーラーを実行して、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
最初の質問は、Windows で curses に 代わるものがあるかどうかでした。
1 つの答えは、Win32 コンソール APIを使用することです。コンソール API に慣れている場合は、優れた pywin32 パッケージを使用して Python で直接プログラミングできます。
しかし、最近のプロジェクトにはこのレベルが低すぎることがわかりました。また、ユーザーに PDcurses のビルド/インストールを強制することにもあまり熱心ではありませんでした。さらに、Python のような最新の OO 言語に対しても curses のレベルが低すぎることがわかりました。
そのため、ほとんどの人が端末/コンソールから必要とするすべてのことを行うために、高レベルのクロスプラットフォーム API をまとめました。asciimaticsパッケージは、入力と出力のニーズのほとんどを提供します。Linux を使用している場合、これは curses をプログラムするためのより人間的な方法です。Windows を使用している場合、同じクラスが外部バイナリ依存関係なしでそのまま機能します。スクリーンショットの例については、以下を参照してください。
ギャラリーで見つけることができる他の多くの効果とウィジェットがありますが、必要な追加機能がある場合はお知らせください。できることを確認します。
それからあなたは運が悪いと思います。curses/ncurses の実際のクロスプラットフォーム バージョンやポートはありません。動作する「対話」ポートがありますが、機能が制限されています。
あなたの最善の策は、CygWin または MinGW32 を実行することです。どちらも「大まかに」言えば、必要なバイナリの多くを備えた Linux システム + ターミナル エミュレーターです。ターミナル内でネイティブの Linux/Unix バイナリを実行し、「ホスト」システム ファイルにいつでもアクセスできるため、Linux の世界から得たすべての利点を備えたキック アス ターミナルで Windows にパッチを適用するようなものです。Linux の基本的な知識と、コマンドなどのしくみが必要ですが、理解できるはずです。
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()
そのコードの出力は次のとおりです。
あなたはこれを試すことができます。私はかつてこれのためにWin64ポートを作成しました(そこにマージされました)。ただし、Python コードを少し異なる方法で記述する必要があります。これは UNIX ではすべての curses 呼び出しをネイティブの Python バージョンにリダイレクトしますが、Windows では PDCURSES.DLL を呼び出します (DLL を個別にダウンロードします)。私が覚えている限り、ユニコードをサポートしています:
ピップ経由で回答にリンクされているashes999をインストールする方法は次のとおりです。
pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl
pip でのインストールをさらに簡単にするために、おそらくこれを PyPI に追加する必要があります (したがって、URL ではなく名前でインストールできます)。
これは新しいソリューションではなく、以前のソリューションを編集しただけです。
pipコマンドで 404 エラーが発生した場合は、http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses からパケットをダウンロードして、次の ように記述します。
pip install C:\..packetPath..\curses-2.2-cp35-none-win_amd64.whl