我想编写负责排序算法可视化和测试有效性的电子学习应用程序。我将使用Python和PySide(PyQt),但使用任何漂亮的工具来实现这个简单的可视化会很棒。 此可视化的目的是显示工作排序算法的步骤。
你知道在Python中制作简单的可视化动画的任何漂亮的工具吗? 也许PySide有可视化的东西吗?
答案 0 :(得分: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也可以是embedded in PySide,但我没有测试它。
答案 1 :(得分:1)
PySide只是Qt的一个薄包装,Qt没有任何内置的算法可视化支持。它专为构建传统的WIMP GUI而设计 - 即窗口中充满了文本框或滑块等小部件。
您可以通过将每个可视化对象表示为窗口小部件并手动移动窗口小部件来为Qt设置动画,或者您可以创建空白画布并在顶部绘制动画,但不管怎样,Qt并没有真正帮助您得多。
像PyGame这样面向游戏的库可能更合适 - 你可以将每个对象表示为精灵,并使用精灵动画设施。
或者您可以寻找可视化库而不是通用GUI库。
答案 2 :(得分:1)
Qt允许您以两种不同的方式创建UI:
基于Widget,这允许您使用静态UI(QPushButton,QTextEdit,...)创建传统应用程序。使用这些UI组件进行动画可能很麻烦
声明性UI,我们使用QML(Qt元语言)来创建动态UI(具有大量动画/过渡的UI)。请查看QML Examples
QML允许您快速创建UI,并轻松为其设置动画。您可以使用PySide中的QDeclarativeView在您的应用程序中加载和显示QML。
您可以通过QObject的信号槽机制或属性将数据(数字列表)从Python暴露给QML。在this repository中可以找到很多例子。