用Python编写的崇高文本中的进度条

2024-05-20 19:36:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MacOSX上使用强大的sublimetext3编辑器来运行python代码。我想显示for循环的进度条和以下命令:

sys.stdout.write('\rProgress : %03.2f %%' % (100*float(i)/(N)))
sys.flush()

不按预期清除输出窗口中以前打印的行(\r),但生成N行:

^{pr2}$

这不是很好阅读-我的结论是输出窗口可能是只读的。在

有没有人建议改进崇高文本中进度条的使用?在


Tags: 代码进度条命令forstdoutsys编辑器float
3条回答

可以使用以下方法创建可视进度条:



演示:

Demo



代码:

@ GitHub

(通过在命令面板中输入Progress Bar Demo@运行插件)

在 在



注意事项:

有一个css file控制mdpopups的样式。 由于某些原因,color属性没有任何效果。在

另外,mdpopups.show_popuplocation参数采用-1将弹出窗口设置在插入符号位置。 否则,我不确定location如何影响弹出窗口,因为它只接受一个整数值。在

我在下面的线索中询问了这些问题:

[Proof Of Concept] Visual Progress Bar

看看sublime.py我们会发现flush方法实际上什么都不做:

class _LogWriter:
    def flush(self):
        pass

    def write(self, s):
        sublime_api.log_message(s)

sys.stdout = _LogWriter()
sys.stderr = _LogWriter()

不过,无论如何,我不建议将控制台用于用户输出。通常使用状态/输出面板。在

状态消息更易于使用,但功能较弱。sergioFC在his answer中演示了这一点。在

这演示了如何使用输出面板。它非常灵活,但必须编写自己的文本命令才能插入文本。这是必需的,因为您需要编辑对象来更改视图的内容。在

^{pr2}$

输出:

Progress bar

作为另一种解决方案,您可以使用状态栏。设置状态栏消息时,前一个文本将被清除。包控制在安装包时也使用状态栏。在

示例:

Sublime text progress bar using status bar

import sublime, sublime_plugin
import time

class ExampleCommand(sublime_plugin.WindowCommand):
    def run(self, args):
        sublime.set_timeout_async(self.test,1)

    def test(self):
        i=80
        while i <= 100:
            sublime.status_message('%03.2f %%' % i)
            time.sleep(0.15)
            i+=0.25
        sublime.status_message('100% Stackoverflow!')

相关问题 更多 >