2 PyQt5 ( QListWidget QTableWidget QTreeWidget)

1 QListWidget

QT5.15帮助文档 QListWidget

设置item可以编辑
item.setFlags(Qt.ItemIsEditable|Qt.ItemIsEnabled| Qt.ItemIsSelectable )

#!/usr/bin/env python3 
# -*- coding:GBK-*-
import os, sys, re
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal, QThread, Qt, QObject
from PyQt5.QtGui import QFont

__version__ = " version: 0.0.1"


class MainWindows(QWidget):
    def __init__(self,*args, **kwargs):
        super(MainWindows, self).__init__(*args, **kwargs)
        self.layout = QVBoxLayout(self)
        self.layout.setContentsMargins(0,0,0,0)
        self.listwidget = QListWidget()
        self.layout.addWidget(self.listwidget)
        self.resize(400, 500)
        for i in range(20):
            self.listwidget.addItem("item%02d"%i)

        #test
        self.add_btn    = QPushButton("增", clicked = self.on_add_btn_clicked  )
        self.clear_btn  = QPushButton("删", clicked = self.on_clear_btn_clicked)
        self.change_btn = QPushButton("改", clicked = self.on_change_btn_clicked)
        self.find_btn   = QPushButton("查", clicked = self.on_find_btn_clicked)
        btn_layout  = QHBoxLayout()
        btn_layout.addWidget(self.add_btn)
        btn_layout.addWidget(self.clear_btn)
        btn_layout.addWidget(self.change_btn)
        btn_layout.addWidget(self.find_btn)
        self.layout.addLayout(btn_layout)
        self.listwidget.itemDoubleClicked.connect(self.slot_itemDoubleClicked  )

    def slot_itemDoubleClicked(self,item ):
        pass 
        #item.setFlags(Qt.ItemIsEditable|Qt.ItemIsEnabled| Qt.ItemIsSelectable )
        # self.listwidget.openPersistentEditor(item)
        # self.listwidget.closePersistentEditor(item)


    def  on_add_btn_clicked(self):
        self.listwidget.addItem("item_add")

    def on_clear_btn_clicked(self):
        self.listwidget.clear()

    def  on_change_btn_clicked(self):
        pass 

    def on_find_btn_clicked(self):
        pass 

if __name__ == '__main__':
    app = QApplication(sys.argv)
    test = MainWindows()
    test.show()
    sys.exit(app.exec_())

#!/usr/bin/env python3 
# -*- coding:GBK -*-

import os, sys, re
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal, QThread, Qt, QObject
from PyQt5.QtGui import QFont

'''
修订记录:

version: 



'''



__version__ = " version: 2.0.2"

class MainWindows(QWidget):
    def __init__(self,*args, **kwargs):
        super(MainWindows, self).__init__(*args, **kwargs)
        self.layout = QVBoxLayout(self)
        self.layout.setContentsMargins(0,0,0,0)
        self.resize(400, 400)
        self.setWindowTitle("test ")
        self._init_ui()
        self.cl_map = {}

    def _init_ui(self):
        self.pre_page_btn     = QPushButton("前一页",clicked= self._on_pre_page_clicked     )
        self.current_page_btn = QPushButton("搜索"  ,clicked= self._on_current_page_clicked )
        self.next_page_btn    = QPushButton("后一页",clicked= self._on_next_page_clicked    )
        self.search_lineedit  = QLineEdit("搜索内容")
        self.page_num_spinbox = QSpinBox()
        self.page_num_spinbox.setValue(1)     
        self.page_num_spinbox.setRange(1,100) 
        self.page_num_spinbox.setSuffix(" 页") 
        self.page_num_spinbox.setPrefix("第 ")
        self.progress         =  QProgressBar()
        self.progress.setValue(100)
        qhboxlayout           = QHBoxLayout()
        qhboxlayout.setContentsMargins(0,0,0,0)
        qhboxlayout.addWidget(self.search_lineedit , 6 )
        qhboxlayout.addWidget(self.page_num_spinbox, 1 )
        qhboxlayout.addWidget(self.progress        , 1 )
        qhboxlayout.addWidget(self.pre_page_btn    , 1 )
        qhboxlayout.addWidget(self.current_page_btn, 1 )
        qhboxlayout.addWidget(self.next_page_btn   , 1 )
        self.layout.addLayout(qhboxlayout, 1 )
        #listwidget show label
        self.qlistwidget = QListWidget()
        self.layout.addWidget(self.qlistwidget, 10 )
        self.qlistwidget.itemDoubleClicked.connect(self.on_qlistwidget_doubleclicked)

    def  update_qlistwidget_items(self, infolist: list):
        self.qlistwidget.clear()
        self.cl_map.clear()
        for i in range(len(infolist)):
            self.cl_map[i] = infolist[i]
            self.qlistwidget.addItem("%d  "%i+ infolist[i][0])

    def _on_pre_page_clicked(self):
        value = self.page_num_spinbox.value()
        self.page_num_spinbox.setValue(value-1) 

    def _on_next_page_clicked(self):
        value = self.page_num_spinbox.value()
        self.page_num_spinbox.setValue(value+1) 

    def _on_current_page_clicked(self):
        self.cl_list = [
            ['恒流充电','test1'],
            ['恒流充电','test2'],
        ]
        self.update_qlistwidget_items(self.cl_list)

    def on_qlistwidget_doubleclicked(self, item ):
        #copy 
        item_num = int(item.text()[0])
        clipboard = QApplication.clipboard()
        clipboard.setText(self.cl_map[item_num][1])


if __name__ == '__main__':
    app = QApplication(sys.argv)
    test = MainWindows()
    test.show()
    sys.exit(app.exec_())

#!/usr/bin/python3
# -*- coding: GBK -*-

import sys,random
from PyQt5.QtCore import *
from PyQt5.QtGui  import *
from PyQt5.QtWidgets import *

class QListWidgetDemo(QWidget):
    def __init__(self):
        super(QListWidgetDemo, self).__init__()
        self.resize(600, 400)
        # self.setFixedSize(600,600)
        self.setWindowTitle("QListWidgetDemo")
        self.mainlayout = QHBoxLayout(self)
        self.mainlayout.setContentsMargins(2,2,2,2)

        self.qlistwidget =  QListWidget(self)
        self.stackwidget =  QStackedWidget(self)
        self.mainlayout.addWidget(self.qlistwidget,  1 )
        self.mainlayout.addWidget(self.stackwidget, 100)
        self.qlistwidget.setMinimumWidth(80)
        self.items = []
        for i in range(3):
            item = QListWidgetItem("界面%d"%i)
            widget = QWidget(self)
            widget.setStyleSheet("background-color:rgb(%d, %d, %d)"%(
                random.randint(0,255), random.randint(0,255), random.randint(0,255)) )
            self.stackwidget.addWidget(widget)
            self.qlistwidget.addItem(item)
            self.items.append(item)

        self.qlistwidget.itemClicked.connect(self.itemclicked)

    def itemclicked(self, item):
        for i in range(len(self.items)):
            if self.items[i] == item:
                self.stackwidget.setCurrentIndex(i)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    test = QListWidgetDemo()
    test.show()
    sys.exit(app.exec_())

如下:
在这里插入图片描述

2 QTableWidget

在这里插入图片描述
QTableWidget 继承自QTableView
常用信号:
在这里插入图片描述

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import  Qt
import sys

class DemoQTableWidget(QWidget):
    def __init__(self):
        super(DemoQTableWidget, self).__init__()
        self.setWindowTitle("DemoQFrame例子")
        self.resize(600,400)
        self.mainlayout = QVBoxLayout(self)
        #创建表格  5行4列
        self.table = QTableWidget( 5,4,self)
        # 设置水平表头标签
        self.table.setHorizontalHeaderLabels(["姓名","年龄","性别","籍贯"])
        #隐藏垂直表头(获得水平表头类似)
        self.table.verticalHeader().hide()
        #获得表格行数列数 及设置行列
        self.table.setRowCount(5)
        self.table.setColumnCount(4)
        print("表格大小:%d行%d列"%(self.table.rowCount(),self.table.columnCount()))
        #合并单元格 setSpan(int row,int column,int rowSpanCount,int columnSpanCount)
        #合并单元格,要改变单元格的第row行,column列,要合并rowSpancount行数和columnSpanCount列数
        self.table.setSpan(1,1,2,1)
        # 在默认情况下表格的显示是有网格的,可以设置True或False用于是否显示,默认True
        self.table.setShowGrid(True) #False
        # 设置单元格行宽度
        self.table.setColumnWidth(0,180)
        #设置单元格列高度
        self.table.setRowHeight(3,100)
        #单元格中添加数据
        row,col = 5,4
        for i in range(row):
            for j in range(col):
                item = QTableWidgetItem("%d行%d列"%(i,j))
                self.table.setItem(i,j,item)
        #布局
        self.mainlayout.addWidget(self.table)
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        #信号槽
        self.table.itemClicked.connect(self.slot_itemClicked)
        #stylesheet
        self.table.horizontalHeader().setStyleSheet("QHeaderView::section{background:lightblue;}")
        self.table.setStyleSheet('''
        QTableWidget::item:hover{background-color:rgb(92,188,227,200)}
        QTableWidget::item:selected{background-color:#1B89A1}
        ''')

    def slot_itemClicked(self,item): #QTableWidgetItem *item
        print(item.text(),"被点击")
if __name__ == '__main__':
    app = QApplication(sys.argv)
    test = DemoQTableWidget()
    test.show()
    sys.exit(app.exec_())

效果如下:
在这里插入图片描述

self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
表格大小适应窗口

3 QTreeWidget

Qt5.15 Class QTreeWidget

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值