最近b站上有不少数据可视化的视频,
据说基本上都是由 Jannchie见齐 大佬的框架制作的,听说这个框架用起来很方便(虽然我暂时还没用过),不过这么多人用那就表示做的相当好,但是我的毕设是自己搞一个数据可视化系统,毕设总不能拿别人的吧,所以我就干脆搞一个类似的做毕设得了,
话说我舍友也是b站up主,一直吐槽自己辛苦做的mad没人看,别人导几个数据进去就有几十万播放(做mad死路一条.jpg)
用qt就可以了,昨天开始做的,现在还是个半成品,界面很简陋,这几天会完善好,喜欢的可以去github上给个star
先给大家眼睛道个歉
用法还是很简单的,传一个字典进去,字典中每一个key对应一个list,list中储存值的变化,可以设置最大显示数量,和动画时间,和左侧的标签属性,不设置默认为text,以后还可以设置更多花样,这几天会搞定
演示效果
()
写一下制作过程(只是个半成品正在完善),先说最基本的
先说一下QPropertyAnimation,可以自定义控件的变化与时间
@pyqtSlot()
def on_pushButton_clicked(self):
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(QtCore.QRect(150, 142, 141, 141))
self.label.setStyleSheet("background-color: rgb(119, 78, 255);")
self.label.show()
self.anim = QPropertyAnimation(self.label, b"geometry")#操作self.label
self.anim.setDuration(1000)#动画时间10s
self.anim.setStartValue(QtCore.QRect(150, 142, 141, 141))#起始位置
self.anim.setKeyValueAt(0.5, QtCore.QRect(150, 80, 141, 141))#50%时的位置
self.anim.setEndValue(QtCore.QRect(60, 80, 141, 141))#结束位置
self.anim.start()
1首先写一个界面,为了方便观察背景设为白色,加一个按钮用来开始
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(1000, 890)
Dialog.setSizeGripEnabled(True)
self.setStyleSheet("background-color: rgb(255, 255, 255)")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(50, 800, 100, 50))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "开始吧"))
2写一个随参数变化位置与长度的条
就是见齐大佬视频里的这个啦,这个条可以通过Qlabel实现,设置其底色为红即可
负责计算每个条的xywl(x,y,width,lenght即位置与大小)等参数的函数以后再说,先默认其是计算好的,
xywl_list表示在移动过程中依次要去的位置,
time为动画时间,未定义默认为每次变化一秒
color为背景颜色,为了方便演示默认为黑色了
text为显示文本,先不管了默认为‘’
show_num为只显示前show_num名
继承Qlabel
class bar_label(QLabel):
def __init__(self, xywl, xywl_list,ui, show_num, time=None, text='',color=None ):
super(bar_label, self).__init__(ui)
self.x, self.y