PyQt5 高级界面控制(表格、树、tab、dock、scrollbar、多文档界面)

文章目录

    • 1. 表格与树
      • 1.1 QTableView
      • 1.2 QListView
      • 1.3 QListWidget
      • 1.4 QTableWidget
        • 表根据界面宽度自动伸缩
        • 禁止编辑
        • 单击某单元,使之默认选中整行
        • 设置宽高度与内容相匹配
        • 是否显示表头
        • 单元格中放置`控件`
        • 输入行号,快速定位行
        • 设置颜色
        • 加粗字体
        • 排序
        • 文本对齐
        • 合并单元格
        • 设置单元格大小
        • 显示网格线
        • 设置图片、更改图片大小
        • 获取单元格内容
        • 右键菜单
      • 1.5 QTreeView
        • 点击事件
        • 系统定制模式
    • 2. 容器:装载更多控件
      • QTabWidget
      • QStackedWidget
      • QDockWidget
      • 多文档界面 QMdiArea
      • QScrollBar

learn from 《PyQt5 快速开发与实战》
https://doc.qt.io/qtforpython/index.html
https://www.riverbankcomputing.com/static/Docs/PyQt5

1. 表格与树

1.1 QTableView

# _*_ coding: utf-8 _*_
# @Time : 2022/5/9 9:44
# @Author : Michael
# @File : tableview1.py
# @desc :
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QWidget, QTableView, QVBoxLayout, QApplication, QHeaderViewclass table_view(QWidget):def __init__(self):super().__init__()self.setWindowTitle("table_view")self.resize(500, 300)self.model = QStandardItemModel()self.model.setHorizontalHeaderLabels(["姓名", "年龄", "性别", "地址"])for r in range(4):for c in range(4):item = QStandardItem("row %s, col %s" % (r, c))self.model.setItem(r, c, item)# 添加数据self.model.appendRow([QStandardItem("张三"), QStandardItem("20"),])self.model.appendRow([QStandardItem('李四'), QStandardItem("21"),])self.tableview1 = QTableView()self.tableview1.setModel(self.model)self.tableview1.horizontalHeader().setStretchLastSection(True)self.tableview1.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)  # 表格填满窗口# 删除数据indexs = self.tableview1.selectionModel().selection().indexes()print(indexs)if len(indexs) > 0:index = indexs[0]self.model.removeRows(index.row(), 2)  # 删除两行index = self.tableview1.currentIndex()print(index, index.row(), index.column())self.model.removeRow(index.row()+1)layout = QVBoxLayout()layout.addWidget(self.tableview1)self.setLayout(layout)if __name__ == "__main__":import sysapp = QApplication(sys.argv)win = table_view()win.show()sys.exit(app.exec_())

在这里插入图片描述

1.2 QListView

  • 用于展示数据
# _*_ coding: utf-8 _*_
# @Time : 2022/5/9 21:08
# @Author : Michael
# @File : list_view1.py
# @desc :
from PyQt5.QtCore import QStringListModel
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QListView, QMessageBox, QApplicationclass listViewDemo(QWidget):def __init__(self):super(listViewDemo, self).__init__()self.setWindowTitle("ListView例子")self.resize(300, 300)layout = QVBoxLayout()listview = QListView()str_list_model = QStringListModel()self.qList = ['Item 1', 'Item 2', 'Item 3', 'Item 4']str_list_model.setStringList(self.qList)listview.setModel(str_list_model)listview.clicked.connect(self.clicked)layout.addWidget(listview)self.setLayout(layout)def clicked(self, qModelIndex):QMessageBox.information(self, "title", "text:你选择了 " + self.qList[qModelIndex.row()])if __name__ == '__main__':import sysapp = QApplication(sys.argv)main = listViewDemo()main.show()sys.exit(app.exec_())

在这里插入图片描述

1.3 QListWidget

用于从列表中添加删除条目,升级版QListView,可以调用函数直接添加数据

# _*_ coding: utf-8 _*_
# @Time : 2022/5/9 21:20
# @Author : Michael
# @File : listWidgetDemo.py
# @desc :
from PyQt5.QtWidgets import QListWidget, QMessageBox, QApplicationclass ListWidgetDemo(QListWidget):def clicked(self, item):QMessageBox.information(self, "ListWidget", "You clicked: " + item.text())if __name__ == '__main__':import sysapp = QApplication(sys.argv)listwidget = ListWidgetDemo()listwidget.resize(300, 200)listwidget.addItem("item 1")listwidget.addItem("item 2")listwidget.addItem("item 3")listwidget.addItem("item 4")listwidget.setWindowTitle("ListWidget Demo")listwidget.itemClicked.connect(listwidget.clicked)listwidget.show()sys.exit(app.exec_())

在这里插入图片描述

1.4 QTableWidget

QTableView 的子类

# _*_ coding: utf-8 _*_
# @Time : 2022/5/9 21:39
# @Author : Michael
# @File : tablewidgetDemo.py
# @desc :
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QTableWidget, QTableWidgetItem, QApplicationclass TableWidgetDemo(QWidget):def __init__(self):super(TableWidgetDemo, self).__init__()self.initUI()def initUI(self):self.setWindowTitle("TableWidget例子")self.resize(500, 300)layout = QHBoxLayout()tablewidget = QTableWidget(4, 3)  # 行,列# tablewidget.setRowCount(4)# tablewidget.setColumnCount(3)layout.addWidget(tablewidget)tablewidget.setHorizontalHeaderLabels(["姓名", "性别", "体重(kg)"])tablewidget.setVerticalHeaderLabels(["1行", "2行", "3行", "4行哦"])tablewidget.setItem(0, 0, QTableWidgetItem("张三"))tablewidget.setItem(0, 1, QTableWidgetItem("男"))tablewidget.setItem(0, 2, QTableWidgetItem("150"))self.setLayout(layout)if __name__ == "__main__":import sysapp = QApplication(sys.argv)main = TableWidgetDemo()main.show()sys.exit(app.exec_())

在这里插入图片描述

表根据界面宽度自动伸缩

tablewidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

在这里插入图片描述

禁止编辑

tablewidget.setEditTriggers(QTableWidget.NoEditTriggers)

单击某单元,使之默认选中整行

tablewidget.setSelectionBehavior(QTableWidget.SelectRows)

设置宽高度与内容相匹配

tablewidget.resizeColumnsToContents()
tablewidget.resizeRowsToContents()

是否显示表头

tablewidget.horizontalHeader().setVisible(False)
tablewidget.verticalHeader().setVisible(False)

单元格中放置控件

# 添加控件
combox = QComboBox()
combox.addItem("男")
combox.addItem("女")
combox.setStyleSheet("QComboBox{margin:3px width:80px;}")
tablewidget.setCellWidget(1, 1, combox)btn = QPushButton("保存")
btn.setDown(True)
btn.setStyleSheet("QPushButton{margin:20px width:20px;}")
tablewidget.setCellWidget(1, 2, btn)

在这里插入图片描述

输入行号,快速定位行

# _*_ coding: utf-8 _*_
# @Time : 2022/5/10 9:48
# @Author : Michael
# @File : table_position.py
# @desc :
from PyQt5.QtGui import QBrush, QColor
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QTableWidget, QTableWidgetItem, QApplication
from PyQt5.QtCore import Qtclass table_position(QWidget):def __init__(self):super(table_position, self).__init__()self.initUI()def initUI(self):self.setWindowTitle("Table Position")self.resize(300, 200)layout = QHBoxLayout()tablewidget = QTableWidget()tablewidget.setRowCount(30)tablewidget.setColumnCount(4)layout.addWidget(tablewidget)for i in range(30):for j in range(4):itemContent = f'{i},{j}'tablewidget.setItem(i, j, QTableWidgetItem(itemContent))self.setLayout(layout)# 遍历表格查找指定内容text = '10,1'items = tablewidget.findItems(text, Qt.MatchExactly)item = items[0]# 选中单元格item.setSelected(True)# 设置背景颜色item.setForeground(QBrush(QColor(255, 0, 0)))row = item.row()# 鼠标滚轮定位到第11行tablewidget.verticalScrollBar().setSliderPosition(row)
if __name__ == "__main__":import sysapp = QApplication(sys.argv)window = table_position()window.show()sys.exit(app.exec_())

在这里插入图片描述

设置颜色

# 设置颜色
newitem = QTableWidgetItem('new')
newitem.setForeground(QBrush(QColor(0, 255, 0)))
tablewidget.setItem(10, 1, newitem)

加粗字体

# 加粗字体
newitem = QTableWidgetItem("new")
newitem.setFont(QFont("Times", 20, QFont.Bold))
tablewidget.setItem(10, 2, newitem)

在这里插入图片描述

排序

tablewidget.sortItems(2, Qt.DescendingOrder) # 2 列,降序

在这里插入图片描述

文本对齐

# 文本对齐方式
newitem = QTableWidgetItem("michael")
newitem.setTextAlignment(Qt.AlignRight | Qt.AlignBottom)
tablewidget.setItem(10, 3, newitem)

在这里插入图片描述

合并单元格

# 合并单元格
tablewidget.setSpan(0, 0, 3, 1) # 0,0 位置 占据 3行 1列
tablewidget.setItem(0, 0, QTableWidgetItem("michael"))
tablewidget.setItem(1, 0, QTableWidgetItem("hello")) # 被占了,无效

在这里插入图片描述

设置单元格大小

# 设置单元格大小
tablewidget.setColumnWidth(0, 300)  # 0列 300宽
tablewidget.setRowHeight(0, 150)  # 0行 150高

在这里插入图片描述

显示网格线

# 不显示分割线
tablewidget.setShowGrid(False)

设置图片、更改图片大小

## 放置图片,调整大小
newitem = QTableWidgetItem(QIcon('../store.png'), "微软商店")
tablewidget.setItem(10, 3, newitem)
tablewidget.setIconSize(QSize(100, 100))

在这里插入图片描述

获取单元格内容

# 获取单元格内容tablewidget.itemClicked.connect(self.handleItemClicked)def handleItemClicked(self, item):print('你点击了' + item.text())

在这里插入图片描述

右键菜单

def generateMenu(pos):row_num = -1for i in tablewidget.selectionModel().selection().indexes():row_num = i.row()menu = QMenu()item1 = menu.addAction("删除")item2 = menu.addAction("修改")item3 = menu.addAction("添加")action = menu.exec_(tablewidget.mapToGlobal(pos))if action == item1:print(f"选中了删除,行号:{row_num}")elif action == item2:print(f"选中了修改,行号:{row_num}")elif action == item3:print(f"选中了添加,行号:{row_num}")# 允许右键菜单
tablewidget.setContextMenuPolicy(Qt.CustomContextMenu)
tablewidget.customContextMenuRequested.connect(generateMenu)

在这里插入图片描述

1.5 QTreeView

# _*_ coding: utf-8 _*_
# @Time : 2022/5/29 20:26
# @Author : Michael
# @File : treewidget01.py
# @desc :
import sysfrom PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QBrush
from PyQt5.QtWidgets import QApplication, QWidget, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QMainWindow, QStyleclass TreeWidgetDemo(QMainWindow):def __init__(self):super(TreeWidgetDemo, self).__init__()self.setWindowTitle("TreeWidget Demo")self.tree = QTreeWidget()self.tree.setColumnCount(2)self.tree.setHeaderLabels(['Key', 'Value'])root = QTreeWidgetItem(self.tree)root.setText(0, 'group1')root.setIcon(0, self.style().standardIcon(QStyle.SP_DirIcon))self.tree.setColumnWidth(0, 150)## 设置节点的背景颜色brush_red = QBrush(Qt.red)root.setBackground(0, brush_red)brush_green = QBrush(Qt.green)root.setBackground(1, brush_green)# 设置子节点1child1 = QTreeWidgetItem(root)child1.setText(0, 'child1')child1.setText(1, 'ios')child1.setIcon(0, QIcon("../store.png"))child1.setCheckState(0, Qt.Checked)# 设置子节点2child2 = QTreeWidgetItem(root)child2.setText(0, 'child2')child2.setText(1, '')# 设置子节点3child3 = QTreeWidgetItem(child2)child3.setText(0, 'child3')child3.setText(1, 'android')self.tree.addTopLevelItem(root)# 结点全部展开self.tree.expandAll()self.setCentralWidget(self.tree)if __name__ == '__main__':app = QApplication(sys.argv)tree = TreeWidgetDemo()tree.show()sys.exit(app.exec_())

在这里插入图片描述

点击事件

	self.tree.clicked.connect(self.on_tree_clicked)
def on_tree_clicked(self):item = self.tree.currentItem()print(item.text(0), item.text(1))

系统定制模式

  • 使用QTreeView,setModel
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *if __name__ == '__main__':app = QApplication(sys.argv)# Window系统提供的模式model = QDirModel()# 创建一个QtreeView部件tree = QTreeView()# 为部件添加模式tree.setModel(model)tree.setWindowTitle("QTreeView 例子")tree.resize(640, 480)tree.show()sys.exit(app.exec_())

在这里插入图片描述

2. 容器:装载更多控件

QTabWidget

# _*_ coding: utf-8 _*_
# @Time : 2022/5/29 21:01
# @Author : Michael
# @File : qtab_demo.py
# @desc :
import sysfrom PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QTabWidget, QPushButton, QHBoxLayout, QVBoxLayout, QFormLayout, \QLineEdit, QRadioButton, QLabel, QCheckBoxclass tab_demo(QTabWidget):def __init__(self):super().__init__()self.tab1 = QWidget()self.tab2 = QWidget()self.tab3 = QWidget()self.addTab(self.tab1, 'Tab1')self.addTab(self.tab2, 'Tab2')self.addTab(self.tab3, QIcon('../store.png'), 'Tab3')self.tab1UI()self.tab2UI()self.tab3UI()self.setWindowTitle('QTabWidget')def tab1UI(self):layout = QFormLayout()layout.addRow("姓名", QLineEdit())layout.addRow("地址", QLineEdit())self.setTabText(0, "联系方式")self.tab1.setLayout(layout)def tab2UI(self):layout = QFormLayout()sex = QHBoxLayout()sex.addWidget(QRadioButton("男"))sex.addWidget(QRadioButton("女"))layout.addRow(QLabel("性别"), sex)layout.addRow("生日", QLineEdit())self.setTabText(1, "个人详细信息")self.tab2.setLayout(layout)def tab3UI(self):layout = QHBoxLayout()layout.addWidget(QLabel("科目"))layout.addWidget(QCheckBox("物理"))layout.addWidget(QCheckBox("高数"))self.setTabText(2, "教育程度")self.tab3.setLayout(layout)if __name__ == '__main__':app = QApplication(sys.argv)demo = tab_demo()demo.show()sys.exit(app.exec_())

在这里插入图片描述

QStackedWidget

# _*_ coding: utf-8 _*_
# @Time : 2022/5/29 21:16
# @Author : Michael
# @File : qstackedwidget.py
# @desc :
import sysfrom PyQt5.QtWidgets import QWidget, QListWidget, QStackedWidget, QHBoxLayout, QApplication, QLabel, QCheckBox, \QLineEdit, QRadioButton, QFormLayoutclass qstackedwidget_demo(QWidget):def __init__(self):super(qstackedwidget_demo, self).__init__()self.setWindowTitle("QStackedWidget控件")self.setGeometry(100, 100, 800, 600)self.leftlist = QListWidget()self.leftlist.insertItem(0, "联系方式")self.leftlist.insertItem(1, "个人信息")self.leftlist.insertItem(2, "教育经历")self.stack1 = QWidget()self.stack2 = QWidget()self.stack3 = QWidget()self.stack1UI()self.stack2UI()self.stack3UI()self.stack = QStackedWidget()self.stack.addWidget(self.stack1)self.stack.addWidget(self.stack2)self.stack.addWidget(self.stack3)hbox = QHBoxLayout()hbox.addWidget(self.leftlist)hbox.addWidget(self.stack)self.setLayout(hbox)self.leftlist.currentRowChanged.connect(self.display)def stack1UI(self):layout = QFormLayout()layout.addRow("姓名", QLineEdit())layout.addRow("地址", QLineEdit())self.stack1.setLayout(layout)def stack2UI(self):layout = QFormLayout()sex = QHBoxLayout()sex.addWidget(QRadioButton("男"))sex.addWidget(QRadioButton("女"))layout.addRow(QLabel("性别"), sex)layout.addRow("生日", QLineEdit())self.stack2.setLayout(layout)def stack3UI(self):layout = QHBoxLayout()layout.addWidget(QLabel("科目"))layout.addWidget(QCheckBox("物理"))layout.addWidget(QCheckBox("高数"))self.stack3.setLayout(layout)def display(self, i):self.stack.setCurrentIndex(i)if __name__ == '__main__':app = QApplication(sys.argv)demo = qstackedwidget_demo()demo.show()sys.exit(app.exec_())

在这里插入图片描述

QDockWidget

在这里插入图片描述

# _*_ coding: utf-8 _*_
# @Time : 2022/5/29 21:40
# @Author : Michael
# @File : qdock_demo.py
# @desc :
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QDockWidget, QListWidget, QApplication, QTextEditclass qock_demo(QMainWindow):def __init__(self):super().__init__()layout = QHBoxLayout()bar = self.menuBar()file = bar.addMenu('File')file.addAction('New')file.addAction('Open')file.addAction('Save')self.setCentralWidget(QTextEdit())self.items = QDockWidget('Dockable', self)self.listWidget = QListWidget()self.listWidget.addItems(['Item 1', 'Item 2', 'Item 3'])self.items.setWidget(self.listWidget)self.items.setFloating(False)self.addDockWidget(Qt.RightDockWidgetArea, self.items)self.setLayout(layout)self.setWindowTitle('Dock例子')if __name__ == '__main__':import sysapp = QApplication(sys.argv)main = qock_demo()main.show()sys.exit(app.exec_())

在这里插入图片描述

多文档界面 QMdiArea

  • 可以有效节省内存
  • QMdiArea
# _*_ coding: utf-8 _*_
# @Time : 2022/5/29 23:20
# @Author : Michael
# @File : qmultiDocInterface.py
# @desc :import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class qmultiDocInterface(QMainWindow):count = 0def __init__(self, parent=None):super(qmultiDocInterface, self).__init__(parent)self.mdi = QMdiArea()self.setCentralWidget(self.mdi)bar = self.menuBar()file = bar.addMenu("File")file.addAction("New")file.addAction("cascade")file.addAction("Tiled")file.triggered[QAction].connect(self.windowaction)self.setWindowTitle("MDI demo")def windowaction(self, q):print("triggered")if q.text() == "New":qmultiDocInterface.count = qmultiDocInterface.count + 1sub = QMdiSubWindow()sub.setWidget(QTextEdit())sub.setWindowTitle("子窗口" + str(qmultiDocInterface.count))self.mdi.addSubWindow(sub)sub.show()if q.text() == "cascade":self.mdi.cascadeSubWindows() # 层叠if q.text() == "Tiled":self.mdi.tileSubWindows() # 平铺if __name__ == '__main__':app = QApplication(sys.argv)demo = qmultiDocInterface()demo.show()sys.exit(app.exec_())

在这里插入图片描述

QScrollBar

# _*_ coding: utf-8 _*_
# @Time : 2022/5/29 23:27
# @Author : Michael
# @File : qscrollbar.py
# @desc :
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class Example(QWidget):def __init__(self):super(Example, self).__init__()self.initUI()def initUI(self):hbox = QHBoxLayout()self.l1 = QLabel("拖动滑动条去改变颜色")self.l1.setFont(QFont("Arial", 16))hbox.addWidget(self.l1)self.s1 = QScrollBar()self.s1.setMaximum(255)self.s1.sliderMoved.connect(self.sliderval)self.s2 = QScrollBar()self.s2.setMaximum(255)self.s2.sliderMoved.connect(self.sliderval)self.s3 = QScrollBar()self.s3.setMaximum(255)self.s3.sliderMoved.connect(self.sliderval)hbox.addWidget(self.s1)hbox.addWidget(self.s2)hbox.addWidget(self.s3)self.setGeometry(300, 300, 300, 200)self.setWindowTitle('QScrollBar 例子')self.setLayout(hbox)def sliderval(self):print(self.s1.value(), self.s2.value(), self.s3.value())palette = QPalette()c = QColor(self.s1.value(), self.s2.value(), self.s3.value(), 255)palette.setColor(QPalette.Foreground, c)self.l1.setPalette(palette)if __name__ == '__main__':app = QApplication(sys.argv)demo = Example()demo.show()sys.exit(app.exec_())

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用pymysql进行数据库的增删改查

使用pymysql进行数据库的增删改查: import pymysqldatabase pymysql.connect(127.0.0.1,root,root,jxgl,charsetutf8)# 初始化指针 cursor database.cursor()# 增 # sql "insert into students(s_no,s_name,sex,birthday,D_NO,address,phone) VALUES (1230…

PyQt5 高级界面控制(多线程、网页交互、调用JavaScript)

文章目录1. 多线程1.1 QTimer1.2 QThread界面卡住例子分离UI和工作线程1.3 事件处理2. 网页交互显示本地 html显示 html 代码调用 JavaScriptJavaScript 调用 PyQt代码learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcom…

读写Excel 用 xlsxwriter,openpyxl 更灵活

一、xlsxwriter的使用: # import xlwt # # workbook xlwt.Workbook() # sheet0 workbook.add_sheet(sheet0) # for i in range(0,300): # sheet0.write(0,i,i) # workbook.save(number.xls)# 以上代码运行会报错,因为xlwt不支持超过256列的表格im…

LeetCode 2293. 极大极小游戏

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums ,其长度是 2 的幂。 对 nums 执行下述算法: 设 n 等于 nums 的长度,如果 n 1 ,终止 算法过程。否则,创建 一个新的整数数组 newNums &#x…

LeetCode 2294. 划分数组使最大差为 K

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 k 。你可以将 nums 划分成一个或多个 子序列 ,使 nums 中的每个元素都 恰好 出现在一个子序列中。 在满足每个子序列中最大值和最小值之间的差值最多为 k 的前提下,返回需要划分的 最…

LeetCode 2295. 替换数组中的元素

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的数组 nums ,它包含 n 个 互不相同 的正整数。请你对这个数组执行 m 个操作,在第 i 个操作中,你需要将数字 operations[i][0] 替换成 operations[i][1] 。 题目保证在第 i 个操作中&a…

LeetCode 2296. 设计一个文本编辑器(双栈)

文章目录1. 题目2. 解题1. 题目 请你设计一个带光标的文本编辑器,它可以实现以下功能: 添加:在光标所在处添加文本。删除:在光标所在处删除文本(模拟键盘的删除键)。移动:将光标往左或者往右移…

五、scrapy爬虫框架——logging 模块的使用

logging 模块的使用 1、scrapy settings中设置LOG_LEVEL“WARNING”settings中设置LOG_FILE"./a.log"#设置日志保存的位置,设置会后终端不会显示日志内容import logging,实例化logger的方式在任何文件中使用logger输出内容 2、普通项目中 import logg…

PyQt5 布局管理(水平、垂直、网格、表单、嵌套、QSplitter)

文章目录1. 布局管理2. 使用绝对位置布局3. QBoxLayoutaddStretch() 添加可伸缩控件4. QGridLayout5. QFormLayout6. 嵌套布局7. QSplitter 布局learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcomputing.com/static/Doc…

一、Java 面向对象高级——Object类、常用API

day01【Object类、常用API】 主要内容 Object类Date类DateFormat类Calendar类System类StringBuilder类包装类 教学目标 -[ ] 能够说出Object类的特点 -[ ] 能够重写Object类的toString方法 -[ ] 能够重写Object类的equals方法 -[ ] 能够使用日期类输出当前日期 -[ ] 能够使…

FineUI(专业版)v3.0.0 发布,手机、平板和桌面全支持!

FineUI(专业版)v3.0.0 已经正式发布,全面支持手机、平板和桌面!自 2008 年 4 月发布第一个版本,我们持续更新了 126 个版本,拥有 16000 多位注册用户,1300 多位捐赠会员,200 多位网友…

二、Java 面向对象高级——Collection、泛型

day02【Collection、泛型】 主要内容 Collection集合迭代器增强for泛型 教学目标 能够说出集合与数组的区别 说出Collection集合的常用功能 能够使用迭代器对集合进行取元素 能够说出集合的使用细节 能够使用集合存储自定义类型 能够使用foreach循环遍历集合 能够使用泛型定…

LeetCode 2299. 强密码检验器 II

文章目录1. 题目2. 解题1. 题目 如果一个密码满足以下所有条件,我们称它是一个 强 密码: 它有至少 8 个字符。至少包含 一个小写英文 字母。至少包含 一个大写英文 字母。至少包含 一个数字 。至少包含 一个特殊字符 。特殊字符为:"!#…

LeetCode 2300. 咒语和药水的成功对数(二分查找)

文章目录1. 题目2. 解题1. 题目 给你两个正整数数组 spells 和 potions ,长度分别为 n 和 m ,其中 spells[i] 表示第 i 个咒语的能量强度,potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药水的能量强度 相…

三、Java 面向对象高级——数据结构、List、Set、Collection

day03 【List、Set、数据结构、Collections】 主要内容 数据结构List集合Set集合Collections 教学目标 能够说出List集合特点 能够说出常见的数据结构 能够说出数组结构特点 能够说出栈结构特点 能够说出队列结构特点 能够说出单向链表结构特点 能够说出Set集合的特点 能够说…

Centos Cacti 0.8.8g

Centos Cacti 0.8.8g 一、Cacti简介1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此snmp和rrdtool是cacti的关键。Snmp关系着…

LeetCode 2301. 替换字符后匹配(字典)

文章目录1. 题目2. 解题1. 题目 给你两个字符串 s 和 sub 。同时给你一个二维字符数组 mappings ,其中 mappings[i] [oldi, newi] 表示你可以替换 sub 中任意数目的 oldi 字符,替换成 newi 。sub 中每个字符 不能 被替换超过一次。 如果使用 mappings…

一、Web服务器——Tomcat Servlet学习笔记

今日内容 web相关概念回顾web服务器软件:TomcatServlet入门学习 一、web相关概念回顾 软件架构 C/S:客户端/服务器端B/S:浏览器/服务器端 资源分类 静态资源:所有用户访问后,得到的结果都是一样的,称为静态…

LeetCode 2302. 统计得分小于 K 的子数组数目(前缀和+二分查找)

文章目录1. 题目2. 解题1. 题目 一个数组的 分数 定义为数组之和 乘以 数组的长度。 比方说,[1, 2, 3, 4, 5] 的分数为 (1 2 3 4 5) * 5 75 。 给你一个正整数数组 nums 和一个整数 k ,请你返回 nums 中分数 严格小于 k 的 非空整数子数组数目。 …

LeetCode 2303. 计算应缴税款总额

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的二维整数数组 brackets &#xff0c;其中 brackets[i] [upperi, percenti] &#xff0c;表示第 i 个税级的上限是 upperi &#xff0c;征收的税率为 percenti 。税级按上限 从低到高排序&#xff08;在满足 0 < i &…