Python curses box() 由 6 和 0 组成

Python curses box() is made of 6s and 0s

所以我 运行 进入了一个有趣的 error/bug,我还不知道是哪个,但是当 运行 我的 Python 诅咒脚本使用 box() 方法得到如下结果:

期望和预期的输出是一个普通的盒子......由线条组成。

脚本代码如下:


import curses
import init
import os
import time

MONSTER_LIST = init.init()
ENCOUNTER = []

def main(scr):

    curses.curs_set(0)

    scr.clear()
    h, w = scr.getmaxyx()

    get_number = "Number of players in party?"
    center_y, center_x = h//2, w//2 - len(get_number)//2
    scr.addstr(center_y, center_x, get_number)
    scr.refresh()
    NUMBER = int(scr.getstr())

    scr.clear()
    get_number = "Average rounded level of the Party"
    center_y, center_x = h//2, w//2 - len(get_number)//2
    scr.addstr(center_y, center_x, get_number)
    scr.refresh()
    LEVEL = int(scr.getstr())

    y = h-1

    bottom_text = "[S]earch [H]omebrew, S[A]ve, [Q]uit"

    FLAG = True

    scr.clear()

    encounter_y, encounter_x = h-2, w-2
    while FLAG:

        scr.addstr(0,0, 'D&D Encounter Builder')
        scr.addstr(y,0, bottom_text)
        Encounter_window = curses.newwin(encounter_y, encounter_x,1,1)
        encounter_box_y, encounter_box_x = Encounter_window.getmaxyx()
        Encounter_window.box(encounter_box_y, encounter_box_x)
        Encounter_window.addstr(1,2, 'Encounter list')
        Encounter_window.addstr(encounter_box_y-3, 2, f"Difficulty = {init.cr_calculation(NUMBER, LEVEL, ENCOUNTER)}")
        scr.refresh()
        Encounter_window.refresh()

        CHOICE = scr.getch()

        FLAG = False

curses.wrapper(main)

如果这有帮助,我正在使用 Arch 5.9.8-arch1-1 并且我正在为我的终端模拟器使用 st-256。

提前感谢您的帮助

误报。

事实证明,这是一个带有诅咒的奇怪错误,我还没有看到记录。如果您为 box() 方法提供您正在使用的 window 的尺寸,它会假发并且不知道如何绘制自己。

简单的解决方案是:

        Encounter_window.box(encounter_box_y, encounter_box_x)

        Encounter_window.box()

这对我来说真的很挑剔和奇怪,所以我希望有人能解释一下这里发生了什么。

还是谢谢你。

这是 Python 绑定使用的 curses 的 documented 功能:

window.box([vertch, horch])
Similar to border(), but both ls and rs are vertch and both ts and bs are horch. The default corner characters are always used by this function.

您的示例没有设置框大小,而是设置用于绘制它的字符

字符“0”的值为 48。实际上您的水平字符不是 0,但可能

216    Ø

如果您看到垂直字符为 6,那是因为“6”的字符恰好是 48 (0) + 6 = 54。