我正在尝试学习Python UniCurses,以便我可以在我正在进行的项目中使用它。
以下是我正在使用的内容:
我安装了必要的物品,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?
有没有人知道我做错了什么?我花了好几个小时寻找解决方案,但没有任何工作。
非常感谢任何帮助。谢谢!
答案 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)
我希望这会对遇到此问题的其他人有所帮助。我一定是因为没有尽快赶上而自责。