一个基于Python GUI的Python调试器,可以实时监视和修改变量和表达式,还带有轻量级的REPL
项目描述
现在是2019年,该项目仍在积极开发中。
imwatchingyou
一个“实时”Python调试器。
监视程序运行而不会停止其操作或流程
imwatchingyou
一个“实时调试器”。它是为了帮助调试基于PySimpleGUI的程序而开发的,但它可以用于调试任何程序,包括非GUI程序。PySimpleGUI是唯一的要求。
使用这个“调试器”,您可以
- 设置实时更新的“变量监视器”
- 编写实时更新的表达式/代码
- 使用REPL风格的提示符输入“代码”、表达式并修改变量
所有这些都是在与主应用程序分开的窗口中完成的。
安装
安装通过pip完成
pip install imwatchingyou
或如果您以后需要升级
pip install --upgrade --no-cache-dir imwatchingyou
请注意,您必须使用pip安装调试器而不是下载。它依赖于其他包,pip安装将确保它们正确安装。
所以,别忘了: 您必须使用pip安装imwatchingyou才能使用它。
将imwatchingyou集成到您的应用程序中
为了让程序准备好调试,需要添加3行代码 - 导入,调用“显示调试器窗口”,以及调用“刷新调试器窗口”。
与非GUI应用程序集成
这是您应用程序的职责,定期调用“刷新”函数。您调用刷新的频率越高,您的命令/操作执行的速度就越快。如果您每秒刷新一次,则可能是
import imwatchingyou
import time
# imwatchingyou.show_debugger_window() # Uncomment if you want to immediately display the debug window
counter = 0 # Some variable for you to watch / changing
# Using a loop in order to call the debugger refresh function on a periodic basis
while True:
imwatchingyou.refresh_debugger()
time.sleep(.1) # Simulating doing a bunch of work
# Using the counter to trigger the debug window display. You can use something else as your trigger.
if counter == 20:
imwatchingyou.show_debugger_window()
# do something with a variable that we can see/modify
print(counter)
counter += 1
与基于PySimpleGUI的程序集成
您可以使用imwatchingyou
与任何PySimpleGUI端口。唯一的要求是您需要定期调用刷新函数。将其添加到您的PySimpleGUI事件循环是这样做的好方法。确保您没有通过添加超时在您的Window.read()
调用上阻塞。
这是一个整个程序,使用imwatchingyou
进行调试
import PySimpleGUI as sg
# import PySimpleGUIQt as sg # can use with the Qt port too
import imwatchingyou # STEP 1
"""
Demo program that shows you how to integrate the PySimpleGUI Debugger
into your program.
This particular program is a GUI based program simply to make it easier for you to interact and change
things.
In this example, the debugger is not started initiallly. You click the "Debug" button to launch it
There are THREE steps, and they are copy and pastes.
1. At the top of your app to debug add
import imwatchingyou
2. When you want to show a debug window, call one of two functions:
imwatchingyou.show_debug_window()
imwatchingyou.show_popout_window()
3. You must find a location in your code to "refresh" the debugger. Some loop that's executed often.
In this loop add this call:
imwatchingyou.refresh()
"""
sg.change_look_and_feel('BlueMono')
layout = [
[sg.T('A typical PSG application')],
[sg.In(key='_IN_')],
[sg.T(' ', key='_OUT_', size=(30, 1))],
[sg.Radio('a', 1, key='_R1_'), sg.Radio('b', 1, key='_R2_'), sg.Radio('c', 1, key='_R3_')],
[sg.Combo(['c1', 'c2', 'c3'], size=(6, 3), key='_COMBO_')],
[sg.Output(size=(50, 6))],
[sg.Ok(), sg.Exit(), sg.Button('Debug'), sg.Button('Popout')],
]
window = sg.Window('This is your Application Window', layout)
counter = 0
timeout = 100
while True: # Your Event Loop
event, values = window.read(timeout=timeout)
if event in (None, 'Exit'):
break
elif event == 'Ok':
print('You clicked Ok.... this is where print output goes')
elif event == 'Debug':
imwatchingyou.show_debugger_window() # STEP 2
elif event == 'Popout':
imwatchingyou.show_debugger_popout_window() # STEP 2
counter += 1
# to prove window is operating, show the input in another area in the window.
window['_OUT_'].update(values['_IN_'])
# don't worry about the "state" of things, just call this function "frequently"
imwatchingyou.refresh_debugger() # STEP 3 - refresh debugger
window.close()
显示调试器
调试器必须显示2个主要的GUI窗口。
主要调试窗口
主要调试窗口通过调用:imwatchingyou.show_debugger_window()
显示
这将显示主/主要调试窗口,从其“变量”选项卡开始。主调试窗口有2个选项卡,一个是变量监视,另一个是REPL和表达式监视。
变量选项卡
与所有imwatchingyou
调试器窗口一样,每次您的应用程序调用刷新函数imwatchingyou.refresh_debugger()
时,此窗口都会刷新
在这里,您可以看到最多8个变量和一个自定义表达式。您可以通过使用“选择要自动监视的变量”按钮来选择您要查看的变量。这将弹出此选择窗口
使用此窗口检查您要在调试屏幕上“监视”的变量。这也是您输入自定义监视的地方。
REPL选项卡
这是调试器的REPL部分。您还可以使用“Obj”按钮在此页面上详细检查对象。此功能目前损坏/失效。将很快转向它
弹出调试窗口
“弹出调试窗口”是浮在您其他窗口顶部的小型“弹出”窗口,位于您显示器的右上角。
注意,此弹出窗口是在屏幕右上角创建的。
如果您右键单击此窗口的文本(任何文本),则会弹出右键菜单,可以用来关闭窗口或打开主调试窗口。
此弹出窗口以以下两种方式之一显示
- 通过从主调试窗口单击“弹出”按钮
- 通过调用
imwatchingyou.show_debugger_popout_window()
刷新调试器
您需要做出的最重要的调用是imwatchingyou.refresh()
调用。
如果您正在调试基于PySimpleGUI的应用程序,则必须将此“刷新”调用添加到您的事件循环。您的window.Read
调用应有一个超时值,以便它不会阻塞。如果您没有超时值,则调试器不会实时更新。
如果您正在调试非PySimpleGUI程序,没有问题,只需将此调用放在strong
将在几秒钟内被调用几次的地方。或者至少每秒调用一次。此频率将决定您的调试窗口中变量值的变化速度。
将此行添加到事件循环的顶部
imwatchingyou.refresh_debugger()
访问调试窗口
您的任务是设计一种方法,使您的应用程序能够调用所需的2个或3个函数。
如果您正在制作GUI程序,那么创建一个热键或按钮来调用imwatchingyou.show_debugger_window()
,然后就可以开始了!您可以使用主调试窗口启动较小的“弹出”变量窗口。
或者在你程序中的动作开始后,调用 imwatchingyou.show_debugger_popout_window()
,然后就可以忽略它,抬头看看桌角窗口中你所有变量的当前值。
未来
我正在开发一个直接集成到PySimpleGUI本身的版本(只有tktiner版本),目前尚未正式上线。
发行说明
imwatchingyou 1.1 26-May-2019
- 增加了“代码”行,以便可以从repl运行像“import os”这样的命令。
imwatchingyou 1.2.1 27-May-2019
- 可以按ENTER键在REPL字段中执行它们!太棒了
- 代码清理
- 代码行数仍不到200行!带有GUI。
imwatchingyou 1.3.0 27-May-2019
- 新增“自动监视器”功能
- 新增变量查看区域
- 使用复选框页面选择
- 其他我记不起来的酷炫功能。整晚都在编程
- 总代码行数达到250行,但我非常低效。可以大幅精简。现在以可读性为主。
- 仍然是你在任何地方都能找到的唯一250行Python代码,实时、GUI、监视器,带有REPL。
imwatchingyou 1.4.1 27-May-2019
- 忘记写发行说明
imwatchingyou 1.5.0 28-May-2019
- 大量的代码清理
- 重构自动监视器
- 在两个地方增加了清除功能
- 可以选择取消更改
- 在主界面中选择清除自动监视器时进行确认
- 选择自动监视器现在有一个“真实的事件循环”...这也意味着它会阻塞等待你的选择
- 清除复选框时显示非阻塞的“消息”
imwatchingyou 1.6.0 28-May-2019
- 不再使用全局变量!用类来欺骗。区别不大
- 所有界面的工作情况是总结的最好方式
- 有45个差异我不想一一列出
- 很多地方都改变了
imwatchingyou 1.7.0 28-May-2019
- 用户界面更改 - 预计接下来会有很多这样的更改。这个版本已经足够好,可以发布新版本了
- 为自动显示提供良好的选择界面
- 下一步是创建一个微型版本,它可以作为一个浮动的、微小的窗口显示
imwatchingyou 2.0.0 29-May-2019
为什么是2.0?这么快?好吧,是的。我一直在这项工作上努力,在短时间内发生了很多事情。重大新功能,并且严重破坏了API。这是2.0的主要原因。完全不同的调用集合。
- 现在有3个,而且只有3个用户可调用的函数
imwatchingyou.show_debug_window()
imwatchingyou.show_popout_window()
imwatchingyou.refresh()
- 这些函数可以按任何顺序调用。您不必在刷新之前显示窗口。
- 所有的初始化和状态处理都在幕后为您处理,使您轻松将其添加到代码中。
- 这个程序也增加了著名的“红色X”
- 大幅更改了用户界面
- 正在尝试一个“分割”的主界面
- 真的让我想用这种方式来做
- 也许将来标签会更好?
- 看起来很酷
- 这使得代码在PySimpleGUI的其他端口上完全不可移植
- 这也是选择标签的一个更好的原因
- 有很多大字注释
- 新增“自动选择”功能,可以为您选择要监视的变量
- 新增“清除”功能
- 新增弹出窗口!!
- 自动显示在屏幕右上角 - 可能会在未来的版本中移动
- 始终保持在最前面
- 可以与或不与主调试器窗口一起使用
- 可以使用
imwatchingyou.show_popout_window()
轻松显示
- 每次调用
refresh()
都会自动刷新可用变量的列表及其值
imwatchingyou 2.1.0 - 2019年6月1日
- 众多更改
- 主要围绕 Debugger 类的使用
- 与内置版本不同的功能。
- 需要继续进行更改,以便可以使用 PySimpleGUI 本身来使用相同的代码进行内部调试。这将允许复制和粘贴。
- 本版本有60多个更改...让我们都保持乐观
imwatchingyou 2.2.2 - 2019年6月9日
- 希望这是近期内的最后一个版本
- 将浮点数更改为每个变量最多4行
- 更改为9个自动监视
- 以不以下划线开头的所有局部变量选择开始调试窗口
- 移除了 fullname 函数
- 添加了注释
- 将
debug
独立的全局变量移动到类变量 - 在执行任何 show 或 refresh 调用时自动创建调试类实例(无需初始化!)
imwatchingyou 2.3.0 - 2019年12月12日
- 向弹出窗口添加位置参数
- 向主调试窗口添加位置参数
- 添加版本号字符串
- 将 REPL 更改为单行
- 看起来和内置的 PySimpleGUI 调试器一样,行为也相同
设计
作者
Mike B.
许可证
GNU Lesser General Public License (LGPL 3) +
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
imwatchingyou-2.3.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 738c960d62486416c02cf4ccec74c685a83553cbc2eb08f47fdd16b5aaa145d8 |
|
MD5 | bc7276fce221a19953574ce8999064dd |
|
BLAKE2b-256 | 7aaa2bfcbd2ce107fb7f7c6b664f2e964d221877b7cc11d9608b1b98404a8401 |
imwatchingyou-2.3.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 99fbd158b7f77255ea12d38bf08fe4669252eb9e6c061836b0fad34a68b9b0f5 |
|
MD5 | bfc7e909071d989d29e0c6d432c17f4b |
|
BLAKE2b-256 | feea1e68ad6e57020a016e9a4e26026a97484cc1ecbf4a19dd2370e84605113e |