【问题标题】:Curses library in pythonpython中的诅咒库
【发布时间】:2014-04-23 19:47:41
【问题描述】:

我有 C 代码,它在屏幕中心绘制一条垂直线和一条水平线,如下所示:

#include<stdio.h>
#define HLINE for(i=0;i<79;i++)\
                  printf("%c",196);
#define VLINE(X,Y) {\
                     gotoxy(X,Y);\
                     printf("%c",179);\
                   }
int main()
{
  int i,j;
  clrscr();
  gotoxy(1,12);
  HLINE
  for(y=1;y<25;y++)
      VLINE(39,y)
  return 0;
}

我正在尝试在 python 版本 2.7.6 中进行字面转换:

import curses
def HLINE():
    for i in range(0,79):
        print "%c" % 45
def VLINE(X,Y):
    curses.setsyx(Y,X)
    print "%c" % 124
curses.setsyx(12,1)
HLINE()
for y in range(1,25):
    VLINE(39,y)

我的问题:

1.setsyx函数中是否需要改变x和y的位置,即gotoxy(1,12)是setsyx(12,1)?

2.Curses 模块仅适用于 unix,不适用于 windows?如果是,那么 windows(python 2.7.6) 呢?

3.为什么179和196的字符值在python中是�,而在C中却是|和 - 分别?

4.以上python中的代码是正确的还是需要改进?

【问题讨论】:

标签: python


【解决方案1】:
  1. 是的,您必须更改参数位置。 setsyx(y, x)gotoxy(x, y)

  2. 有可用的 Windows 库。我在这里找到最有用的二进制文件:link

  3. 这很可能与 unicode 格式有关。您可以尝试做的是将以下行添加到您的 python 文件的顶部(在#!/usr/bin/python 行之后),因为这会强制 python 在 String 对象中使用 utf-8 编码:
    # -*- coding: utf-8 -*-
  4. 在我看来,您的 Python 代码已经足够接受,我不会担心。

【讨论】:

    【解决方案2】:
    1. 是的。
    2. Curses alternative for windows 的副本
    3. 推测您使用的是 Python 2.x,因此您的字符是字节,因此与编码有关。特定数值的含义由使用的编码决定。您很可能在 Linux 上使用 utf8,而在 Windows 程序中使用非 utf8,因此您无法比较这些值。在 curses 中,您应该使用 curses.ACS_HLINEcurses.ACS_VLINE
    4. 你不能混用printcurses函数,它会弄乱显示。请改用curses.addch 或变体。

    【讨论】:

      猜你喜欢
      • 2012-04-08
      • 2013-11-22
      • 2017-03-19
      • 2012-01-24
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多