簡體   English   中英

如何使輸出適應端子寬度的變化

[英]How to adapt output to changing terminal's width

我正在嘗試編寫一個在Python的控制台中運行時會生成一個簡單小部件的函數。 此小部件應支持終端大小。 顯示小部件后,我將等待用戶的鍵盤輸入並根據類型來調整內容。 我現在遇到的困難是, 當用戶調整終端大小時,如何使該小部件調整其顯示。 這是我現在擁有的代碼的簡化版本:

def test():
    import blessed
    import signal

    def draw():
        n = term.width - 3
        print("+" + "=" * n + "+" + term.clear_eol)
        print("|" + " " * (n//2 - 2) + 
              "TEST" + " " * (n - n//2 - 2) + "|" + term.clear_eol)
        print("+" + "=" * n + "+" + term.clear_eol)

    def redraw(_, __):
        print(term.move_up * 3, end="")
        draw()

    term = blessed.Terminal()
    draw()
    signal.signal(signal.SIGWINCH, redraw)
    with term.cbreak():
        term.inkey()

如果用戶擴展終端,或者如果用戶收縮終端但速度非常慢(一次1個字符),則此方法很好。 但是,快速減小端子寬度將導致長線纏繞,從而損壞輸出。 有沒有辦法解決這個問題?

問題涉及到祝福 1.9.1之類的東西,它斷言它是詛咒的簡化包裝。 由於Python curses提供了對在SIGWINCH重新SIGWINCH支持,因此該斷言將延續到該包。 實際上,所描述的功能是針對terminfo的 curses所做的比該頁面顯示的要多得多。

要使用blessed處理SIGWINCH ,您必須在腳本中捕獲它並觸發屏幕的重新繪制。 高度”和“寬度”中顯示的示例應該足以開始。

或者,您也可以使用curses,從getch讀取KEY_RESIZE之后再進行重畫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM