1

我想编写负责排序算法和测试有效性可视化的电子学习应用程序。我将使用 Python 和 PySide(PyQt),但最好使用任何漂亮的工具来使这个简单的可视化。 此可视化的目的是显示工作排序算法的步骤。

你知道用 Python 制作简单的可视化、动画的漂亮工具吗?也许 PySide 有做可视化的事情?

4

3 回答 3

2

您可以使用matplotlib它的动画功能:

import matplotlib.pyplot as plt
import matplotlib.animation as animation

random_list = [10,3,5,4,9,1,6,7,2,8]

def bubble_sort():
    data = random_list
    for i in range(len(data)-1):
        for j in range(i, len(data)-1):
            a, b = data[j], data[j+1]
            if a > b:
                data[j], data[j+1] = b, a
                yield data

fig = plt.figure()
ax = fig.add_subplot(111)
def update(data):
    ax.clear()
    ax.hlines(range(len(data)), 0, data, 'red')
    ax.set_ylim(-0.5, 9.5)
update(random_list)

ani = animation.FuncAnimation(fig, update, bubble_sort, interval=250)
plt.show()

您只需要更改bubble_sort()以实现其他算法并在每次迭代时生成要绘制的数字列表。

matplotlib 也可以嵌入 PySide,但我没有测试它。

于 2012-11-20T23:55:30.020 回答
1

Qt 允许您以两种不同的方式创建 UI:

  1. 基于小部件,这允许您使用静态 UI(QPushButton、QTextEdit、...)创建常规应用程序。用这些 UI 组件做动画可能很麻烦

  2. 声明式 UI,我们使用 QML(Qt 元语言)来创建动态 UI(具有大量动画/过渡的 UI)。看看QML 示例

QML 允许您快速创建 UI,并轻松地对其进行动画处理。您可以使用 PySide 中的 QDeclarativeView 在您的应用程序中加载和显示 QML。

您可以通过 QObject 的信号槽机制或属性将数据(数字列表)从 Python 公开到 QML。在这个存储库中可以找到很多示例。

于 2012-12-08T16:54:55.317 回答
1

PySide 只是 Qt 的一个薄包装,Qt 没有任何内置的算法可视化支持。它是为构建传统的WIMP GUI 而设计的——即,充满文本框或滑块等小部件的窗口。

您可以通过将每个可视化对象表示为小部件并手动移动小部件来为 Qt 设置动画,或者您可以创建空白画布并在顶部绘制动画,但无论哪种方式,Qt 都没有真正帮助您。

像 PyGame 这样的面向游戏的库可能更合适——您可以将每个对象表示为一个精灵,并使用精灵动画工具。

或者您可以寻找可视化库而不是通用 GUI 库。

于 2012-11-20T20:35:18.743 回答