0

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

这是我正在使用的:

  • 蟒蛇 2.7
  • 视觉工作室 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 pass between files?

有谁知道我做错了什么?我花了几个小时寻找解决方案,但没有任何效果。

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

4

1 回答 1

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

我希望这对遇到此问题的其他人有所帮助。我肯定会因为没有早点赶上而责备自己。

于 2015-10-08T19:25:38.123 回答