当前位置: 首页 > news >正文

【Python】pyqt6入门到入土系列,非常详细...

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

一、什么是PyQt6? 简单介绍一下PyQt6

1、基础简介

PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。

PyQt6的官网:www.riverbankcomputing.co.uk/news。

PyQt6是由Riverbank Computing公司开发的

PyQt6 是基于 Python 的一系列模块。

它是一个多平台的工具包,可以在包括Unix、Windows和Mac OS在内的大部分主要操作系统上运行。

PyQt6 有两个许可证,开发人员可以在 GPL 和商业许可之间进行选择。

2、安装 PyQt6

  • pip install PyQt6

3、PyQt6 模块

PyQt6 类是由一系列模块组成的,包括如下的模块:

  • QtCore

  • QtGui

  • QtWidgets

  • QtDBus

  • QtNetwork

  • QtHelp

  • QtXml

  • QtSvg

  • QtSql

  • QtTest

3.1 界面框架部分

主类

  • QLayout

继承类

  • QGridLayout (网格布局)

  • QBoxLayout(简单的上下布局)

  • QStackedLayout (可切换widget的布局)

  • FlowLayout

3.2 界面组件部分(其实也是Widget类)

  • button

  • label等

3.3 界面样式部分

  • color

  • size

  • font

  • Icon

3.4 界面交互部分

  • action

  • event

  • signal

  • slot

  • connect

3.5 概念之间关系

QWidget 作为页面的主体,挂载layout(框架),框架添加页面的组件,通过 action(动作,类似于点击),event(事件),signal(信号),slot(信号槽),connect(动作绑定)产生交互
通过样式类,类似于 Icon(图标),大小,颜色,字体等,修改界面的细节
widget 上需要有layout,layout可以继续添加widget,可以一直加下去

3.6 学习文档

学习文档:参考First programs in PyQt6 - center window, tooltip, quit button, message box


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

素材、视频教程、完整代码、插件安装教程我都准备好了,直接在文末名片自取就可


二、编写一个简单的pyqt6程序

1、简介

编写一个简单的pyqt6程序

2、知识点

  • PyQt6

  • sys

3、实战

3.1 创建 python 文件

#引入类
from PyQt6.QtWidgets import (QApplication, QDialog, QPushButton, QHBoxLayout, QMessageBox
)
import sysif __name__ == "__main__":app = QApplication(sys.argv)window = QDialog()window.resize(400, 300)#弹出窗口def show_msg():QMessageBox.information(window, "信息提示", "你点击了我")需要python教程、资料、解答等+wx:qian97378免费获取hbox = QHBoxLayout()button = QPushButton("点击我")button.clicked.connect(show_msg)hbox.addWidget(button)window.setLayout(hbox)
#展示窗口window.show()sys.exit(app.exec())

3.2 运行结果

三、PyQt6如创建菜单栏

1、主要知识点

  • 文件读写

  • 基础语法

  • PyQt6

  • sys

2、实战

菜单栏在GUI应用程序中很常见,它是位于各种菜单中的一组命令。

(Mac OS 对菜单栏的处理是不同的,要得到类似的结果,我们可以添加下面这行: menubar.setNativeMenuBar(False)

import sys
from PyQt6.QtWidgets import QMainWindow, QApplication
from PyQt6.QtGui import QIcon, QActionclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):exitAct = QAction(QIcon('exit.png'), '&Exit', self)exitAct.setShortcut('Ctrl+Q')exitAct.setStatusTip('Exit application')exitAct.triggered.connect(QApplication.instance().quit)self.statusBar()menubar = self.menuBar()fileMenu = menubar.addMenu('&File')fileMenu.addAction(exitAct)self.setGeometry(300, 300, 350, 250)self.setWindowTitle('Simple menu')self.show()def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec())if __name__ == '__main__':main()

上门的示例中,创建了有一个菜单的菜单栏。

这个菜单命令是终止应用,也绑定了快捷键 Ctrl+Q。

示例中也创建了一个状态栏。

exitAct = QAction(QIcon('exit.png'), '&Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('Exit application')

QAction 是行为抽象类,包括菜单栏,工具栏,或自定义键盘快捷方式。

在上面的三行中,创建了一个带有特定图标和 ‘Exit’ 标签的行为。

此外,还为该行为定义了一个快捷方式。第三行创建一个状态提示,当我们将鼠标指针悬停在菜单项上时,状态栏中就会显示这个提示。

exitAct.triggered.connect(QApplication.instance().quit)

当选择指定的行为时,触发了一个信号,这个信号连接了 QApplication 组件的退出操作,这会终止这个应用程序。

menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAction)

menuBar 方法创建了一个菜单栏,然后使用 addMenu 创建一个文件菜单,使用 addAction 创建一个行为。

四、PyQt6创建一个状态栏

1、主要知识点

  • 文件读写

  • 基础语法

  • PyQt6

  • sys

2、实战

状态栏是显示状态信息的小部件。

import sys
from PyQt6.QtWidgets import QMainWindow, QApplicationclass Example(QMainWindow):# 需要python教程、资料、解答等+wx:qian97378免费获取def __init__(self):super().__init__()self.initUI()def initUI(self):self.statusBar().showMessage('Ready')self.setGeometry(300, 300, 350, 250)self.setWindowTitle('Statusbar')self.show()def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec())if __name__ == '__main__':main()

使用 QMainWindow 创建状态栏

self.statusBar().showMessage(‘Ready’)

使用 QtGui.QMainWindow 方法创建状态栏,该方法的创建了一个状态栏,并返回statusbar对象,再调用 showMessage 方法在状态栏上显示一条消息。

五、Python 中创建 PyQt6 的事件对象

1、主要知识点

  • 文件读写

  • 基础语法

  • PyQt6

  • sys

2、实战

事件对象是一个 Python object,包含了一系列描述这个事件的属性,具体内容要看触发的事件。

import sys
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QWidget, QApplication, QGridLayout, QLabelclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):grid = QGridLayout()x = 0y = 0self.text = f'x: {x},  y: {y}'self.label = QLabel(self.text, self)grid.addWidget(self.label, 0, 0, Qt.Alignment.AlignTop)self.setMouseTracking(True)self.setLayout(grid)需要python教程、资料、解答等+wx:qian97378免费获取self.setGeometry(300, 300, 450, 300)self.setWindowTitle('Event object')self.show()def mouseMoveEvent(self, e):x = int(e.position().x())y = int(e.position().y())text = f'x: {x},  y: {y}'self.label.setText(text)def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec())if __name__ == '__main__':main()

本例中,在标签组件里,展示了鼠标的坐标。

self.setMouseTracking(True)

鼠标跟踪默认是关闭的,鼠标移动时,组件只能在鼠标按下的时候接收到事件。

开启鼠标跟踪,只移动鼠标不按下鼠标按钮,也能接收到事件。

def mouseMoveEvent(self, e):x = int(e.position().x())y = int(e.position().y())...

e 是事件对象,它包含了事件触发时候的数据。

通过 position().x() 和 e.position().y() 方法,能获取到鼠标的坐标值。

self.text = f'x: {x},  y: {y}'
self.label = QLabel(self.text, self)

坐标值 x 和 y 显示在 QLabel 组件里。

六、Python 中的 PyQt6事件触发者

1、主要知识点

  • 文件读写

  • 基础语法

  • PyQt6

  • sys

2、实战

某些时候,需要知道事件的触发者是谁,PyQt6 有获取事件触发者的方法。

import sys
from PyQt6.QtWidgets import QMainWindow, QPushButton, QApplicationclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):btn1 = QPushButton("Button 1", self)btn1.move(30, 50)btn2 = QPushButton("Button 2", self)btn2.move(150, 50)btn1.clicked.connect(self.buttonClicked)btn2.clicked.connect(self.buttonClicked)self.statusBar()self.setGeometry(300, 300, 450, 350)self.setWindowTitle('Event sender')self.show()def buttonClicked(self):sender = self.sender()msg = f'{sender.text()} was pressed'self.statusBar().showMessage(msg)def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec())if __name__ == '__main__':main()

本例中有两个按钮。

buttonClicked 调用触发者方法确定了是哪个按钮触发的事件。

btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)

两个按钮绑定了同一个插槽。

def buttonClicked(self):sender = self.sender()msg = f'{sender.text()} was pressed'self.statusBar().showMessage(msg)

在应用的状态栏里,显示了是哪个按钮被按下。

七、Python 中 PyQt6 触发信号

1 、主要知识点

  • 文件读写

  • 基础语法

  • PyQt6

  • sys

2、实战

QObject 可以主动触发信号。

下面的示例显示了如果触发自定义信号。

import sys
from PyQt6.QtCore import pyqtSignal, QObject
from PyQt6.QtWidgets import QMainWindow, QApplicationclass Communicate(QObject):closeApp = pyqtSignal()class Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.c = Communicate()self.c.closeApp.connect(self.close)self.setGeometry(300, 300, 450, 350)self.setWindowTitle('Emit signal')self.show()def mousePressEvent(self, e):self.c.closeApp.emit()def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec())if __name__ == '__main__':main()

创建了一个叫 closeApp 的信号,在鼠标按下的时候触发,和关闭插槽 QMainWindow 绑定。

class Communicate(QObject):closeApp = pyqtSignal()

外部 Communicate 类的属性 pyqtSignal 创建信号。

self.c = Communicate()
self.c.closeApp.connect(self.close)

自定义信号 closeApp 绑定到 QMainWindow 的关闭插槽上。

def mousePressEvent(self, event):self.c.closeApp.emit()

在窗口上点击鼠标按钮的时候,触发 closeApp 信号,程序终止。

八、Python 中 PyQt6 的拖拽操作

1、主要知识点

  • 文件读写

  • 基础语法

  • PyQt6

  • sys

2、实战

  • QDrag

    QDrag 提供对基于 MIME 的拖放数据传输的支持。

    它处理拖放操作的大部分细节。

    传输的数据包含在 QMimeData 对象中。

import sysfrom PyQt6.QtWidgets import (QPushButton, QWidget,QLineEdit, QApplication)class Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)self.setAcceptDrops(True)def dragEnterEvent(self, e):if e.mimeData().hasFormat('text/plain'):e.accept()else:e.ignore()def dropEvent(self, e):self.setText(e.mimeData().text())class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):edit = QLineEdit('', self)edit.setDragEnabled(True)edit.move(30, 65)button = Button("Button", self)button.move(190, 65)# 需要python教程、资料、解答等+wx:qian97378免费获取self.setWindowTitle('Simple drag and drop')self.setGeometry(300, 300, 300, 150)def main():app = QApplication(sys.argv)ex = Example()ex.show()app.exec()if __name__ == '__main__':main()

示例展示了简单的拖拽操作。

class Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)

为了完成把文本拖到 QPushButton 部件上,我们必须实现某些方法才可以,所以这里创建了一个继承自 QPushButton 的 Button 类。

self.setAcceptDrops(True)

使用 setAcceptDrops 方法处理部件的释放事件。

def dragEnterEvent(self, e):if e.mimeData().hasFormat('text/plain'):e.accept()else:e.ignore()

dragEnterEvent 方法,定义了我们接受的数据类型————纯文本。

def dropEvent(self, e):self.setText(e.mimeData().text())

dropEvent 方法,处理释放事件————修改按钮组件的文本。

edit = QLineEdit('', self)
edit.setDragEnabled(True)

QLineEdit 部件支持拖放操作,这里只需要调用 setDragEnabled 方法激活它。

九、Python 中 PyQt6 的拖放按钮组件

1、主要知识点

  • 文件读写

  • 基础语法

  • PyQt6

  • sys

2、菜鸟实战

创建文件!

import sysfrom PyQt6.QtCore import Qt, QMimeData
from PyQt6.QtGui import QDrag
from PyQt6.QtWidgets import QPushButton, QWidget, QApplicationclass Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)def mouseMoveEvent(self, e):if e.buttons() != Qt.MouseButtons.RightButton:returnmimeData = QMimeData()drag = QDrag(self)drag.setMimeData(mimeData)drag.setHotSpot(e.position().toPoint() - self.rect().topLeft())dropAction = drag.exec(Qt.DropActions.MoveAction)def mousePressEvent(self, e):super().mousePressEvent(e)if e.button() == Qt.MouseButtons.LeftButton:print('press')class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setAcceptDrops(True)self.button = Button('Button', self)self.button.move(100, 65)self.setWindowTitle('Click or Move')self.setGeometry(300, 300, 550, 450)def dragEnterEvent(self, e):e.accept()def dropEvent(self, e):position = e.position()self.button.move(position.toPoint())e.setDropAction(Qt.DropActions.MoveAction)e.accept()def main():app = QApplication(sys.argv)ex = Example()ex.show()app.exec()if __name__ == '__main__':main()

本例中,窗口里有个 QPushButton,鼠标左键点击它,会在控制台打印 'press’消息,鼠标右键可以点击拖拽它。

class Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)

基于 QPushButton 创建了一个 Button 类,并实现了两个 QPushButton 方法:mouseMoveEvent 和 mousePressEvent。

mouseMoveEvent 方法是处理拖放操作开始的地方。

if e.buttons() != Qt.MouseButtons.RightButton:return

定义鼠标右键为触发拖拽操作的按钮,鼠标左键只会触发点击事件。

drag = QDrag(self)
drag.setMimeData(mimeData)drag.setHotSpot(e.position().toPoint() - self.rect().topLeft())

创建 QDrag 对象,以提供基于 MIME 数据类型的拖拽操作。

dropAction = drag.exec(Qt.DropActions.MoveAction)
1
drag 对象的 exec 方法执行拖拽操作。def mousePressEvent(self, e):super().mousePressEvent(e)if e.button() == Qt.MouseButtons.LeftButton:print('press')

如果鼠标左键点击按钮,会在控制台打印 ‘press’ 消息

注意:这里在父级上也调用了 mousePressEvent 方法,不然按钮按下的动作不会展现出来。

position = e.pos() self.button.move(position) 

dropEvent 方法处理鼠标释放按钮后的操作————把组件的位置修改为鼠标当前坐标。

e.setDropAction(Qt.MoveAction) e.accept() 

使用 setDropAction 指定拖放操作的类型————鼠标移动。

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

相关文章:

【Python】pyqt6入门到入土系列,非常详细...

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、什么是PyQt6? 简单介绍一下PyQt6 1、基础简介 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。 PyQt6的官网:www.riverbankcomputing.co.uk/news。 PyQt6是由Riverbank Co…...

TCP socket编程

一、服务端代码 #encoding utf -8 #导入socket库 from socket import * #等待客户端来连接,主机地址为0.0.0.0表示绑定本机所有网络接口ip地址 IP 0.0.0.0 #端口号 PORT 50000 #定义一次从socket缓存区最多读入512个字节数据 BUFLEN 512 #实例化一个socket编程…...

HTTP——一、了解Web及网络基础

HTTP 一、使用HTTP协议访问Web二、HTTP的诞生1、为知识共享而规划Web2、Web成长时代3、驻足不前的HTTP 三、网络基础TCP/IP1、TCP/IP协议族2、TCP/IP的分层管理3、TCP/IP 通信传输流 四、与HTTP关系密切的协议:IP、TCP和DNS1、负责传输的 IP 协议2、确保可靠性的TCP…...

[论文笔记] chatgpt系列 2.6 DeepSpeed-chat 数据集

一、FT数据集 & Reward model数据集 Deepspeed-chat 源代码的数据集: Dahoas/rm-static: 这是一个用于强化学习的静态环境数据集,包含了一个机器人在一个固定环境中的运动轨迹。该数据集旨在用于评估强化学习算法在静态环境下的表现。 Dahoas/full-hh-rlhf: 这是一个用于…...

探究SAM和眼球追踪技术在自动医学图像分割的应用(2023+GazeSAM: What You See is What You Segment)

摘要: 本研究探讨眼动追踪技术与SAM的潜力,以设计一个协同的人机交互系统,自动化医学图像分割。提出了GazeSAM系统,使放射科医生能够在图像诊断过程中通过简单地查看感兴趣的区域来收集分割掩模。该系统跟踪放射科医生的眼球运动…...

excle中的条件求和SUMIF

问题:将每一行中红色文字的前一个值累计求和到境外总数这一列 使用的公式 自制单元格的格式计算公式:ctrlf3打开格式管理,创建如下公式,其中24是表示获取文字颜色 由于sumif只能直接与第二参数条件比较,所以先使用IF(公…...

python-网络爬虫.Request

Request python中requests库使用方法详解: 一简介: Requests 是Python语言编写,基于urllib, 采用Apache2 Licensed开源协议的 HTTP 库。 与urllib相比,Requests更加方便,处理URL资源特别流畅。 可以节约我…...

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图)

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图) 目录 时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图)效果一览基本介绍程序设计参考资料效果一览 基本介绍 1.MATLAB实现GRNN广义回归神经网络时间序列预测(完整源码和数据) …...

如何看待低级爬虫与高级爬虫?

爬虫之所以分为高级和低级,主要是基于其功能、复杂性和灵活性的差异。根据我总结大概有下面几点原因: 功能和复杂性:高级爬虫通常提供更多功能和扩展性,包括处理复杂页面结构、模拟用户操作、解析和清洗数据等。它们解决了开发者…...

3.分支与循环

一、分支结构 1.概念 一个 CPP 程序默认是按照代码书写顺序,从上到下依次执行下来的。但是,有时我们需要选择性的执行某些语句,来实现更加复杂的逻辑,这时候就需要分支结构语句的功能来实现。选择合适的分支语句可以显著提高程序…...

面试之多线程案例(四)

1.单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。…...

抄写Linux源码(Day1:获取并运行 Linux0.11)

Day1:获取并运行 Linux0.11 参考资料:https://zhuanlan.zhihu.com/p/438577225 这是我参考的一个别人写的 Linux0.11 解读:https://github.com/dibingfa/flash-linux0.11-talk 我获取 Linux-0.11 源码的链接:https://github.com/…...

大数据_Hadoop_Parquet数据格式详解

之前有面试官问到了parquet的数据格式,下面对这种格式做一个详细的解读。 参考链接 : 列存储格式Parquet浅析 - 简书 Parquet 文件结构与优势_parquet文件_KK架构的博客-CSDN博客 Parquet文件格式解析_parquet.block.size_davidfantasy的博客-CSDN博…...

Docker的安装和部署

目录 一、Docker的安装部署 (1)关闭防火墙 (2)关闭selinux (3)安装docker引擎 (4)启动docker (5)设置docker自启动 (6)测试doc…...

FPGA项目实现:秒表设计

文章目录 项目要求项目设计 项目要求 设计一个时钟秒表,共六个数码管,前两位显示分钟,中间两位显示时间秒,后两位显示毫秒的高两位,可以通过按键来开始、暂停以及重新开始秒表的计数。 项目设计 为完成此项目共设计…...

Postgresql源码(109)并行框架实例与分析

1 PostgreSQL并行参数 系统参数 系统总worker限制:max_worker_processes 默认8 系统总并发限制:max_parallel_workers 默认8 单Query限制:max_parallel_workers_per_gather 默认2 表参数限制:parallel_workers alter table tbl …...

ES派生类的prototype方法中,不能访问super的解决方案

1 下面的B.prototype.compile方法中,无法访问super class A {compile() {console.log(A)} }class B extends A {compile() {super.compile()console.log(B)} }B.prototype.compile function() {super.compile() // 报错,不可以在此处使用superconsole.…...

使用adb通过电脑给安卓设备安装apk文件

最近碰到要在开发板上安装软件的问题,由于是开发板上的安卓系统没有解析apk文件的工具,所以无法通过直接打开apk文件来安装软件。因此查询各种资料后发现可以使用adb工具,这样一来可以在电脑上给安卓设备安装软件。 ADB 就是连接 Android 手…...

113、单例Bean是单例模式吗?

单例Bean是单例模式吗? 通常来说,单例模式是指在一个JVM中,一个类只能构造出来一个对象,有很多方法来实现单例模式,比如懒汉模式,但是我们通常讲的单例模式有一个前提条件就是规定在一个JVM中,那如果要在两个JVM中保证单例呢?那可能就要用分布式锁这些技术,这里的重点…...

RabbitMQ 集群部署

RabbiMQ 是用 Erlang 开发的,集群非常方便,因为 Erlang 天生就是一门分布式语言,但其本身并不支持负载均衡。 RabbitMQ 的集群节点包括内存节点、磁盘节点。RabbitMQ 支持消息的持久化,也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。 RabbitMQ 模式大…...

2023年【零声教育】13代C/C++Linux服务器开发高级架构师课程体系分析

对于零声教育的C/CLinux服务器高级架构师的课程到2022目前已经迭代到13代了,像之前小编也总结过,但是课程每期都有做一定的更新,也是为了更好的完善课程跟上目前互联网大厂的岗位技术需求,之前课程里面也包含了一些小的分支&#…...

iOS开发-实现热门话题标签tag显示控件

iOS开发-实现热门话题标签tag显示控件 话题标签tag显示非常常见,如选择你的兴趣,选择关注的群,超话,话题等等。 一、效果图 二、实现代码 由于显示的是在列表中,这里整体控件是放在UITableViewCell中的。 2.1 标签…...

linux系统磁盘性能监视工具iostat

目录 一、iostat介绍 二、命令格式 三、命令参数 四、参考命令:iostat -c -x -k -d 1 (一)输出CPU 属性值 (二)CPU参数分析 (三)磁盘每一列的含义 (四)磁盘参数分…...

BT#蓝牙 - Link Policy Settings

对于Classic Bluetooth的Connection,有一个Link_Policy_Settings,是HCI configuration parameters中的一个。 Link_Policy_Settings 参数决定了本地链路管理器(Link Manager)在收到来自远程链路管理器的请求时的行为,还用来决定改变角色(rol…...

c++ | 动态链接库 | 小结

//环境 linux c //生成动态链接库 //然后调用动态链接库中的函数//出现的问题以及解决//注意在win和在linux中调用动态链接库的函数是不一样的//在要生成链接库的cpp文件中比如以后要调用本文件中的某个函数,需要extern "c" 把你定的函数“再封装”避免重…...

如何使用Flask-SQLAlchemy来管理数据库连接和操作数据?

首先,我们需要安装Flask-SQLAlchemy。你可以使用pip来安装它,就像这样: pip install Flask-SQLAlchemy好了,现在我们已经有了一个可以操作数据库的工具,接下来让我们来看看如何使用它吧! 首先&#xff0c…...

麒麟-飞腾Kylin-V4桌面arm64系统静态编译QT

1.系统具体版本: 2. 因为此版本的源很老了,需要修改版本的源,才能正常更新各种软件,否则,你连麒麟商店都打不开。 sudo vi /etc/apt/sources.list 选择你系统对应版本的源地址: #4.0.2桌面版本: deb ht…...

CentOS 项目发出一篇奇怪的博文

导读最近,在红帽限制其 RHEL 源代码的访问之后,整个社区围绕这件事发生了很多事情。 CentOS 项目发出一篇奇怪的博文 周五,CentOS 项目董事会发出了一篇模糊不清的简短博文,文中称,“发展社区并让人们更容易做出贡献…...

【Mybatis-Plus】or拼接

Mybatis-Plus的or拼接是个坑: 这是需要的结果: queryWrapper.and(c->c.or(a->a.eq("qcs3.status", "SIGNING").eq("qcs.status", "SIGNING")).or(b->b.eq("qcs.status","INVALIDING&q…...

SpringBoot项目部署在Windows与Centos上

文章目录 Windows部署一、github上下载文件winsw二、文件目录三、编辑xml文件四、安装服务五、启动服务六、把jar包放到项目外面七、添加限制内存 Linux部署一、准备二、服务三、操作 Windows部署 windows部署服务借鉴于此篇博文 一、github上下载文件winsw 点击链接下载下图…...