繁体   English   中英

python中的curses库

[英]Curses library in python

我有 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 中的以上代码字面上是正确的还是需要一些改进?

  1. 是的,您将不得不更改参数位置。 setsyx(y, x)gotoxy(x, y)

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

  3. 这很可能与 unicode 格式有关。 您可以尝试将以下行添加到 python 文件的顶部(在#!/usr/bin/python行之后),因为这会强制 python 在 String 对象中使用 utf-8 编码:
     # -*- coding: utf-8 -*-
  4. 你的 Python 代码对我来说看起来已经足够了,我不会担心。
  1. 是的。
  2. Windows 的重复诅咒替代方案
  3. 大概您使用的是 Python 2.x,因此您的字符是字节,因此依赖于编码。 特定数值的含义由所使用的编码决定。 很可能您在 Linux 上使用 utf8,而在 Windows 程序中使用非 utf8,因此您无法比较这些值。 在curses 中,您应该使用curses.ACS_HLINEcurses.ACS_VLINE
  4. 您不能混合使用printcurses功能,它会弄乱显示。 改用curses.addch或变体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM