先来看看在pyqt5 designer中拖拽生成的界面:

下面我直接给出上面这个界面的ui文件的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Dialog</class> <widget class="QDialog" name="Dialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>955</width> <height>657</height> </rect> </property> <property name="windowTitle"> <string notr="true">阿甘·B站缓存合成器</string> </property> <layout class="QGridLayout" name="gridLayout_2"> <item row="0" column="0"> <layout class="QGridLayout" name="gridLayout"> <property name="sizeConstraint"> <enum>QLayout::SetNoConstraint</enum> </property> <item row="0" column="0"> <widget class="QLabel" name="cache_path_label"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>50</verstretch> </sizepolicy> </property> <property name="font"> <font> <weight>50</weight> <bold>false</bold> </font> </property> <property name="text"> <string notr="true">缓存路径</string> </property> </widget> </item> <item row="2" column="2"> <widget class="QPushButton" name="scan_button"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string notr="true">扫描</string> </property> </widget> </item> <item row="2" column="3"> <widget class="QPushButton" name="composer_button"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string notr="true">开始合成</string> </property> </widget> </item> <item row="2" column="0" colspan="2"> <widget class="QPushButton" name="go_to_website_button"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string notr="true">点我下载最新版本,网站打不开的话需要你懂的</string> </property> </widget> </item> <item row="0" column="1" colspan="3"> <widget class="QPlainTextEdit" name="cache_path_text_edit"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>50</horstretch> <verstretch>99</verstretch> </sizepolicy> </property> </widget> </item> <item row="1" column="0" colspan="4"> <widget class="QListWidget" name="listWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </item> </layout> </item> </layout> </widget> <resources/> <connections/> </ui> |
然后是上面这个ui文件转换成的python代码,注意下面转换完的py代码做了很多修改,不然不能实现功能的哈,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '.\阿甘·B站缓存合成器.ui' # # Created by: PyQt5 UI code generator 5.15.4 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QIcon,QPixmap from PyQt5.QtWidgets import QListWidget, QCheckBox,QListWidgetItem from PyQt5.QtCore import Qt import ctypes ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("Dialog") class FilteredList(QListWidget): #继承自列表控件 def __init__(self, parent=None): super().__init__(parent) self.selectAll_ch = QCheckBox("全选(selectAll)") self.selectAll_ch.setCheckState(Qt.Checked) self.selectAll_ch.stateChanged[int].connect(self.on_selectAll)# item = QListWidgetItem(self) self.setItemWidget(item, self.selectAll_ch )#列表控件的项设为 QCheckBox self.boxes = set() self.videos_title_dict = {} def insert_item(self,videos_list): if not self.boxes: for _, text in enumerate(videos_list): ch = QCheckBox(text) ch.setCheckState(Qt.Unchecked) ch.stateChanged[int].connect(self.on_stateChanged) #item.setCheckState(Qt.Unchecked)# item = QListWidgetItem(self) self.setItemWidget(item, ch) self.boxes.add(ch) self.videos_title_dict[text]=ch def on_selectAll(self,state): if state == 2: for ch in self.boxes: ch.setCheckState(2) if state == 0: for ch in self.boxes: ch.setCheckState(0) def on_stateChanged(self,state): ch = self.sender() if state: if len([ch for ch in self.boxes if ch.checkState()]) == self.count()-1: #0 不选中, 1 部分选中,2 全选中 #Qt.Unchecked #Qt.PartiallyChecked #Qt.Checked self.selectAll_ch.setCheckState(2) else: self.selectAll_ch.setCheckState(1) else: if len([k for k in self.boxes if k.checkState()]): self.selectAll_ch.setCheckState(1) else: self.selectAll_ch.setCheckState(0) def keyPressEvent(self, event): #Ctrl+A 全选 if event.modifiers() & Qt.ControlModifier and event.key()==Qt.Key_A: self.selectAll_ch.setCheckState(2) class Ui_Dialog(object): def get_icon(self): import base64 icon_bytes = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAA6VJREFUWEftl9tvVFUUh791ZmwLmaY2k9Y2wgMdE4nCC5oqdDoWozGaGKMJ9kkTMfBiAkKgD/AfICBIlJQQU4OmCRqqqCVq1CYqpHOmXgIIJM10etNOK73Y69zONrvTyQymU87QU3lxP56s81vfWXut395HuMtL7nJ+/gfIW4FHLqr1RopjovApyVspS8GAAUNK0Y2Lc2ad/FrItuYFqP1RPVrqpu1JL2vWloDkiVQKonH4ZgTGElgCplIcNAPyrR2QJQFqVtG+30fFprLbS6UURGahfRjODDAK7DP9fICItdTbjgFkksQs+DwKzRH6xpNsCwUk+J8C6GSjCWjuRX0a5djqBE0dWyWZD6KgCiQUtP0Jh8NZuecqocELtffCalf6eVLB+Sic7qVzKM7zvwRkZMUAtLC3CJp88IQXDEABl8bg7R7GIrNsDvnlxooCaPG9NfBSFRRpAqBrAg51kwrP8lqoXs44CvBWeH7cmsx6OVLbqbwqTut+H0+/WAVuSVfg4igcCaMG5zgU9HMg3zTcaQ/o8b8soJtrzYZSKnUFNpTe2gMnIzCR4sPpcl7//WGJL1aFggD0rJvj0D2TltLVvr8E1nvgvuKs/HAMTkTgq5H5arR6kmzv2Cpzywa4vR3BVBLahqBlACaTWEpxasbLbkcqYAdAe8CXUXi/H6ZTJBAOmHUcdaQH7ADoGO2G2geae4lPJHg5FJDPHJ2CXCPSjfdsJfjLobokm6Z/Dk70YHXcZI9ZL++sGEBG+JkK2LUOKorST2ZS0NIPLYOcni7nDUd6YDErzgA85IF9vuwoxi04NwRHw/w2dg+B7sfl72VPQQYg14i0aO1PavNGDxd2r6Ns44IX5ACMWy4CXVvksmMAh3uwUHwiwtdKoR3gqbpyXthbg7F2VTrNbAo+GoRTfcSsFK90NcjHzgHknIZaVB9CjdWgLy7GgrXpcXw3Mn83SABvmvXy3rIBtMBkMj1merkEytzZpLkJfp6A4z1wbYoYij1mQE46AmDHC6IxaO6DL6KAoJtvh+mXsysOoC8iVyeh9Q/47q+FdEJEYFvQL6GCAaqKOd9YTfWDnvTBs9jSR6/elvAM/DAKVyZviVIozhpF7OwsdAz1f4EkOS7CA7qQAhUKPHa2IBOj4JohvJrv63WcrV+zhu9VybSLFoRGmwD66G23XBzs2iLXl3rHLoB7ys12AxoULFw9/yWrUMpgWCyCUsyF4GNy0w6sLQA7Qnca8w+WjtQwLG4EwgAAAABJRU5ErkJggg==' icon_img = base64.b64decode(icon_bytes) # 解码 icon_pixmap = QPixmap() # 新建QPixmap对象 icon_pixmap.loadFromData(icon_img) # 往QPixmap中写入数据 return icon_pixmap def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(1049, 633) Dialog.setWindowTitle("阿甘·B站缓存合成器 - V1.0.0") Dialog.setWindowIcon(QIcon(self.get_icon())) self.gridLayout_2 = QtWidgets.QGridLayout(Dialog) self.gridLayout_2.setObjectName("gridLayout_2") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetNoConstraint) self.gridLayout.setObjectName("gridLayout") self.cache_path_label = QtWidgets.QLabel(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(50) sizePolicy.setHeightForWidth(self.cache_path_label.sizePolicy().hasHeightForWidth()) self.cache_path_label.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.cache_path_label.setFont(font) self.cache_path_label.setText("缓存路径") self.cache_path_label.setObjectName("cache_path_label") self.gridLayout.addWidget(self.cache_path_label, 0, 0, 1, 1) self.scan_button = QtWidgets.QPushButton(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.scan_button.sizePolicy().hasHeightForWidth()) self.scan_button.setSizePolicy(sizePolicy) self.scan_button.setText("扫描") self.scan_button.setObjectName("scan_button") self.scan_button.clicked.connect(Dialog.scan_videos_generate_list) self.gridLayout.addWidget(self.scan_button, 2, 2, 1, 1) self.composer_button = QtWidgets.QPushButton(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.composer_button.sizePolicy().hasHeightForWidth()) self.composer_button.setSizePolicy(sizePolicy) self.composer_button.setText("开始合成") self.composer_button.setObjectName("composer_button") self.composer_button.clicked.connect(Dialog.videos_composer) self.gridLayout.addWidget(self.composer_button, 2, 3, 1, 1) self.listWidget = FilteredList() self.gridLayout.addWidget(self.listWidget, 1, 0, 1, 4) self.go_to_website_button = QtWidgets.QPushButton(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.go_to_website_button.sizePolicy().hasHeightForWidth()) self.go_to_website_button.setSizePolicy(sizePolicy) self.go_to_website_button.setText("点我下载最新版本,网站打不开的话需要你懂的") self.go_to_website_button.setObjectName("go_to_website_button") self.go_to_website_button.clicked.connect(lambda: QtGui.QDesktopServices.openUrl(QtCore.QUrl('http://www.sharpgan.com/a-gan-bilibili-video-composer'))) self.gridLayout.addWidget(self.go_to_website_button, 2, 0, 1, 2) self.cache_path_text_edit = QtWidgets.QPlainTextEdit(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(50) sizePolicy.setVerticalStretch(99) sizePolicy.setHeightForWidth(self.cache_path_text_edit.sizePolicy().hasHeightForWidth()) self.cache_path_text_edit.setSizePolicy(sizePolicy) self.cache_path_text_edit.setPlaceholderText("请输入B站客户端的设置-下载设置-缓存目录中的路径") self.cache_path_text_edit.setObjectName("cache_path_text_edit") self.gridLayout.addWidget(self.cache_path_text_edit, 0, 1, 1, 3) self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) QtCore.QMetaObject.connectSlotsByName(Dialog) |
最后就是主代码了哈,
此内容查看价格为5.9元立即购买
如果你不想付费的话可以访问下面的链接直接下载体验一下哈:
2023-03-07 阿甘·B站缓存合成器 – V1.0.0发布
https://sharpgan.com/a-gan-bilibili-video-composer/
你的文件名是按照什么排序的?可以完善一下排序吗?按照文件名,大小,日期等
@John 暂时是随机的哈,没有排序,你可以付费把主代码的源码买一下然后简单修改一下,应该只需要加几行代码就行呢~
什么玩意,垃圾也敢发出来!
@明月登楼 你真的有认真看每一行代码么,不管怎么说我的代码切切实实的解决了问题,已经有好多B站的朋友在使用了,反馈都不错~
你好啊
@哦吼? 你好,老哥,多多关照~
文章写的并不是不是很好
@领导,我小江 什么好不好,你就说快不快吧~
文章写的并不是不是很好
@你好 时间仓促,凑合着看看~