目录

2、 输入控件(二)

2.2 步长调节

简介:

  • 步长调节,QAbstractSpinBox,键盘加鼠标都可以操作

2.2.1 QAbstractSpinBox

2.2.1.1 描述

其是一个由步长调节器和单行文本框来调节和显示数据

继承自 QWidget

其实例化后无法通过鼠标来调节步长,只有通过方法重写来实现

2.2.1.2 功能作用

2.2.1.2.1 使用
  1. 子类化此对象

  2. 实现控制上下能用的方法

    # 重写方法
    stepEnabled()

    QAbstractSpinBox.StepEnabled:

    • QAbstractSpinBox.StepNone:都不能使用
    • QAbstractSpinBox.StepUpEnabled:只有向上可用
    • QAbstractSpinBox.StepDownEnabled:只有向下可用
  3. 实现步长调整方法

    stepBy(p_int)
  4. 示例

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    # @author: kun
    from PyQt5.Qt import *
    import sys class MyQAbstractSpinBox(QAbstractSpinBox): def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.lineEdit().setText("0") # 设置默认值为0 def stepEnabled(self):
    # 比如限定数据只能0~9,当数据等于0是,只能向上调节,当数据等于9时,数据只能向下调节
    if int(self.text()) == 0:
    return QAbstractSpinBox.StepUpEnabled
    if int(self.text()) == 9:
    return QAbstractSpinBox.StepDownEnabled
    if 0 <= int(self.text()) <= 9:
    return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled return QAbstractSpinBox.StepNone def stepBy(self, p_int):
    # p_int 为 1 向上 或 -1 向下
    print(p_int)
    self.lineEdit().setText(str(int(self.text()) + p_int)) # 通过拿到左边的单行文本编辑器来编辑文本内容,设置每次点击一次增加1 app = QApplication(sys.argv)
    w = QWidget()
    w.resize(500, 500) qa = MyQAbstractSpinBox(w) # 创建对象
    qa.resize(100, 30)
    qa.move(100, 100) w.show()
    sys.exit(app.exec_())
2.2.1.2.2 主要功能
  1. 长按调整步长加快频率

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    # @author: kun
    from PyQt5.Qt import *
    import sys class MyQAbstractSpinBox(QAbstractSpinBox): def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.lineEdit().setText("0") def stepEnabled(self):
    return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled def stepBy(self, p_int):
    self.lineEdit().setText(str(int(self.text()) + p_int)) app = QApplication(sys.argv)
    w = QWidget()
    w.resize(500, 500) qa = MyQAbstractSpinBox(w) qa.setAccelerated(True) # 开启长按加速的功能
    print(qa.isAccelerated()) # 判断是否开启加速功能 qa.resize(100, 30)
    qa.move(100, 100) w.show()
    sys.exit(app.exec_())

    控制用户长按按钮后,内容调整的频率

  2. 只读限制

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    # @author: kun
    from PyQt5.Qt import *
    import sys class MyQAbstractSpinBox(QAbstractSpinBox): def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.lineEdit().setText("0") def stepEnabled(self):
    return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled def stepBy(self, p_int):
    self.lineEdit().setText(str(int(self.text()) + p_int)) app = QApplication(sys.argv)
    w = QWidget()
    w.resize(500, 500) qa = MyQAbstractSpinBox(w) qa.setReadOnly(True) # 设置只读限制,只能通过按钮修改值,不能通过键盘键入数值
    print(qa.isReadOnly()) # 判断是否开启只读限制 qa.resize(100, 30)
    qa.move(100, 100) w.show()
    sys.exit(app.exec_())
  3. 设置及获取内容

    text()  # 获取文本框,里面的内容
    lineEdit() # 拿到左边单行文本框对象,可以对内容进行设置和获取
    # 设置文本框内容
    lineEdit().setText(str)
    # 获取文本框内容
    lineEdit().text()

    QLineEdit:里面的大部分方法都可以在这里使用

  4. 设置对齐方式

    qa.setAlignment(Qt.Alignment)  # 设置文本的对齐方式
    qa.alignment() # 获取文本的对齐方式
  5. 设置周边框架

    qa.setFrame(False)  # 设置周边框架,默认有边框
    print(qa.hasFrame()) # 查看是否有框架
    qa.clear() # 清空文本框内的文本内容
  6. 设置按钮样式

    setButtonSymbols(QAbstractSpinBox.ButtonSymbols)  # 设置按钮样式
    buttonSymbols() # 获得按钮样式
2.2.1.2.3 内容验证
2.2.1.2.3.1 语法

其在输入内容时进行验证

  • validate(p_str, p_int):验证规则
  • fixup(p_str):恢复方法

具体内容:点我

2.2.1.2.3.2 案例

验证通过 18 ~ 180 的数据,超过部分设置为最近的最值

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys class MyQAbstractSpinBox(QAbstractSpinBox): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.lineEdit().setText("18") def stepEnabled(self):
if int(self.text()) == 18:
return QAbstractSpinBox.StepUpEnabled
if int(self.text()) == 180:
return QAbstractSpinBox.StepDownEnabled
if 18 < int(self.text()) < 180:
return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled def stepBy(self, p_int):
self.lineEdit().setText(str(int(self.text()) + p_int)) def validate(self, input_text, pos):
# 判断 18 ~ 180 的数字
if input_text == "":
return QValidator.Intermediate, input_text, pos # 暂时不报错 if not input_text.isdigit():
return QValidator.Invalid, input_text, pos if int(input_text) < 18:
return QValidator.Intermediate, input_text, pos # 暂时不报错 if input_text.isdigit() and 18 <= int(input_text) <= 180:
return QValidator.Acceptable, input_text, pos # 验证通过 return QValidator.Invalid, input_text, pos # 直接报错 def fixup(self, input_text):
return "18" # 如果值处于暂时不报错的区间,自动将值修改为18,注意要将文本内容改为字符串类型 app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
qa = MyQAbstractSpinBox(w)
qa.resize(100, 30)
qa.move(100, 100)
btn = QPushButton(w)
w.show()
sys.exit(app.exec_())

2.2.1.3 信号

有继承父类的信号

新的信号:

editingFinished()  # 结束编辑时调用

2.2.2 QSpinBox

2.2.2.1 描述

主要处理整数和离散值集,如 1 ~ 12 ,1 ~ 7,其会默认限制数字范围 0 ~ 99

允许用户通过单击 向上/向下 按钮或者键盘上的 上/下 来选择一个值 增加/减少 当前显示的值,用户还可以手动键入值

旋转框支持整数值,也可以子类化此类以实现更多支持

继承自QAbstractSpinBox

2.2.2.2 功能作用

2.2.2.2.1 构造函数
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500) sp = QSpinBox(w) # 创建控件
sp.resize(100, 30)
sp.move(100, 100) sp.setMaximum(13) # 设置文本框内部的最大数字为 13
sp.setMinimum(0) # 设置文本框内部的最小数字为 0
sp.setRange(0, 13) # 设置值区间 w.show()
sys.exit(app.exec_())
2.2.2.2.2 基本功能
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys class MySpinBox(QSpinBox):
def textFromValue(self, v):
# 自定义显示格式
print(v)
return str(v) + "+" + str(v + 1) app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500) sp = MySpinBox(w)
sp.resize(100, 30)
sp.move(100, 100) sp.setRange(0, 12) # sp.setWrapping(True) # 开启数值循环
# print(sp.wrapping()) # 查看是否开启数值循环
# sp.setSingleStep(3) # 设置单次点击的步长为3
# print(sp.singleStep()) # 获取步长 # sp.setPrefix("第") # 设置前缀
# sp.setSuffix("月") # 设置后缀
# sp.setSpecialValueText("一月") # 设置显示特殊数据,当数据达到最小值时,会显示此字符串 # sp.setDisplayIntegerBase(2) # 设置显示基数(进制),默认是10进制。这里是二进制展示数据
# print(sp.displayIntegerBase()) # 输出以几进制显示数据 # sp.setValue(12) # 设置数值
# print(sp.value()) # 获取数值 w.show()
sys.exit(app.exec_())

2.2.2.3 信号

父类的信号也都可以使用

valueChanged(int / str)  # 当数字改变时,发送的信号 ,返回字符串或整型,其为函数重载

2.2.4 QDoubleSpinBox

2.2.4.1 描述

浮点类型步长调节器

既可以通过步长调节器调整数据,也可以通过文本框直接编辑

继承自 QAbstractSpinBox

2.2.4.2 功能作用

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys class MyDoubleSpinBox(QDoubleSpinBox):
def textFromValue(self, v):
print(v)
return f"{v} * {v} = {v * v}" # 自定义数据格式 app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500) ds = MyDoubleSpinBox(w) # 创建对象,默认步长为 1 ,默认范围为 0 ~ 99
ds.setRange(1.0, 20.0) # 设置数值范围,这里最大值为 20.0 最小值为 1.0,注意传入的参数是一个浮点型数据,另外的两种设置最值的方法也适用 # ds.setSingleStep(0.02) # 设置单次步长
# ds.setWrapping(True) # 设置循环
# ds.setAccelerated(True) # 设置是否长按加速改变
#
# ds.setPrefix("前缀") # 设置前缀
# ds.setSuffix("后缀") # 设置后缀
#
# ds.setSpecialValueText("这是特殊文本") # 设置最小值时的特殊文本
#
# ds.setDecimals(2) # 设置要保留的小数位数,这里保留两位小数位数
#
# ds.setValue(16.0) # 设置数据,如果小数位数过多,则四舍五入来显示数据
# ds.value() # 获取真实数值
# ds.cleanText() # 获取内显示的数值,不包括前缀等,返回字符串类型 w.show()
sys.exit(app.exec_())

2.2.4.3 信号

valueChanged(float / str)  # 当文本框内的数值改变时,发送信号,其为函数重载

2.2.5 QDateTimeEdit

2.2.5.1 描述

编辑日期和时间的单行文本框

既可以使用箭头来调节,也可以使用键盘编辑输入

可以单独调节每一部分

其继承自 QAbstractSpinBox

2.2.5.2 功能作用

2.2.5.2.1 构造函数
QDateTimeEdit(parent: QWidget = None)
QDateTimeEdit(Union[QDateTime, datetime.datetime], parent: QWidget = None)
QDateTimeEdit(Union[QDate, datetime.date], parent: QWidget = None)
QDateTimeEdit(Union[QTime, datetime.time], parent: QWidget = None)

QDateTime

  • 时间日期对象,它是QDate和QTime类的组合

    QDateTime(Union[QDate, datetime.date], Union[QTime, datetime.time], QTimeZone)  # 构造

QDate

  • 日期对象,包括年月日

    QDate(int, int, int)  # 构造

QTime

  • 时间对象,包括时分秒

    QTime(int, int, second: int = 0, msec: int = 0)  # 构造
2.2.5.2.2 主要功能

显示格式

setDisplayFormat(format_str)  # 参数是,时间日期分隔符,再加上时间日期格式符
displayFormat() # 获取时间日期打印格式

section 控制

sectionCount()  # 获取section个数
setCourrentSectionIndex(int) # 设置当前的section索引
currentSectionIndex() # 获取section索引
setCurrentSection(QDateTimeEdit.Section) # 设置当前的section部分
currentSection() # 获取当前的section部分
sectionAt(index_int) # 获取指定索引位置的section
sectionText(QDateTimeEdit.Section) # 获取指定section的文本内容

日期时间最值

# 最大日期时间
setMaximumDateTime(QDateTime)
maximumDateTime() # 获取最大的日期时间
clearMaximumDateTime() # 最小日期时间
setMinimumDateTime(QDateTime)
minimumDateTime() # 获取最小的日期时间
clearMinimumDateTime() # 范围
setDateTimeRange(min_datetime, max_datetime)

日期和时间单独的最值设置方法类似

获取日期时间

dateTime()  # 获取日期时间 QDateTime
date() # 获取日期 QDate
time() # 获取时间 QTime
2.2.5.2.3 日历选择控件

是否弹出日历选择控件

setCalendarPopup(bool)
calendarPopup() # 判断是否弹出日历选择控件

自定义日历选择控件

setCalendarWidget(QCalendarWidget)
calendarWidget() # 获取自定义日历控件

2.2.5.3 信号

dateTimeChanged(QDateTime)
dateChanged(QDate)
timeChanged(QTime)

2.2.5.4 拓展

QDateEditQTimeEdit

  • 继承QDateTimeEdit,父类的方法,子类都可以使用

信号也是继承父类的信号

2.3 下拉框

2.3.1 QComboBox

2.3.1.1 描述

其是一个组合控件,默认展示最小的空间给用户操作,可以通过下拉选择界面,选取更多的预置选项

其继承自,QWidget

2.3.1.2 功能作用

2.3.1.2.1 构造函数
qc = QComboBox(w)  # 直接添加父控件就行了
2.3.1.2.2 数据操作
# 添加条目项
addItem([QIcon, ]str, userData=None)
addItems(Iterable[str], userData=None) # 插入条目项
insertItem(int, [QIcon, ]str, userData=None)
insertItems(int, Iterable[str], userData=None) # 设置条目项
setItemIcon(int, Icon)
setItemText(int, str)
setItemData(int, data, Qt.UserRole) # 删除条目项
removeItem(int) # 插分割线
insertSeparator(int) # 设置当前编辑文本
setCurrentIndex(int)
setCurrentText(QString) # 设置光标在指定文本 setEditable(bool) # 使当前的文本可编辑
setEditText(QString) # 只有文本可编辑才可以使用此方法
2.3.1.2.3 数据获取
count()  # 获取所有条目的总个数
itemIcon(int) # 获取对应索引位置的图标
itemText(int) # 获取对应索引位置的文本信息
itemData(int) # 获取对应索引位置的数据
currentIndex() # 获取当前位置的索引
currentTextr() # 获取当前位置的文本信息
2.3.1.2.4 数据限制
setMaxCount(int)  # 在可编辑之后,设置可存储的最大条目
maxCount() # 查看可存储的最大条目
setMaxVisibleItems(int) # 在可编辑之后,设置可展示的最大条目个数,其余被折叠
maxVisibleItems()
2.3.1.2.5 常规操作
# 可编辑
setEditable(bool)
isEditable() # 可重复
setDuplicatesEnabled(bool)
duplicatesEnable() # 有框架
setFrame(bool)
hasFrame() # 图标尺寸
setIconSize(QSize)
iconSize() # 清空
clear() # 移除所有条目
clearEditText() # 清除组合框内用于编辑的行编辑内容 # 弹出,下拉列表
showPopup() # 完成器
setCompleter(QCompleter) # 验证器
setValidator(QValidator)

尺寸调整策略

setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy)  # 参数是尺寸调整策略,请在源码查看
sizeAdjustPolicy() # 获取尺寸调整策略
setMinimumContentsLength(int) # 设置内容的最小尺寸
minimumContentsLength() # 获取内容的最小尺寸

2.3.1.3 信号

activated(int | QString)  # 某个条目选中时,返回索引,或返回选中框的内容
currentIndexChanged(int | QString) # 当前选中的索引发生改变时
currentTextChanged(QString) # 当前的文本发生改变时
editTextChanged(QString) # 编辑的文本内容发生改变时
highlighted(int | QString) # 高亮时

2.3.2 QFontComboBox

2.3.2.1 描述

组合框中填充了按字母排序排列的字体系列名称列表,让用户选择字体家族

其继承自QComboBox

2.3.2.2 功能作用

# 设置和获取当前字体
setCurrentFont(QFont)
currentFont() # 设置和获取过滤器
setFontFilters(QFontComboBox.FontFilters) # 过滤器请通过源码来查找
fontFilters()

2.3.2.3 信号

currentFontChanged(QFont)
currentIndexChanged(QString) # 继承信号

2.4 滑块

2.4.1 AbstractSlider

2.4.1.1 描述

提供的范围内的整数值,其为抽象类

继承自 QWidget

2.4.1.2 功能作用

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
l = QLabel(w)
l.move(200, 200) qs = QSlider(w) # 实例化
qs.valueChanged.connect(lambda val: l.setText(str(val))) # 信号检测 # qs.setMaximum(100) # 设置滑动的最大值
# qs.setMinimum(10) # 设置滑动的最小值
# qs.setTracking(True) # 设置是否追踪
# qs.setSingleStep(2) # 设置每次移动的步长
# qs.setPageStep(4) # 设置上下键移动的步长
# qs.setValue(11) # 设置当前默认的数值
# qs.setSliderPosition(13) # 设置滑块位置
# qs.setInvertedAppearance(True) # 倒立外观
# qs.setInvertedControls(True) # 键盘的上下键操作方向相反
# qs.setOrientation(Qt.Horizontal) # 水平放置,默认为垂直
# qs.setSliderDown(True) # 滑块处于被按下的状态 w.show()
sys.exit(app.exec_())

2.4.1.3 信号

valueChanged()
sliderPressed()
sliderMoved(int) # 返回滑块对应位置的值
sliderReleased()
actionTriggered(int action) # 返回滑块的移动方式
rangeChanged(int min, int max)

2.4.2 QSlider

2.4.2.1 描述

其为垂直或者水平滑块;它允许用户沿水平或者垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值

继承自 QAbstractSlider

2.4.2.2 功能作用

# 刻度控制
setTickPosition(Qt.Qslider.TickPosition) # 类型可以从源码中查找 setTickInterval(int) # 设置值的间隔,而不是像素间隔。如果为0,滑块将在singleStep 和 pageStep 之间进行选择

2.4.2.3 信号

继承父类的所有信号

2.4.3 QScrollBar

2.4.3.1 描述

使用户能够访问比用于显示它的窗口小部件更大的文档部分,一般是结合QAbstractScrollArea使用;滚动条通常包含是个单独的空间:滑块、滚动箭头和页面控件

继承自 QAbstractSlider

2.4.3.2 功能作用

控件尺寸需要手动进行调整

主要功能继承自父类

滚动区域 = 总长度 - 滚动条宽度

2.4.3.3 信号

继承自父类

2.4.4 QDial

2.4.4.1 描述

倒圆的范围控制,比如汽车仪表盘上的速度计

继承自QAbstractSlider

2.4.4.2 功能作用

大部分功能继承自父类

特有功能

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
sb = QDial(w) # 创建对象
sb.valueChanged.connect(lambda val: print("值改变了", val))
sb.setNotchesVisible(True) # 设置是否显示刻度
sb.setPageStep(10) # 大刻度的控制
sb.setWrapping(False) # 设置是否启用刻度包裹
sb.setNotchTarget(5.0) # 设置凹凸之间的目标像素数,小刻度的度数
print(sb.notchSize()) # 获取缺口的大小 w.show()
sys.exit(app.exec_())

2.4.4.3 信号

继承自父类的信号

2.5 橡皮筋选择

2.5.1 QRubberBand

2.5.1.1 描述

提供一个矩形或者线来指示选择或边界

一般结合鼠标事件一同协作

继承自 QWidget

2.5.1.2 功能作用

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500) """ QRubberBand(QRubberBand.Shape, parent: QWidget = None) """
rb = QRubberBand(QRubberBand.Rectangle, w)
rb.setGeometry(10, 10, 60, 60)
print(rb.shape()) # 获取形状
print(rb.isVisible()) # 默认为隐藏
rb.show() w.show()
sys.exit(app.exec_())

2.5.1.3 信号

继承自父类的信号

2.5.1.4 选中框案例

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import * class Window(QWidget): def __init__(self):
super().__init__()
self.setWindowTitle("test") # 设置标题
self.resize(500, 500) # 设置窗口大小
self.move(100, 100) # 移动窗口
self.setup_ui() # 调用创建控件的方法 def setup_ui(self): # 添加控件的操作
for i in range(30):
# 九宫格布局
cb = QCheckBox(self)
cb.setText(str(i))
cb.move(i % 4 * 50, i // 4 * 60)
self.sb = QRubberBand(QRubberBand.Rectangle, self) def mousePressEvent(self, evt):
# 创建一个橡皮筋选中对象,尺寸大小:鼠标点击位置,0 0,展示控件
self.origin_pos = evt.pos()
self.sb.setGeometry(QRect(self.origin_pos, QSize()))
self.sb.show() def mouseMoveEvent(self, evt):
# 调整橡皮筋显示的尺寸
self.sb.setGeometry(QRect(self.origin_pos, evt.pos()).normalized()) # 加上 normalized 可以使得如果计算的结果为负数,会自动转换 def mouseReleaseEvent(self, evt):
# 获取范围,遍历所有子控件,查看哪些子控件在区域范围内
rect = self.sb.geometry()
# print(rect)
for i in self.children():
if rect.contains(i.geometry()) and i.inherits("QCheckBox"): # 判断复选框是否被包含
i.toggle()
self.sb.hide() # 完成操作后隐藏 if __name__ == '__main__':
# 可以通过导包来运行窗口
import sys app = QApplication(sys.argv)
# 创建窗口
w = Window()
# 显示窗口
w.show()
sys.exit(app.exec_())

2.6 对话框

2.6.1 QDialog

2.6.1.1 描述

其实对话窗口的一个基类;对话窗口是顶级窗口,主要用于短期任务和与用户的简短通信

QDialog 可能是模态的或非模态的对话框

  1. 模态对话框

    • 应用程序级别

      • 默认值
      • 当该中模态的对话框出现时,用户必须首先对对话框进行交互,直接关闭,然后才能访问程序其他的窗口
      • exec()
    • 窗口级别
      • 该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其他窗口交互
      • open()
  2. 非模态对话框
    • 不会阻塞与对话框关联的窗口以及其他窗口进行交互
    • show()
      • 结合 setModal(True)也可以实现模态对话框
      • 结合setWindowMondality(Qt.WindowModal)也可以实现模态对话框
        • Qt.WindowModal
        • Qt.ApplicationModal

QDialogs 可以提供返回值,它们可以有默认按钮

继承自 QWidget

2.6.1.2 功能作用

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys app = QApplication(sys.argv)
w = QWidget() dl = QDialog(w) # 创建窗口
reject = QPushButton("取消", dl)
accept = QPushButton("确定", dl)
accept.move(0, 50)
done = QPushButton("完成", dl)
done.move(0, 26)
# 是否显示尺寸调整控件
# dl.setSizeGripEnabled(True)
# 常用的操作槽,操作槽其返回值不一样
reject.clicked.connect(lambda: dl.reject())
accept.clicked.connect(lambda: dl.accept())
done.clicked.connect(lambda: dl.done(7)) # 设置和获取结果数值:等于是直接返回结果,不需要通过操作槽
dl.setResult(3)
print(dl.result()) # 模态对话框,exec() 或 open()
ret = dl.exec()
# 非模态对话框
# dl.show() print(ret) w.show()
sys.exit(app.exec_())

2.6.1.3 信号

accepted()
finished(int result)
rejected()

2.6.2 QFontDialog

2.6.2.1 描述

提供了一种选择字体的对话框控件

继承自 QDialog

2.6.2.2 功能作用

2.6.2.2.1 简单使用
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys def setFont_():
fd.setCurrentFont(QFont("黑体")) # 设置当前选中的字体
"""
def selFont_():
font = fd.selectedFont()
print("字体已经被选中", font) # 获取选中的字体
l.setFont(font) # 设置标签字体样式 fd.open(selFont_) # 添加槽函数,如果点击确定,就会发射信号,如果点击取消,就不会发射信号
"""
# 第二种方式
ret = fd.exec()
if ret: # 如果返回值不为0
l.setFont(fd.selectedFont())
else:
return None app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500) l = QLabel("字体测试", w)
l.resize(100, 30)
l.move(100, 0)
btn = QPushButton("修改字体", w)
btn.move(100, 30) fd = QFontDialog(w) # 创建对话框 btn.clicked.connect(setFont_) w.show()
sys.exit(app.exec_())
2.6.2.2.2 选项控制
setOption(QFontDialog.FontDialogOption, on=True)  # on参数表示是否启用该选项,默认为True
setOptions(QFontDialog.FontDialogOption) # 设置多个选项
testOption(QFontDialog.FontDialogOption) # 测试某个选项是否生效
options() # 获取当前的选项

QFontDialog.FontDialogOption:

QFontDialog.NoButtons  # 不显示确定和取消按钮,对实时对话框有用
QFontDialog.DontUseNativeDialog # 不使用原生的字体对话框
QFontDialog.ScalableFonts # 显示可缩放的字体
QFontDialog.NonScalableFonts # 显示不可缩放的字体
QFontDialog.MonospacedFonts # 显示等宽字体
QFontDialog.ProportionalFont # 显示比例字体
2.6.2.2.3 静态方法
getFont([QFont, ]parent[, caption, options])  # 其返回一个元组,第二个值为是否点击确定按钮

参数:

  • QFont:默认字体
  • parent:父控件
  • capttion:对话框标题
  • options:选项

2.6.2.3 信号

currentFontChanged(QFont)  # 当前字体发生改变时
fontSelected(QFont) # 最终选择字体时

2.6.3 QColorDialog

2.6.3.1 描述

颜色对话框的功能是允许用户选择颜色

继承自QDialog

2.6.3.2 功能作用

2.6.3.2.1 基本使用
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys def getColor_():
"""
def selColor():
print(qc.selectedColor()) # 获取选中的颜色
qc.open(selColor)
"""
ret = qc.exec()
if ret:
color = qc.selectedColor()
print(color)
platte = QPalette() # 利用调色板设置颜色
platte.setColor(QPalette.Background, color) # 设置背景颜色
w.setPalette(platte) app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500) btn = QPushButton("获取颜色", w)
btn.move(100, 30)
qc = QColorDialog(w) # 创建颜色选择框
qc.colorSelected.connect(lambda val: print(val)) # 也可以通过信号来获取颜色 btn.clicked.connect(getColor_) w.show()
sys.exit(app.exec_())
2.6.3.2.2 选项控制

使用方法和QFontDialog的类似:【[选项控制](#2.6.2.2.2 选项控制)】

2.6.3.2.3 静态方法
customCount()  # 获取可存储的最大自定义的颜色个数
setCustomColor(int index, QColor) # 设置自定义颜色
setStandardColor(int index, QColor) # 设置标准颜色
getColor(*args, **kwargs) # 参数查看源码
# ret = QColorDialog.getColor(QColor(), w, "选择颜色")
# print(ret) # 如果碘酒取消会使用默认颜色

2.6.3.3 信号

colorSelected(QColor)
currentColorChanged(QColor)

2.6.4 QFileDialog

2.6.4.1 描述

提供了一个对话框,允许用户选择文件或目录;允许用户遍历文件系统,以选择一个或多个文件或目录

继承自QDialog

2.6.4.2 功能作用

2.6.4.2.1 静态方法

获取文件

getOpenFileName()  # 获取以打开的文件名称
getOPenFileNames()
getOpenFileUrl() # 获取已打开文件的路径,QUrl 类型的数据
getOPenFileUrls()
getSaveName() # 获取保存文件的名称
getSaveFileUrl() # 获取保存文件名称的路径

获取文件夹

getExistingDirectory()  # 选择某一个文件夹,返回文件夹名称
getExistingDirectoryUrl() # 返回文件夹的路径

注意:参数请从源码中获取

2.6.4.2.2 构造函数
QFileDialog(QWidget, Union[Qt.WindowFlags, Qt.WindowType])
QFileDialog(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '')

参数说明:

  • parentt:父控件
  • caption:窗口标题
  • directory:默认打开的目录
  • filter:设置过滤器
2.6.4.2.3 接收模式
acceptMode()
setAcceptMode(QFileDialog.AcceptMode) # 设置接收模式

QFileDialog.AcceptMode

  • QFileDialog.AcceptOpen:打开文件
  • QFileDialog.AcceptSave:保存文件
2.6.4.2.4 其他功能
# 设置默认后缀名
setDefaultSuffix(str) # str为文件后缀名,不需要加点 # 设置文件模式
setFileMode(QFileDialog.FileMode) # 设置过滤器
setNameFilter(str filter) # 里面输入过滤器
setNameFilters(iterator filters) # 里面传入过滤器的可迭代对象 # 显示信息的详细程度
setViewMode(QFileDialog.ViewMode) # 设置指定角色的标签名称
setLabelText(QFileDialog.DialogLabel, str new_name) # QFileDialog.DialogLabel 详细信息请到源码查看

参数:

QFileDialog.FileMode

  • QFileDialog.AnyFile:任何文件,无论是否存在
  • QFileDialog.ExistingFile:单个存在的文件
  • QFileDialog.Directory:目录名称,显示文件和目录
  • QFileDialog.ExistingFiles:单个或多个现有的文件名称

filter

  • 如:"All(*.*);;Image(*.jpg *.jpeg)"

filters

  • 如:["All(*.*)", "Image(*.jpg *.jpeg)"]

QFileDialog.ViewMode:

  • QFileDialog.Detail:详细信息
  • QFileDialog.List:列表形式

2.6.4.3 信号

currentChanged(path_str)  # 当前路径发生改变时
currentUrlChanged(QUrl) # 当前路径url发生改变时,和上一个的主要区别是返回值不一样
directoryEntered(directory_str) # 打开选中文件夹时
directoryUrlEntered(Qurl) # 打开选中文件夹url时
filterSelected(filter_str) # 选择名称过滤器时 fileSelected(str)
filesSelected([strs])
urlSelected(QUrl)
urlsSelected([QUrls])

2.6.5 QInputDialog

2.6.5.1 描述

提供了一个简单方便的对话框,获得来自用户的单个值;输入值可以是字符串、数字或者列表中的项目;设置标签以告知用户应输入的内容

继承自QDialog

2.6.5.2 功能作用

2.6.5.2.1 静态方法
getInt()
getDouble()
getText()
getMultiLineText()
getItem()

参数请通过源码来获取

2.6.5.2.2 选项设置
setOption(QInputDialog.InputDialogOption, on=True)  # on参数表示是否启用该选项,默认为True
setOptions(QInputDialog.InputDialogOption) # 设置多个选项
testOption(QInputDialog.InputDialogOption) # 测试某个选项是否生效
options() # 获取当前的选项

QInputDialog.InputDialogOption

  • QInputDialog.NoButtons:不显示确定和取消按钮,对实时对话框有用
  • QInputDialog.UseListViewForComboxItems:使用QListView而不是不可编辑的QComboBox来显示使用setComboBoxItems()
  • QInputDialog.UsePlainTextEditForTextInput:使用QPlainTextEdit进行多行文本输入
2.6.5.2.3 输入模式
inputMode()  # 获取输入模式
setInputMode(QInputDialog.InputMode) # InputMode: DoubleInput/ IntInput/ TextInput
2.6.5.2.4 界面文本
setLabelText(str)
setOkButton(str)
setCancelButton(str)
2.6.5.2.5 小分类设置
2.6.5.2.5.1 浮点型
setDoubleMaximum(float)
setDoubleMinimum(float)
setDoubleRange(float min, float max)
setDecimals(int) # 设置精确位数
setDoubleStep(float)
setDoubleValue(float)
2.6.5.2.5.2 整型
setIntMaximum(int)
setIntMinimum(int)
setIntRange(int min, int max)
setIntStep(int)
setIntValue(int)
2.6.5.2.5.3 字符串型
setTextEchoMode(QLineEdit.EchoMode)
setTextValue(str)
2.6.5.2.5.4 下拉列表型
setComboBoxItems(Iterator[str])
setComboBoxEditable(bool)

2.6.5.3 信号

intValueChanged(int)
intvalueSelected(int)
doubleValueChanged(float)
doublValueSelected(float)
textValueChanged(str)
textValueSelected(str)

2.7 日期

2.7.1 QCalendarWidget

2.7.1.1 描述

提供了一个基于每月日历控件,允许用户选择一个日期

继承自QWidget

2.7.1.2 功能作用

2.7.1.2.1 基础方法
# 设置日期范围
setMaximumDate(QDate)
setMinimumDate(QDate)
setDateRange(QDate min, QDate max) # 日期编辑
setDateEditEnabled(bool) # 默认可编辑
setDateEditAcceptDelay(int) # 设置编辑后的延迟秒数,单位为 ms # 日期获取
selectDate()
monthShown()
yearShown()
2.7.1.2.2 格式外观
# 设置导航条是否可见
setNavigationBarVisible(bool)
isNavigationBarVisible() # 一周的第一天
setFirstDayOfWeek(Qt.DayOfWeek) # 网格显示
setGridVisible(bool)
isGridVisible()
2.7.1.2.3 文本格式
setHeaderTextFormat(QTextCharFormat)  # 包含水平头和垂直头
setHorizontalHeaderFormat(QCalendarWidget.HorizontalHeaderFormat)
setVerticalHeaderFormat(QCalendarWidget.VerticalHeaderFormat)
setWeekdayTextFormat(Qt.DayOfWeek, QTextCharFormat)
setDateTextFormat(QDate, QTextCharFormat)
2.7.1.2.4 选中
setSelectionDate(QDate)
setSelectionMode(QCalendarWidget.SelectionMode)

QCalendarWidget.SelectionMode

  • QCalendarWidget.NoSelection:不可以选择单日期
  • QCalendarWidget.SingleSelection:可以选择单日期
2.7.1.2.5 常用方法
showToday()
showSelectedDate()
showNextYear()
showPreviousYear()
showNextMonth()
showPreviousMonth()
setCurrentPage(int year, int month)

2.7.1.3 信号

actived(QDate)  # 只要用户按下return或enter键或双击日历小部件中的日期,就会发出信号
clicked(QDate) # 单击有效日期才会发出信号
currentPageChanged(int year, int month) # 当前显示的月份更改时会发出此信号,新的一年和新的一月作为参数传递
selectionChanged() # 当前选择的日期发生改变时会发出此信号,代码或鼠标修改

最新文章

  1. 代码高亮美化插件-----SyntaxHighlighter
  2. Python 网络编程(一)
  3. List 泛型 集合中 Find 的用法
  4. ggplot2 上篇
  5. tar打包排除某个目录
  6. 【转】Java日期计算之Joda-Time
  7. HTML5——行走日记
  8. Java for LeetCode 044 Wildcard Matching
  9. nginx 反向代理 和lvs负载均衡
  10. 设置sudo不输入密码 sudoers 编辑出错后的补救方法
  11. aws linuxbrew GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2
  12. 第一个Xcode项目 - 代码修改布局约束
  13. Hibernate(十)多对多单向关联映射
  14. 字符和字符串处理-ANSI字符和Unicode字符
  15. Unsupported major.minor version 51.0解决方案
  16. SpringCloud Zuul网关超时
  17. Go Rand小结
  18. MySQL数据库----表与表之间的关系
  19. 使用 dplyr 管道操作处理数据框
  20. 让VS2013支持 C# 6.0 语法

热门文章

  1. 打靶笔记-04-vulnhub-Jangow
  2. HCNP Routing&amp;Switching之组播技术-组播分发
  3. Java Object 类常用方法总结
  4. Solon 1.6.33 发布,更现代感的应用开发框架
  5. vue3-插槽作用域的使用
  6. 使用Docker 部署MongoDB
  7. Java案例——冒泡排序
  8. 《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)
  9. Java基础——方法的调用
  10. TCP/IP协议 | TCP协议 | UDP协议 | 三次握手四次挥手