1 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)
表格大小适应窗口