如何防止用户通过与控制台窗口交互来冻结Python?

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

我正在使用ascii字符在(半)纯python中制作一个复古风格的GUI。该脚本的工作原理是打印并清除到控制台,同时使用用户的鼠标和键盘数据创建完全交互式的 GUI。

但是,在创建点击检测系统时,我注意到当用户与实际控制台窗口交互时(例如拖动控制台、单击控制台),Python 会冻结运行。当用户按任意键或右键单击时,冻结就会结束。

我试图通过运行一个单独的脚本来克服这个问题,在用户左键单击后立即按右键单击,以取消交互并解冻代码,但是这段代码永远不会运行,因为程序在运行之前被冻结。

我还尝试将此代码放入一个完全独立的文件中并单独运行它,但是当任何 python 控制台窗口打开时,这也会被冻结(即使单独的文件作为 pyw 运行)。

这是点击检测器:

def c_c():
   global mouse_pos
   last_cycle = False
   cd = os.getcwd()
   nw = "pyw " + cd + "\\misc_scripts\\click_activator.py"
   os.system(nw)
   while True:
        
        state = ctypes.windll.user32.GetAsyncKeyState(0x01) # left click
        pressed = (state & 0x8000 != 0)
        if pressed:
           onclick(mouse_pos)

另一个脚本包含一个类似的程序,该程序在使用

right_click()
功能可以在用户左键单击后立即右键单击,该功能在外部测试中完全可以运行,但是在使用主程序时却无法运行,这让我相信当用户与任何控制台交互时该脚本也会被冻结。

我正在寻找解决此问题的方法,或者使用户无法与主控制台交互,同时仍然能够单击它。

python console python-idle
1个回答
1
投票

您是否尝试过在不同的线程中运行它?

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