我正在嘗試使用 pywin32 模塊制作控制臺程式
我的代碼是:
import win32con, win32console, time, random
MyCon = win32console.CreateConsoleScreenBuffer(DesiredAccess = win32con.GENERIC_READ | win32con.GENERIC_WRITE, ShareMode = 0, SecurityAttributes = None, Flags = 1)
MyCon.SetConsoleActiveScreenBuffer()
rect = win32console.PySMALL_RECTType(20, 30, 600, 600)
MyCon.SetConsoleWindowInfo(Absolute = False, ConsoleWindow = rect)
while True:
y = str(random.randint(1,100)) ' '
MyCon.WriteConsoleOutputCharacter(Characters = y, WriteCoord = win32console.PyCOORDType(5,6))
time.sleep(0.1)
這是我嘗試從 cmd.exe 運行程式時遇到的錯誤
我在這里的檔案中給出了引數http://timgolden.me.uk/pywin32-docs/PyConsoleScreenBuffer__SetConsoleWindowInfo_meth.html
如何解決這個問題?
uj5u.com熱心網友回復:
根據[MS.Docs]:SetConsoleWindowInfo 函式 - 備注(重點是我的):
如果指定的視窗矩形超出控制臺螢屏緩沖區的邊界,則該函式將失敗。這意味著lpConsoleWindow矩形的Top和Left成員(或計算的頂部和左側坐標,如果bAbsolute為 FALSE)不能小于零。同樣, Bottom和Right成員(或計算的底部和右側坐標)不能分別大于(螢屏緩沖區高度 - 1)和(螢屏緩沖區寬度 - 1)。如果右成員(或計算的右坐標)小于或等于左成員(或計算的左坐標),或者如果底部成員(或計算的底部坐標)小于或等于頂部成員(或計算的頂部坐標)。
您的引陣列合(相對坐標 給定矩形)必須超出螢屏緩沖區邊界。
下面是一個有效的例子。
代碼00.py:
#!/usr/bin/env python
import msvcrt
import random
import sys
import time
import win32api as wapi
import win32con as wcon
import win32console as wcons
def main(*argv):
buf = wcons.CreateConsoleScreenBuffer(DesiredAccess=wcon.GENERIC_READ | wcon.GENERIC_WRITE, ShareMode=0, SecurityAttributes=None, Flags=wcons.CONSOLE_TEXTMODE_BUFFER)
buf.SetConsoleActiveScreenBuffer()
#print("csbi: {:}\nlcws: {:}".format(buf.GetConsoleScreenBufferInfo(), buf.GetLargestConsoleWindowSize()))
so_buf = wcons.GetStdHandle(wcons.STD_OUTPUT_HANDLE)
so_csbi = so_buf.GetConsoleScreenBufferInfo()
#print("csbi: {:}\nlcws: {:}".format(so_csbi, so_buf.GetLargestConsoleWindowSize()))
#rect = wcons.PySMALL_RECTType(0, 1, 0, 1)
buf.SetConsoleWindowInfo(Absolute=True, ConsoleWindow=so_csbi["Window"])
write_coord = wcons.PyCOORDType(10, 4)
buf = so_buf # @TODO - cfati: Uncomment this line to write on the same output buffer (and thus preserve screen contents)
while not msvcrt.kbhit():
chrs = "------- {:d} -------".format(random.randint(1, 100))
buf.WriteConsoleOutputCharacter(Characters=chrs, WriteCoord=write_coord)
time.sleep(0.5)
wapi.CloseHandle(buf)
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("\nDone.")
sys.exit(rc)
輸出(按鍵后的最后一個值):
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q073678914]> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe" ./code00.py Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] 064bit on win32 ------- 63 ------- Done.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/506911.html