一个可以在不停止程序执行的情况下使用的Python REPL。由PySimpleGUI.org的优秀团队提供。
项目描述
现在是2019年,该项目仍在积极开发中。
LiveREPL
一个“实时”Python REPL
在不停滞操作或流程的情况下观察您的程序工作
LiveREPL
一个“实时调试器”。它是为了帮助调试基于PySimpleGUI的程序而开发的,但也可以用于调试任何程序,包括非GUI程序。PySimpleGUI是唯一的要求。
使用这个“调试器”,您可以
- 设置实时更新的“变量监视器”
- 编写实时更新的表达式/代码
- 使用REPL风格提示输入“代码”,表达式,并修改变量
所有这些都是在主应用程序之外使用单独的窗口完成的。
安装
安装是通过pip完成的
pip安装LiveREPL
或者如果您以后需要升级
pip install --upgrade --no-cache-dir LiveREPL
请注意,您 必须 使用pip安装调试器,而不是下载。它依赖于其他包,pip安装将确保它们正确安装。
所以,别忘了: 您必须使用pip安装LiveREPL才能使用它。
将LiveREPL集成到您的应用程序中
为了使程序准备好进行调试,您需要向程序中添加3行代码 - 导入、调用“显示调试器窗口”以及调用“刷新调试器窗口”。
与非GUI应用程序集成
这是您应用程序的职责,定期调用“刷新”函数。您调用刷新的频率越高,您的命令/操作执行得越快。如果您每秒刷新一次,则可能是这样的
import LiveREPL
import time
# LiveREPL.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:
LiveREPL.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:
LiveREPL.show_debugger_window()
# do something with a variable that we can see/modify
print(counter)
counter += 1
与基于PySimpleGUI的程序集成
您可以使用LiveREPL
与任何PySimpleGUI端口。唯一的要求是您需要定期调用刷新函数。将其添加到您的PySimpleGUI事件循环是不错的选择。确保您在Window.read()
调用上没有阻塞,可以通过添加超时来实现。
这是一个使用LiveREPL
调试的整个程序
import PySimpleGUI as sg
# import PySimpleGUIQt as sg # can use with the Qt port too
import LiveREPL # 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 LiveREPL
2. When you want to show a debug window, call one of two functions:
LiveREPL.show_debug_window()
LiveREPL.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:
LiveREPL.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':
LiveREPL.show_debugger_window() # STEP 2
elif event == 'Popout':
LiveREPL.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"
LiveREPL.refresh_debugger() # STEP 3 - refresh debugger
window.close()
显示调试器
调试器需要显示2个主要的GUI窗口。
主要调试窗口
主要调试窗口通过调用LiveREPL.show_debugger_window()
来显示
这将显示主/主要调试窗口,从其“变量”标签开始。主要调试窗口有2个标签,一个用于变量监视,另一个用于REPL和表达式监视。
变量标签
像所有LiveREPL
调试窗口一样,此窗口在您的应用程序每次调用刷新函数LiveREPL.refresh_debugger()
时都会刷新
在这里,您可以查看最多8个变量和一个自定义表达式。您可以使用“选择要自动监视的变量”按钮来选择要查看的变量。这将弹出此选择窗口
使用此窗口来检查您要在调试屏幕上“监视”的变量。这也是您输入自定义监视的地方。
REPL标签
这是调试器的REPL部分。您也可以使用“Obj”按钮在此页面上详细检查对象。此功能目前损坏/受损。将很快将其纳入关注。
弹出调试窗口
“弹出调试窗口”是在您其他窗口顶部浮动的“弹出”窗口,位于显示器的右上角。
请注意,此弹出窗口位于屏幕的右上角。
如果您右击此窗口的文本(任何文本),则会弹出右键菜单,可以用来关闭窗口或打开主调试窗口。
此弹出窗口以以下两种方式之一显示
- 通过从主调试窗口单击“弹出”按钮
- 通过调用
LiveREPL.show_debugger_popout_window()
刷新调试器
您需要做的最重要的调用是LiveREPL.refresh()
调用。
如果您正在调试基于PySimpleGUI的应用程序,则必须将此“刷新”调用添加到您的事件循环。您的window.Read
调用应具有超时值,以便不阻塞。如果您没有超时值,则调试器不会实时更新。
如果您正在调试非PySimpleGUI程序,没有问题,只需将此调用放在将每秒调用几次的地方(或至少每秒一次)。此频率将决定变量值在调试窗口中更改的速度。
将此行添加到事件循环的顶部
LiveREPL.refresh_debugger()
访问调试窗口
您的任务是设计一种方法,让您的应用程序调用所需的2或3个函数。
如果您正在制作GUI程序,则创建一个热键或按钮来调用LiveREPL.show_debugger_window()
,然后就可以出发了!您可以使用主调试窗口来启动较小的“弹出”变量窗口。
或者,在程序中的操作开始后调用LiveREPL.show_debugger_popout_window()
,然后忘记它,在桌面的角落里查看窗口,以查看所有变量的当前值。
未来
我们一直在开发一个版本,该版本直接集成到PySimpleGUI本身(仅限tktiner版本),目前尚未正式运行。
发布说明
LiveREPL 1.0 3-Mar-2021
重命名为LiveREPL
imwatchingyou 1.1 26-May-2019
- 添加“代码”行,以便可以从repl运行类似“import os”这样的命令
imwatchingyou 1.2.1 27-May-2019
- 可以按回车键执行REPL字段中的命令!太棒了
- 代码清理
- 代码行数仍然不到200行!并且带有GUI。
imwatchingyou 1.3.0 27-May-2019
- 新增“自动监视器”功能
- 新增变量查看区域
- 使用复选框页面进行选择
- 其他一些我记不起来的酷炫功能。整晚都在编码
- 总代码行数高达250行,但我效率极低。可以大幅缩减。现在先注重可读性。
- 仍然是唯一一个具有实时、GUI、监视器以及REPL功能的250行Python代码
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 - 01-June-2019
- 许多更改
- 主要围绕调试器类的使用
- 与内置版本不同的功能。
- 需要继续进行更改,以便可以使用PySimpleGUI本身的内部调试器使用相同的代码。这将允许复制和粘贴。
- 本版本中超过60个更改....让我们都交叉指希望
imwatchingyou 2.2.2 - 09-June-2019
- 希望这是未来一段时间的“最后一个”版本
- 将浮动的变量行数限制为每变量最多4行
- 改为9个自动监视器
- 启动调试窗口,选择所有不以 _ 开头的局部变量
- 移除了全长名函数
- 添加了注释
- 将
debug
唯一的全局变量移动到类变量 - 在执行任何显示或刷新调用时自动创建调试类实例(无需初始化!)
imwatchingyou 2.3.0 - 2019年12月12日
- 在弹出窗口中添加位置参数
- 在主调试窗口中添加位置参数
- 添加版本号字符串
- 将 REPL 改为单行
- 看起来和 PySimpleGUI 内置的调试器一样,行为也相同
设计和编写者:
来自 PySimpleGUI.org 的 mike
许可证
GNU Lesser General Public License (LGPL 3) +
版权
版权所有 2021 PySimpleGUI
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。