当前位置: 首页 > 面试题库 >

如何在python中更改指针的位置?

华星文
2023-03-14
问题内容

我想在程序获取某些特殊单词的同时,实时地绘制它们。所以我写了一段很好的代码,但是我仍然不能用键盘上的移动键改变指针的位置,并从我移动的位置开始输入文字。谁能给我一个提示,怎么做?这是代码:

from colorama import init
from colorama import Fore
import sys
import msvcrt
special_words = ['test' , 'foo' , 'bar', 'Ham']
my_text = ''
init( autoreset = True)
while True:
    c = msvcrt.getch()
    if ord(c) == ord('\r'):  # newline, stop
        break
    elif ord(c) == ord('\b') :
        sys.stdout.write('\b')
        sys.stdout.write(' ')
        my_text = my_text[:-1]
        #CURSOR_UP_ONE = '\x1b[1A'
        #ERASE_LINE = '\x1b[2K'
        #print ERASE_LINE,
    elif ord(c) == 224 :
        set (-1, 1)
    else:
        my_text += c

    sys.stdout.write("\r")  # move to the line beginning
    for j, word in enumerate(my_text.split()):
        if word in special_words:
            sys.stdout.write(Fore.GREEN+ word)
        else:
            sys.stdout.write(Fore.RESET + word)
        if j != len(my_text.split())-1:
            sys.stdout.write(' ')
        else:
            for i in range(0, len(my_text) - my_text.rfind(word) - len(word)):
                sys.stdout.write(' ')
    sys.stdout.flush()

问题答案:

轻松做到

正如您似乎已经在使用该colorama模块一样,最简单易行的光标定位方式应该是使用相应的ANSI控件序列(请参阅:http
:
//en.m.wikipedia.org/wiki/ANSI_escape_code)

您要寻找的是CUP –光标位置(CSI n; m H),将光标置于n行和m列。

代码如下:

def move (y, x):
    print("\033[%d;%dH" % (y, x))

用手做所有事情的痛苦

使事情甚至在Windows控制台中也能正常工作的漫长而痛苦的方式是不知道上述控制顺序,那就是使用Windows API。

幸运的是colorama,只要您不会忘记对的调用,该模块就会为您完成这项(艰苦的)工作colorama.init()

出于教学目的,我留下了最痛苦的方法的代码,省去了colorama模块的功能,而是手动完成所有操作。

import ctypes
from ctypes import c_long, c_wchar_p, c_ulong, c_void_p


#==== GLOBAL VARIABLES ======================

gHandle = ctypes.windll.kernel32.GetStdHandle(c_long(-11))


def move (y, x):
   """Move cursor to position indicated by x and y."""
   value = x + (y << 16)
   ctypes.windll.kernel32.SetConsoleCursorPosition(gHandle, c_ulong(value))


def addstr (string):
   """Write string"""
   ctypes.windll.kernel32.WriteConsoleW(gHandle, c_wchar_p(string), c_ulong(len(string)), c_void_p(), None)

如注释部分中所述,这种尝试仍然会给您带来问题,即您的应用程序只能在命名控制台中运行,因此也许您仍然会希望提供一个curses版本。

要检测是否支持curses或必须使用Windows API,可以尝试执行以下操作。

#==== IMPORTS =================================================================
try:
    import curses
    HAVE_CURSES = True
except:
    HAVE_CURSES = False
    pass


 类似资料:
  • 问题内容: 我正在尝试将指针缠绕在go中。我这里有这段代码 和输出是 我想了解为什么我的InsertList方法根本没有引用节点指针指向其他结构 问题答案: 接收方通过值传递,就像其他参数一样,因此调用者看不到您在函数中所做的任何更改。如果要让函数修改函数外部存在的内容,则该函数需要处理指向该对象的指针。在您的情况下,是一个指针,但是您真正想要的是一个指向表示列表本身的对象的指针。例如:

  • 我显示字幕与exoPlayer在我的Android应用程序。现在我想改变字幕的位置从屏幕的底部到顶部。我尝试或到子标题View,但没有工作。可以改变字幕在屏幕上的位置吗?如果你的答案是肯定的,怎么做?

  • 问题内容: 我正在使用Debian。我安装了Python 3.2.3。Python 3的路径是/ usr / bin / python3。如何在Spyder中更改它? 问题答案: 按下以打开“首选项”窗口。在此窗口中,选择左侧的项目,然后选择选项卡。Python可执行文件的路径就在此处。

  • 我正在使用jna调用Java中的放大api函数。 MagImageScalingCallback.java MagImageHeader.java 华丽.java WingDiExtra.java 我的代码 如果调用函数,则调用函数。 问题是,如果我用jre7(64位)运行这段代码,那么一切都可以正常工作。但是如果我在jre7(32位)中运行相同的代码,我会得到以下错误。 如何解决这个问题?如何在

  • 问题内容: 我想创建一个消息框,当您接受时该消息框会褪色,但是我不知道如何更改字体的字母, 这是我的字体处理方式: 谁能帮我 ?:)我很抱歉我的英语,这不是我的母语。 问题答案: 这将更改所有后续绘制的字体的字母。因此,一旦绘制该消息,您可能希望再次将其设置为完全不透明。

  • 问题内容: 听起来这是一个简单的问题,但是我找不到在python中用matplotlib制作的图中更改字体(不是字体大小)的有效解决方案。 我找到了一些教程,可通过修改matplotlib存储默认字体的文件夹中的一些文件来更改matplotlib的默认字体- 请参阅此博客文章-但我正在寻找一种不太激进的解决方案,因为我想使用多个我的绘图中的字体(文本,标签,轴标签等)。 问题答案: 假设您要使用C