08. 文本框控件
一、文本框控件
图形界面上需要输入信息,与程序进行沟通,输入数据信息的控件有单行文本控件、多行文本控件等。我们可以在终端中使用 pip 安装 pyside6 模块。
pip install pyside6
二、单行文本框控件
QLineEdit 控件是单行文本编辑器,用于接收用户输入的字符串数据,并显示字符串数据,输入的整数和浮点数也会当作字符串数据。可以利用 int() 和 float() 函数将字符串型整数和浮点数转换成整数和浮点数。
用 QLineEdit 类创建实例对象的方法如下。
QLineEdit(parent:QWidget=None)
QLineEdit(text:str, parent:QWidget=None)
其中 parent 是 窗口 或者 容器类控件 ,text 是 QLineEdit 上 显示的本文 。
QLineEdit 控件可以用于密码输入,可以进行复制、粘贴、删除等操作。它的常用方法如下:
# 实例方法
insert(text:str) -> None # 在光标处插入文本
text() -> str # 获取真实文本,而不是显示文本
displayText() -> str # 获取显示文本
setMask(arg__1:QBitmap) -> None # 设置遮掩图像
setModified(arg__1:bool) -> None # 设置文本更改状态
isModified() -> bool # 获取文本更改状态
setPlaceholderText(arg__1:str) -> None # 设置占位符文本(提示文本)
placeholderText() -> str # 获取占位符文本(提示文本)
setClearButtonEnabled(enable:bool) -> None # 设置清除按钮是否可用
isClearButtonEnabled() -> bool # 获取清除按钮是否可用
setMaxLength(arg__1:int) -> None # 设置文本的最大长度
maxLength() -> int # 获取文本的最大长度
setReadOnly(arg__1:bool) -> None # 设置文本是否只读
isReadOnly() -> bool # 获取文本是否只读
setAlignment(flag:Qt.AlignmentFlag) -> None # 设置文本的对齐方式
setFrame(arg__1:bool) -> None # 设置是否显示外框
backspace() -> None # 删除光标左侧或选中的文本
del_() -> None # 删除光标右侧或选中的文本
isUndoAvailable() -> bool # 是否可以撤销操作
isRedoAvailable() -> bool # 是否可以重做操作
setDragEnabled(b:bool) -> None # 设置文本是否允许拖拽
setEchoMode(arg__1:QLineEdit.EchoMode) -> None # 设置文本框的显示模式
setTextMargins(margins:QMargins) -> None # 设置文本区域到外框的距离
setCompleter(completer:QCompleter) -> None # 设置自动补全组件
# 槽函数
setText(text:str) -> None # 设置文本
clear() -> None # 清除文本
copy() -> None # 复制文本选中的文本
cut() -> None # 剪切文本选中的文本
paste() -> None # 粘贴文本
由于单行文本控件可以用于输入密码,其显示的内容并不一定是输入的内容。用 setText(str)
方法 设置文本内容;用 text()
方法 获取真实的文本,而不是界面上显示的文本,例如在密码输入模式下,得到的是输入的密码,而不是界面上显示的掩码;用 displayText()
方法 获取显示的文本内容。
用 setEchoMode(QLineEdit.EchoMode)
方法可以设置成密码输入方式,其中 QLineEdit.EchoMode 的取值是枚举类型,可以设置的值如下:
QLineEdit.EchoMode.Normal # 0,正常显示输入的字符,这是默认值
QLineEdit.EchoMode.NoEcho # 1,输入文字时不显示任何输入,文字内容和个数都不可见
QLineEdit.EchoMode.Password # 2,显示密码掩码,不显示实际输入的字符,能显示字符个数
QLineEdit.EchoMode.PasswordEchoOnEdit # 3,在编辑的时候显示字符,不编辑的时候显示掩码
QLineEdit 中输入的数据有时只能为整数,有时只能为浮点数,这时就需要对输入的数据进行合法性检验。QLineEdit 的合法性检验用 setValidator(QValidator)
方法,它的参数是一个 QValidator 类,QValidator 类用来检查输入内容的合法性,当输入内容合法时,才能成功输入并在输入框中显示。
QValidator 是一个抽象类,其子类 QIntValidator、QDoubleValidator 分别用来设置 合法整数 和 合法浮点数,还有一个子类 QRegExpValidator 结合 正则表达式 来判断输入的合法性。
QIntValidator 设置整数范围的下限和上限,其使用方法是 QIntValidator(int,int,parent=None)
,其中第 1 个 int 是下限,第 2 个 int 是上限;或者用QIntValidator 的 setRange(int,int)
、setBottom(int)
和 setTop(int)
方法来设置下限和上限。
QDoubleValidator 的使用方法是 QDoubleValidator(float,float,int,parent=None)
,其中第 1 个 float 参数是下限,第 2 个 float 参数是上限,int 是小数的位数,同样也可通过 setRange(float,float.int)
、setBottom(float)
、setTop(float)
和 setDecimals(int)
方法来设置下限、上限和小数位数。
在 QLineEdit 中输入数据时,可以有辅助性的提示信息帮助快速完成输入,用 setCompleter(QCompleter)
方法 设置辅助补全的内容,其中 QCompleter 是 辅助补全的类。创建辅助补全的方法如下。
QCompleter(completions:Sequence[str],parent:QObject=None)
QCompleter(model:QAbstractItemModel,parent:QObject=None)
QCompleter(parent:QObject]=None)
用 QCompleter 的 setModel(QAbstractItemModel)
方法 设置数据模型。用 setCompletionMode(mode:QCompleter.CompletionMode)
方法 设置模式,其中枚举类型 QCompleter.CompletionMode 可以取 QCompleter.PopupCompletion(弹窗模式)、QCompleter.InlineCompletion(输入框内选中模式)或QCompleter.UnfilteredPopupCompletion(以弹窗模式列出所有可能的选项)。
用代码在 QLineEdit 中插入文字或选择文字时,需要定位光标的位置,获取或移动光标的方法如下所示。
cursorBackward(mark:bool, steps:int=1) -> None # 向左移动steps个字符,mark为True时带选中效果
cursorForward(mark:bool, steps:int=1) -> None # 向右移动steps个字符,mark为True时带选中效果
home(mark:bool) -> None # 移动光标到文本开头,mark为True时带选中效果
end(mark:bool) -> None # 移动光标到文本末尾,mark为True时带选中效果
setCursorPosition(position:int) -> None # 设置光标到指定位置
cursorPosition() -> int # 获取光标位置
cursorPositionAt(pos:QPoint) -> int # 获取指定位置出的光标位置
对 QLineEdit 中的文本可以进行复制、粘贴、删除等操作,一般都需要先选择文本,然后再操作。选择文本的方法如下所示。
# 实例方法
setSelection(start:int, end:int) -> None # 选中指定范围内的文本
deselect() -> None # 取消选中
hasSelectedText() -> bool # 判断是否选中文本
selectionLength() -> int # 返回选中文本的长度
selectionStart() -> int # 返回选中文本的起始位置
selectionEnd() -> int # 返回选中文本的结束位置
selectedText() -> str # 返回选中文本
# 槽函数
selectAll() -> None # 选中全部文本
对于需要输入固定格式的文本,可以用 setInputMask()
方法来 定义这种固定的格式。例如 setInputMask("000.000.000.000")
和 setInputMask("000.000.000.000;_)
方法都可以输入 IP 地址,后者在未输入字符的位置用下划线来表示空位;setInputMask("HH:HH:HH:HH:HH:HH")
和 setInputMask("HH:HH:HH:HH:HH:HH;_;_")
方法都可以输入 MAC 地址;setInputMask("0000-00-00")
方法可以输入 ISO 标准格式日期,setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#")
方法可以用于输入 License 序列号,所有字母转换为大写。可以用于格式化输入的字符如下所示。
字符 | 含义 |
---|---|
A | 字母是必须的,取值范围为 A ~ Z, a ~ z |
a | 字母是允许的,但不是必须的 |
N | 字母和数字是必须的,取值范围为 A ~ Z, a ~ z, 0 ~ 9 |
n | ASCII 字母和数字是允许的,但不是必须的 |
X | 任何字符都是必须的 |
x | 任何字符都是允许的,但不是必须的 |
9 | 数字是必须的,取值范围为 0 ~ 9 |
0 | 数字是允许的,但不是必须的 |
D | 数字是必须的,取值范围为 0 ~ 9 |
d | 数字是允许的,但不是必须的,取值范围为 0 ~ 9 |
# | 数字或加减符号是允许的,但不是必须的 |
H | 十六进制数据是必须的,取值范围为 A ~ F, a ~ f, 0 ~ 9 |
h | 十六进制数据是允许的,但不是必须的 |
B | 二进制数据是必须的,取值范围为 0, 1 |
b | 二进制数据是允许的,但不是必须的 |
> | 所有字母都大写 |
< | 所有字母都小写 |
! | 关闭大小写转换 |
\ | 使用 \ 去转移上述列出的特殊字符 |
;c | 终止输入遮掩,并把空余输入设置成 c |
QLineEdit 类常用信号及其说明:
textEdited(text:str) # 文本被编辑时发射信号,不适用setText()方法引起的文本改变
textChanged(text:str) # 文本改变时发射信号,包含setText()方法引起的文本改变
cursorPositionChanged(oldPos:int, newPos:int) # 光标位置改变时发射信号
selectionChanged() # 选中文本改变时发射信号
returnPressed() # 按下Enter键时发射信号
editingFinished() # 编辑完成时发射信号,按下Enter键为编辑结束标记
inputRejected() # 输入被拒绝时发射信号
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QLineEdit
class MyWidget(QWidget):
def __init__(self):
# 1.调用父类Qwidget类的__init__()方法
super().__init__()
# 2.调用setupUi()方法初始化页面
self.setup_ui()
def setup_ui(self):
# 1.设置窗口的大小和位置
self.setGeometry(400, 200, 480, 370)
# 2.创建单行文本框对象,并指定父窗口
self.lineEdit = QLineEdit(self)
self.lineEdit.setGeometry(100, 100, 200, 20)
# 3.设置单行文本框浮现内容
self.lineEdit.setPlaceholderText("请输入内容")
# 4.设置允许单行文本框输入的字符的最大长度
self.lineEdit.setMaxLength(15)
# 5.使单行文本框得到焦点
self.lineEdit.setFocus()
# 6.设置清空按钮
self.lineEdit.setClearButtonEnabled(True)
# 7.定义信号与槽的连接
self.lineEdit.textChanged.connect(self.textChanged)
def textChanged(self, text):
print("你输入的文本改变了")
print("改变后的文本为", text)
if __name__ == "__main__":
# 1.创建一个QApplication类的实例
app = QApplication(sys.argv)
# 2.创建一个窗口
window = MyWidget()
# 3.展示窗口
window.show()
# 4.进入程序的主循环并通过exit()函数确保主循环安全结束
sys.exit(app.exec())
二、多行文本框控件
多行文本控件可以用于编辑和显示多行文本和图片,并可对文本进行格式化。多行文本编辑控件 QTextEdit 继承自 QAbstractScrollArea。QAbstractScrollArea 为其子类提供中心视口(viewport)控件,从而保证子类显示的内容超过控件窗口的范围时,提供竖直和水平滚动条。
QTextEdit 是主要用于显示并编辑多行文本的控件,支持富文本,当文本内容超出控件显示范围时,可以显示水平和竖直滚动条。QTextEdit 不仅可以用来显示文本,还可以用来显示 html 文档。
用 QTextEdit 类创建实例对象的方法如下所示。
QTextEdit(parent:QWidget=None)
QTextEdit(text:str, parent:QWidget=None)
其中 parent 是 窗口 或者 容器类控件 ,text 是 要显示的文本内容 。
多行文本控件的常用方法如下:
# 实例方法
toHtml() -> str # 获取html格式的文本
toPlainText() -> str # 获取纯文本格式的文本
setPlaceholderText(placeholderText:str) -> None # 设置占位符文本
placeholderText() -> str # 获取占位符文本
createStandardContextMenu(position:QPoint) -> QMenu # 创建标准的右键菜单
setCurrentCharFormat(format:QCharFormat) -> None # 设置当前字符格式
find(exp:str, options=QTextDocument.FindFlags()) -> int # 查找文本
print_(printer:QPrinter) -> None # 打印文本
setAcceptRichText(accept:bool) -> None # 设置是否接受富文本
acceptRichText() -> bool # 获取是否接受富文本
setCursorWidth(width:int) -> None # 设置光标宽度
setTextCursor(cursor:QTextCursor) -> None # 设置文本光标
textCursor() -> QTextCursor # 获取文本光标
setHorizontalScrollBarPolicy(arg__1:Qt.ScrollBarPolicy) -> None # 设置水平滚动条策略
setVerticalScrollBarPolicy(arg__1:Qt.ScrollBarPolicy) -> None # 设置垂直滚动条策略
setDocument(document:QTextDocument) -> None # 设置文档
setDocumentTitle(title:str) -> None # 设置文档标题
currentFont() -> QFont # 获取当前字体
fontFamily() -> str # 获取字体名称
fontItalic() -> bool # 获取字体是否斜体
fontPointSize() -> float # 获取字体大小
fontUnderline() -> bool # 获取字体是否下划线
fontWeight() -> int # 获取字体粗细
setOverwriteMode(overwrite:bool) -> None # 设置是否允许覆盖
overwriteMode() -> bool # 获取是否允许覆盖
setReadOnly(ro:bool) -> None # 设置是否只读
isReadOnly() -> bool # 获取是否只读
setTabStopDistance(distance:float) -> None # 设置tab停止距离
tabStopDistance() -> float # 获取tab停止距离
textBackgroundColor() -> QColor # 获取文字背景颜色
textColor() -> QColor # 获取文字颜色
setUndoRedoEnabled(enable:bool) -> None # 设置是否允许撤销和重做
isUndoRedoEnabled() -> bool # 获取是否允许撤销和重做
setWordWrapMode(policy:Qt.WordWrapMode) -> None # 设置换行模式
zoomInF(range:int=1) -> None # 放大
canPaste() -> bool # 获取是否可以粘贴
# 槽函数
setText(text:str) -> None # 设置显示的文本
append(text:str) -> None # 追加文本
setPlainText(text:str) -> None # 设置纯文本文字
insertPlainText(text:str) -> None # 插入纯文本文字
setHtml(text:str) -> None # 设置html格式文字
insertHtml(text:str) -> None # 插入html格式文字
setAlignment(a:Qt.AlignmentFlag) -> None # 设置文字对齐方式
setCurrentFont(f:QFont) -> None # 设置字体
setFontFamily(fontFamily:str) -> None # 设置字体名称
setFontItalic(b:bool) -> None # 设置字体是否斜体
setFontPointSize(s:float) -> None # 设置字体大小
setFontUnderline(b:bool) -> None # 设置字体是否下划线
setFontWeight(w:int) -> None # 设置字体粗细
setTextBackgroundColor(c:QColor) -> None # 设置文字背景颜色
setTextColor(c:QColor) -> None # 设置文字颜色
zoomIn(range:int=1) -> None # 放大
zoomOut(range:int=1) -> None # 缩小
selectAll() -> None # 全选
clear() -> None # 清空
copy() -> None # 复制
cut() -> None # 剪切
paste() -> None # 粘贴
undo() -> None # 撤销
redo() -> None # 重做
多行文本框常用信号及其说明如下:
textChanged() # 文本改变时发射信号
selectionChanged() # 选中文本改变时发射信号
copyAvailable(b:bool) # 复制文本时发射信号
currentCharFormatChanged(format: QTextCharFormat) # 改变字体样式时发射信号
cursorPositionChanged() # 光标位置改变时发射信号
redoAvailable(b: bool) # 重做时发射信号
undoAvailable(b:bool) # 撤销时发射信号
用 QTextEdit 的 setCurrentCharFormat(QTextCharFormat)
方法可以设置文字的字体格式,QTextCharFormat 类用于定义字体的格式参数。文字格式 QTextCharFormat的常用方法如下所示。
setFont(font:QFont, behavior:QTextCharFormat.FontPropertiesInheritanceBehavior=QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesAll) -> None # 设置字体
setFontCapitalization(capitalization:QTextCharFormat.FontCapitalization) -> None # 设置大小写
setFontFamilies(families:Sequence[str]) -> None # 设置字体名称
setFontFamily(family:str) -> None # 设置字体
setFontFixedPitch(fixedPitch:bool) -> None # 设置固定宽度字体
setFontItalic(italic:bool) -> None # 设置斜体
setFontKerning(enable:bool) -> None # 设置字符间距
setFontLetterSpacing(spacing:float) -> None # 设置字符间距样式
setFontLetterSpacingType(letterSpacingType:QFont.SpacingType) -> None # 设置字符间距样式
setFontWordSpacing(spacing:float) -> None # 设置字符间距
setFontOverline(overline:bool) -> None # 设置上划线
setFontUnderline(underline:bool) -> None # 设置下划线
setUnderlineColor(color:Union[QColor, Qt.GlobalColor]) -> None # 设置下划线颜色
setUnderlineStyle(style:Qt.QTextCharFormat.UnderlineStyle) -> None # 设置下划线样式
setFontStrikeOut(strikeOut:bool) -> None # 设置删除线
setTextOutline(pen:Union[Qt.PenStyle]) -> None # 设置轮廓线
setSuperScriptBaseline(baseline:float:50) -> None # 设置上标基线(字体高度百分比值)
setSubScriptBaseline(baseline:float=16.67) -> None # 设置下标基线(字体高度百分比值)
setFontPointSize(size:int) -> None # 设置字体大小
setFontWeight(weight:int) -> None # 设置字体粗细
setFontStretch(factor:int) -> None # 设置拉伸百分比
setBaselineOffset(baseline:float) -> None # 设置基线偏移
setToolTip(tip:str) -> None # 设置提示
setVerticalAlignment(alignment:Qt.AlignmentFlag) -> None # 设置垂直对齐
setAnchor(anchor:bool) -> None # 设置锚点
setAnchorHref(value:str) -> None # 设置锚点链接
setAnchorNames(names:Sequence[str]) -> None # 设置锚点名称
其中,用 setFont(QFont,behavior=QTextCharFormat.FontPropertiesAll)
方法设置字体,其中参数 behavior 可以取 QTextCharFormat.FontPropertiesSpecifiedOnly 或 QTextCharFormat.FontPropertiesAll,分别表示在没有明确改变一个属性时不改变属性的值,还是用默认的值覆盖现有的值;
用 setUnderlineStyle(QTextCharFormat.UnderlineStyle)
方法设置下划线的风格,其中枚举值 QTextCharFormat.UnderlineStyle 可以取值如下:
QTextCharFormat.UnderlineStyle.SingleUnderline
QTextCharFormat.UnderlineStyle.DashUnderline
QTextCharFormat.UnderlineStyle.DotLine
QTextCharFormat.UnderlineStyle.DashDotLine
QTextCharFormat.UnderlineStyle.DashDotDotLine
QTextCharFormat.UnderlineStyle.WaveUnderline
QTextCharFormat.UnderlineStyle.SpellCheckUnderline
用 setVerticalAlignment(QTextCharFormat.VerticalAlignment)
方法设置文字在竖直方向的对齐方式,枚举值QTextCharFormat.VerticalAlignment 可以取值如下:
QTextCharFormat.VerticalAlignment.AlignNormal
QTextCharFormat.VerticalAlignment.AlignSuperScript
QTextCharFormat.VerticalAlignment.AlignSubScript
QTextCharFormat.VerticalAlignment.AlignMiddle
QTextCharFormat.VerticalAlignment.AlignBottom
QTextCharFormat.VerticalAlignment.AlignTop
QTextCharFormat.VerticalAlignment.AlignBaseline
QTextCursor 类是 QTextEdit 文档中的光标,用于捕获光标在文档中的位置,选择文字,在光标位置处插入文本、图像、文本块(段落)和表格等。用 QTextCursor 创建光标对象的方法如下所示,可以为一个文档创建多个 QTextCursor 光标。
QTextCursor()
QTextCursor(block:QTextBlock)
QTextCursor(document:QTextDocument)
QTextCursor(frame:QTextFrame)
文本光标 QTextCursor 的常用方法如下:
setPosition(pos:int, mode:QTextCursor.MoveMode = QTextCursor.MoveMode.MoveAnchor) -> None # 设置光标的位置
position() -> int # 获取光标的位置
positionInBlock() -> int # 获取光标在块内的位置
atStart() -> bool # 判断光标是否在文本的开始
atEnd() -> bool # 判断光标是否在文本的结束
atBlockStart() -> bool # 判断光标是否在块的开始
atBlockEnd() -> bool # 判断光标是否在块的结束
setCharFormat(format:QTextCharFormat) -> None # 设置文本的格式
setBlockCharFormat(format:QTextCharFormat) -> None # 设置块内文本的格式
setBlockFormat(format:QTextBlockFormat) -> None # 设置块(段落)的格式
block() -> QTextBlock # 获取光标所在的块
charFormat() -> QTextCharFormat # 获取光标所在的文本的格式
blockCharFormat() -> QTextCharFormat # 获取光标所在的块内文本的格式
blockFormat() -> QTextBlockFormat # 获取光标所在的块的格式
clearSelection() -> None # 清除选择,将锚点移动到光标位置
deleteChar() -> None # 删除选中的或当前的文字
deletePreviousChar() -> None # 删除选中的或光标前置的文字
document() -> QTextDocument # 获取文本文档
removeSelectedText() -> None # 删除选中的文本
selectedText() -> str # 获取选中的文本
insertText(text:str) -> None # 插入文本
insertText(text:str, format:QTextCharFormat) -> None # 插入文本,并设置文本格式
insertBlock() -> None # 插入新文本块
insertBlock(format:QTextBlockFormat) -> None # 插入新文本块,并设置块格式
insertFragment(fragment:QTextDocumentFragment) -> None # 插入文本片段
insertFrame(format:QTextFrameFormat) -> None # 插入框架
insertHtml(html:str) -> None # 插入HTML
insertImage(format:QTextImageFormat) -> None # 插入带格式的图片
insertImage(image:QImagename, name:str="") -> None # 插入图片
insertImage(name:str) -> None # 插入图片
insertList(format:QTextListFormat) -> None # 插入列表
insertList(style:QTextListFormat.Style) -> None # 插入列表
insertTable(rows:int, columns:int) -> None # 插入表格
insertTable(rows:int, columns:int, format:QTextTableFormat) -> None # 插入带格式的表格
如果文档中有锚点 anchor(),则在锚点位置和光标位置 position() 之间的文本会被选中。用 setPosition(pos:int,mode=QTextCursor.MoveAnchor)
方法移动光标或锚点到指定位置,参数 mode 可取 QTextCursor.MoveAnchor 或 QTextCursor.KeepAnchor;用 setCharFormat(QTextCharFormat)
方法可以设置文本的格式;用 insertText(str)
或 insertHtml(str)
方法插入文本;用 insertImage(QTextImageFormat)
方法插入图像;用 insertTable(rows:int,cols:int)
方法插入表格。
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QTextEdit
from PySide6.QtGui import QColor, QTextOption
class MyWidget(QWidget):
def __init__(self):
# 1.调用父类Qwidget类的__init__()方法
super().__init__()
# 2.调用setupUi()方法初始化页面
self.setup_ui()
def setup_ui(self):
# 1.设置窗口对象大小
self.resize(700, 500)
# 2.创建多行文本框对象
textEdit = QTextEdit(self)
textEdit.resize(500, 300)
# 3.设置多行文本框浮现内容
textEdit.setPlaceholderText("请输入文本内容")
# 4.使多行文本框得到焦点
textEdit.setFocus()
# 5.设置文本颜色
# textEdit.setTextColor(QColor(0, 0, 255))
textEdit.setTextColor("blue")
# 6.设置文本的背景颜色
textEdit.setTextBackgroundColor(QColor(255, 0, 0))
# textEdit.setTextBackgroundColor("red")
# 7.设置文本换行模式
textEdit.setWordWrapMode(QTextOption.WrapMode.WordWrap)
# 8.设置文本只读
textEdit.setReadOnly(True)
if __name__ == "__main__":
# 1.创建一个QApplication类的实例
app = QApplication(sys.argv)
# 2.创建一个窗口
window = MyWidget()
# 3.展示窗口
window.show()
# 4.进入程序的主循环并通过exit()函数确保主循环安全结束
sys.exit(app.exec())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码