1:动态渲染数据+动态添加控件(按钮,进度条)

class MainWindow(QWidget, Ui_MainFrom):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
# #去掉标题头
# self.setWindowFlags(Qt.FramelessWindowHint)
# self.m_flag = False
self.Button = QPushButton(self)
self.Button.setGeometry(QtCore.QRect(880, 80, 93, 41))
# 列表显示
self.tableWidget.setColumnCount(5)
# self.tableWidget.setRowCount(3)
self.tableWidget.setHorizontalHeaderLabels(('视频网站','视频标题','播放地址','下载进度','操作',))
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) # 禁止编辑
# 取数据库数据 输出来是个列表
sortInfo = [('', 1, 1,),('', 1, 1, ),('', 1, 1,)]
# 动态渲染数据
for row, row_data in enumerate(sortInfo):
self.tableWidget.insertRow(row) # 插入行
for column in range(len(row_data)+2): # 需要多插入2列
# 如果遍历数小于需要插入的函数,就显示空
if column < len(row_data):
self.tableWidget.setItem(row, column, QtWidgets.QTableWidgetItem(str(row_data[column])))
# 如果遍历数等于需要插入的函数
if column == len(row_data):
# 传入当前id
print("row_data[0]",row+1)
# 添加两列 进度条 按钮
self.tableWidget.setCellWidget(row, column, self.ProgressBar(str(row_data[0])))
self.tableWidget.setCellWidget(row, column+1, self.buttonForRow(str(row_data[0]))) # 进度条
def ProgressBar(self, id):
widget = QWidget()
# 进度条
statusBar = QProgressBar()
statusBar.setStyleSheet(''' text-align : center;
background-color : LightCoral;
height : 30px;
''')
hLayout = QHBoxLayout()
hLayout.addWidget(statusBar)
widget.setLayout(hLayout)
return widget # 列表内添加按钮
def buttonForRow(self,id):
widget = QWidget()
# 路径
downloadPath = QPushButton('路径')
downloadPath.setStyleSheet(''' text-align : center;
background-color : NavajoWhite;
height : 30px;
border-style: outset;
font : 13px ''') # 槽函数
downloadPath.clicked.connect(lambda:downloadPath_action.downloadPath((id))) # 下载
downLoad = QPushButton('下载')
downLoad.setStyleSheet(''' text-align : center;
background-color : DarkSeaGreen;
height : 30px;
border-style: outset;
font : 13px; ''') # 删除
deleteBtn = QPushButton('删除')
deleteBtn.setStyleSheet(''' text-align : center;
background-color : LightCoral;
height : 30px;
border-style: outset;
font : 13px; ''') hLayout = QHBoxLayout()
hLayout.addWidget(downloadPath)
hLayout.addWidget(downLoad)
hLayout.addWidget(deleteBtn)
hLayout.setContentsMargins(5, 2, 5, 2)
widget.setLayout(hLayout) return widget def main():
app = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_()) if __name__ == "__main__":
main()

【Pyqt5】之高级控件QTableWidget的使用的更多相关文章

  1. PyQt5——高级控件

    PyQt5高级控件使用方法详见:https://blog.csdn.net/jia666666/article/list/4?t=1& PyQt5高级控件汇总: 1.QTableView 2. ...

  2. Android高级控件--AdapterView与Adapter

    在J2EE中提供过一种非常好的框架--MVC框架,实现原理:数据模型M(Model)存放数据,利用控制器C(Controller)将数据显示在视图V(View)上.在Android中有这样一种高级控件 ...

  3. Android 高级控件(七)——RecyclerView的方方面面

    Android 高级控件(七)--RecyclerView的方方面面 RecyclerView出来很长时间了,相信大家都已经比较了解了,这里我把知识梳理一下,其实你把他看成一个升级版的ListView ...

  4. Android高级控件(六)——自定义ListView高仿一个QQ可拖拽列表的实现

    Android高级控件(六)--自定义ListView高仿一个QQ可拖拽列表的实现 我们做一些好友列表或者商品列表的时候,居多的需求可能就是需要列表拖拽了,而我们选择了ListView,也是因为使用L ...

  5. Android高级控件(五)——如何打造一个企业级应用对话列表,以QQ,微信为例

    Android高级控件(五)--如何打造一个企业级应用对话列表,以QQ,微信为例 看标题这么高大上,实际上,还是运用我么拿到listview去扩展,我们讲什么呢,就是研究一下QQ,微信的这种对话列表, ...

  6. Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷

    Android高级控件(四)--VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷 是不是感觉QQ空间什么的每次新版本更新那炫炫的引导页就特别的激动,哈哈,其实他实现起来真的很简单很 ...

  7. Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

  8. Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现

    Android高级控件(二)--SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现 写这个的原因呢,也是因为项目中用到了gif动画,虽然网上有很多的架包可以实现,不过我们还 ...

  9. Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能

    Android高级控件(一)--ListView绑定CheckBox实现全选,增加和删除等功能 这个控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adap ...

随机推荐

  1. mybatis第二篇—参数绑定

    不管我们在做数据库作业或者任务还是当时的仅靠jdbc来写一个管理系统的时候,sql语句需要一些参数,从而来实现模糊查询,精确查询,插入数据,更新数据和删除数据.这些参数,在mybatis里面,又该如何 ...

  2. for update行级锁的作用

    1.for update叫排它锁,是一种行级锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行,则 ...

  3. 2019-9-11-完整的-P2P-应用需要包含哪些功能

    title author date CreateTime categories 完整的 P2P 应用需要包含哪些功能 lindexi 2019-9-11 9:0:55 +0800 2019-09-05 ...

  4. mysql设置密码登录

    参考: https://blog.csdn.net/Light_Breeze/article/details/82070222 https://www.jianshu.com/p/d979df2791 ...

  5. 动态库加载时GetLasterror();值总是126的原因

    1.dll路径不正确,导致找不到dll文件. 2.有可能是你要载入的DLL在内部还需要载入其它的dll,而它不存在,同样会返回126错误代码.比如一个你给系统添加了一个PCI设备,像AD采集卡之类的, ...

  6. 方法的重写(override)两同两小一大原则:

    方法名相同,参数类型相同 子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限.

  7. http和tcp/ip,socket的区别

    http协议和tcp/ip协议乍看起来,感觉是同一类的东西,其实不然,下面简单的说说他们的区别. http协议是应用层的一种数据封装协议,类似的还有ftp,telnet等等,而tcp/ip是数据传输层 ...

  8. SQL Server代码如何快速格式化,sqlserver代码

    在SQL Server中我们经常需要编写各种SQL脚本,例如存储过程和函数等,由于在编写过程中,经常会进行调整,有些关键字我们用的大写,有的我们用的小写,有的后面结束用:分割有的又没有.对于有强迫症的 ...

  9. 转:fork()子进程创建

    源地址:http://blog.chinaunix.net/uid-23037385-id-2565472.html fork()子进程创建 在 UNIX 系统中,用户创建一个新进程的唯一方法就是调用 ...

  10. Python爬虫笔记【一】模拟用户访问之Tesseract-ocr验证码训练(5)

    验证码处理之后就需要对处理的验证码进行识别训练,这里用Tesseract-ocr工具进行识别,用jTessBoxeditor进行训练生成模板. 一,对图片进行处理 利用上一篇代码对图片进行降噪处理,得 ...