仅在终端的一小部分中使用Python 3 curses

问题描述 投票:0回答:1

有没有办法可以启动curses只占用屏幕的一部分,同时允许常规打印出现在它上面?

因此,在这个提供的示例中,所有正常的打印语句都将转到常规终端,并且在程序完成后将保持不变。

import curses
from curses import wrapper
from time import sleep
import random


def main(stdscr):
    stdscr.nodelay(True)
    stdscr.clear()
    participants = 5
    positions = dict()
    for i in range(participants):
    positions[i] = 0
    completed = 0
    game_winner = -1
    while True:
    _c = stdscr.getch()
    round_winner = random.randint(0, participants-1)

    winner_position = positions[round_winner]
    if winner_position < 10:
        positions[round_winner] = winner_position + 1

    stdscr.clear()
    for i in range(participants):
        position = positions[i]
        stdscr.addstr(i, 0, str(i+1) + ": ")
        stdscr.addstr(i, position+3, 'x')
        if position == 10:
            if game_winner < 0:
                game_winner = i + 1
            print(str(i + 1) + " completed the race!")
            positions[round_winner] = position + 1
            completed += 1
    sleep(1)
    if completed >= len(positions):
        break

    print("The winner is " + str(game_winner) + "!")


wrapper(main)
curses python-curses
1个回答
1
投票

问题是

有没有办法可以启动curses只占用屏幕的一部分,同时允许常规打印出现在它上面?

实际上没有:你可以告诉curses假装它使用的是较小的屏幕,但在这种情况下它会使用屏幕顶部(通过设置LINES环境变量)和/或左边部分(通过设置COLUMNS),但是这不会阻止它使用清除屏幕“未使用”部分的擦除。

© www.soinside.com 2019 - 2024. All rights reserved.