所以我正在尝试调试这个我没有编写的具有GUI(特别是Kivy )的源代码(在Python中) ,并且我试图弄清楚当我点击某些东西时触发了什么代码/事件. 我尝试在我认为将要触发的地方设置断点,有时我发现我错了,而且断点似乎从来没有遇到过我想要的。
任何人都对 GUI 调试有任何建议,并弄清楚某些事件触发了什么,尤其是在 Python 中?
所以我正在尝试调试这个我没有编写的具有GUI(特别是Kivy )的源代码(在Python中) ,并且我试图弄清楚当我点击某些东西时触发了什么代码/事件. 我尝试在我认为将要触发的地方设置断点,有时我发现我错了,而且断点似乎从来没有遇到过我想要的。
任何人都对 GUI 调试有任何建议,并弄清楚某些事件触发了什么,尤其是在 Python 中?
如何将打印语句放在打印函数名称的不同函数(或事件处理程序)中,然后是函数接收到的参数?当您使用 GUI 时,这应该很清楚发生了什么。我通常包装print
一个用于此详细输出的函数,例如:
def verbose_print(message, *args):
if VERBOSE:
print message.format(*args)
所以现在,在我的各种功能中,我可以使用这样的功能:
def do_something(param1, param2):
verbose_print('do_something({}, {})', param1, param2)
# Do some stuff...
VERBOSE
此外,您现在可以通过将模块全局常量设置为True
或False
删除所有打印语句来打开和关闭详细输出。
有一个著名的基于 CLI 的笑话程序叫做xcowsay。它显示一个弹出窗口(一个 GUI 窗口) - 带有消息的奶牛图片。您需要先在您的 PC 上安装 xcowsay,它非常小。
而不是print
然后在终端中搜索消息,使用这个 oneliner
# Example
import subprocess; subprocess.Popen(['xcowsay', 'your message here', '-t 1'])
# General syntax
import subprocess; subprocess.Popen(['xcowsay', string1, string2, string3 ..., '-t 1'])
# For printing objects, cast them to str first
# '-t 1' is for displaying the popup for one second, you can change it.
为什么我使用它:
我在开始使用 Python 时发现了这一点,但并不知道pdb
等等。事实上,这个程序可以GUI化你的整个 CLI。