如何在Visual Studio 2013中使用UniCurses

时间:2015-10-08 01:50:27

标签: python python-2.7 curses python-curses pdcurses

我正在尝试学习Python UniCurses,以便我可以在我正在进行的项目中使用它。

以下是我正在使用的内容:

  • Python 2.7
  • Visual Studio 2013
  • Visual Studio 2013的Python工具

我安装了必要的物品,UniCurses和PDCurses。它似乎从Python解释器和IDLE中工作得很好。但不是在Visual Studio中......

我一直收到错误消息,说 pdcurses.dll 丢失了。所以我决定将PDCurses文件复制到我的项目的根目录中。这似乎解决了丢失的 pdcurses.dll 错误。

但是,UniCurses仍然无法正常工作。当我尝试使用任何UniCurses函数时,我得到AttributeError: 'c_void_p' object has no attribute 'TheAttribute'。除了我第一次初始化对象时,每个UniCurses函数都会发生这种情况:stdscr = unicurses.initscr()

所以我开始研究一些教程,以确保我正确安装了所有内容。我按照GitHub上的UniCurses README的说明进行了操作:https://www.youtube.com/watch?v=6u2D-P-zuno以及YouTube上的这个安装教程:https://www.youtube.com/watch?v=6u2D-P-zuno我仍然无法让它工作。

我确实在这里发现了一个与我的问题有些相似的帖子,但对我的问题并没有什么帮助。您可以在此处查看:(Python Unicurses) stdscr not passing between files?

有没有人知道我做错了什么?我花了好几个小时寻找解决方案,但没有任何工作。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我明白了!不幸的是,对于我来说,我过于专注于按照教程中的示例忽略了潜在的问题。当我在这里找到类似的帖子时(我的问题中包含链接),我应该已经找到了,但我认为我遇到的问题是不同的。

基本上,我认为UniCurses和/或PDCurses设置不正确,反过来导致方法无法访问。事实并非如此。相反,我正在遵循的教程中的代码实际上是错误地访问了这些方法(不知道为什么它适用于它们,可能是旧版本?)。

以下是一个例子:

import unicurses

# Init screen object
stdscr = unicurses.initscr()

# Incorrect way to access methods:
stdscr.addstr('Hello World!')

# Correct way to access methods:
unicurses.addstr('Hello World!')

from unicurses import *

# Init screen object
stdscr = initscr()

# Incorrect way to access methods:
stdscr.addstr('Hello World!')

# Correct way to access methods:
addstr('Hello World!')

在我在网上发现这个UniCurses安装测试脚本之前,我并没有真正抓住这个问题:

# Script to test the installation of UniCurses
from unicurses import *

stdscr = initscr() # initializes the standard screen
addstr('Hello World!\n')
addch(ord('A') | A_BOLD)
addstr(' single bold letter\n')
attron(A_BOLD) # Turns on attribute
addstr('\n\nBold string')
attroff(A_BOLD)
addstr("\nNot bold now")
mvaddch(7, 10, 66); #B at row 7, col 10
addstr(' - single letter at row 7, col 10')

start_color()
init_pair(1, COLOR_RED, COLOR_GREEN) # Specifies foreground and background pair 1
init_pair(2, COLOR_YELLOW, COLOR_RED)

attron(COLOR_PAIR(1))
mvaddstr(15, 12, 'Red on green at row 15, col 12')
attroff(COLOR_PAIR(1))

attron(COLOR_PAIR(2))
addstr('\n\nYellow on red')
addstr('\n\nPress up arrow!')
attroff(COLOR_PAIR(2))

cbreak() # Gets raw key inputs but allows CRTL+C to work
keypad(stdscr, True)  # Get arrow keys etc.
noecho() # Do not display automatically characters for key presses
a = getch() # Gets the key code
if a == KEY_UP:
    beep()
    clear()
    addstr('Beep! Any key to quit.')
a = getch()

(来源:http://www.pp4s.co.uk/main/tu-python-unicurses.html

我希望这会对遇到此问题的其他人有所帮助。我一定是因为没有尽快赶上而自责。