【问题标题】:How to detect window resize in Python如何在 Python 中检测窗口调整大小
【发布时间】:2021-03-26 08:11:40
【问题描述】:

如何查看窗口是否已调整大小?我从全屏开始,但如果我更改为适合我的屏幕的一半,我的所有文本都会混淆。

这是我的代码:

# Import os
import os

# Create function called title that prints the title screen
def title():
    print('@------------------------------------------------------------------------------------@'.center(os.get_terminal_size().columns), end='')
    print('|                                                                                    |'.center(os.get_terminal_size().columns), end='')
    print('|                                      |PyTerm v0.1.7|                               |'.center(os.get_terminal_size().columns), end='')
    print('|                                                                                    |'.center(os.get_terminal_size().columns), end='')
    print('@------------------------------------------------------------------------------------@'.center(os.get_terminal_size().columns), end='')

# Call the function
title()

一旦我运行它,文本就会对齐,但是当我进入全屏模式时,它们就会到处乱窜。有没有办法来解决这个问题?当用户调整窗口大小时,我能以某种方式感知吗?我在 Windows 10 上,使用 Python 3.1.9。用 py (C:\Windows\py.exe) 运行它

这是我运行它时的样子:

当我进入全屏时是这样的:

谢谢

【问题讨论】:

    标签: python text-alignment python-textprocessing


    【解决方案1】:

    我没有要测试的 Windows 机器,但一种可能是循环重绘控制台:

    1. 清除当前屏幕(参见:Clear terminal in Python
    2. 运行title函数
    3. 稍等片刻

    如果用户调整屏幕大小,offset 变量的调整大小值应设置为新大小。

    import os
    import time
    
    
    def title(offset_value):
        print('@------------------------------------------------------------------------------------@'.center(offset_value), end='')
        print('|                                                                                    |'.center(offset_value), end='')
        print('|                                      |PyTerm v0.1.7|                               |'.center(offset_value), end='')
        print('|                                                                                    |'.center(offset_value), end='')
        print('@------------------------------------------------------------------------------------@'.center(offset_value))
    
    
    if __name__ == "__main__":
    
        while True:
    
            # Clear the terminal
            # See: https://stackoverflow.com/questions/2084508/clear-terminal-in-python
            os.system('cls' if os.name == 'nt' else 'clear')
    
            # Redraw the screen
            offset = os.get_terminal_size().columns
            title(offset)
    
            # Wait for a bit
            time.sleep(1)
    

    【讨论】:

    • 我最后有另一个while循环,用户输入。我在哪里放置 if 语句?我是否将 if 放在另一个 while 循环中?
    • If 语句/另一个 while 循环可能会在第二个函数中处理;那么第二个函数可能在title(offset) 调用之后。但是有一个副作用:如果您正在等待用户输入 var = input() 之类的内容,那么终端只会在用户提供输入之后重绘。
    • 当用户改变窗口大小时,你如何感知?我现在可以修复文本,但我发现其他脚本存在一些问题,我可以创建一个 if 语句来检查用户是否更改了窗口大小。
    • "检查和响应事件"有点复杂(可能必须是一个单独的问题),它可能需要一个线程检查状态然后响应事件。
    • 另一个选项可能是“Python Prompt Toolkit”python-prompt-toolkit.readthedocs.io/en/master/index.html#
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多