PyQt5 基本语法(五):输入控件
2、 输入控件(二)
2.2 步长调节
简介:
- 步长调节,QAbstractSpinBox,键盘加鼠标都可以操作
2.2.1 QAbstractSpinBox
2.2.1.1 描述
其是一个由步长调节器和单行文本框来调节和显示数据
继承自 QWidget
其实例化后无法通过鼠标来调节步长,只有通过方法重写来实现
2.2.1.2 功能作用
2.2.1.2.1 使用
-
子类化此对象
-
实现控制上下能用的方法
# 重写方法 stepEnabled()
QAbstractSpinBox.StepEnabled
:QAbstractSpinBox.StepNone
:都不能使用QAbstractSpinBox.StepUpEnabled
:只有向上可用QAbstractSpinBox.StepDownEnabled
:只有向下可用
-
实现步长调整方法
stepBy(p_int)
-
示例
#!/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 主要功能
-
长按调整步长加快频率
#!/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_())
控制用户长按按钮后,内容调整的频率
-
只读限制
#!/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_())
-
设置及获取内容
text() # 获取文本框,里面的内容 lineEdit() # 拿到左边单行文本框对象,可以对内容进行设置和获取 # 设置文本框内容 lineEdit().setText(str) # 获取文本框内容 lineEdit().text()
QLineEdit
:里面的大部分方法都可以在这里使用 -
设置对齐方式
qa.setAlignment(Qt.Alignment) # 设置文本的对齐方式 qa.alignment() # 获取文本的对齐方式
-
设置周边框架
qa.setFrame(False) # 设置周边框架,默认有边框 print(qa.hasFrame()) # 查看是否有框架 qa.clear() # 清空文本框内的文本内容
-
设置按钮样式
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 拓展
QDateEdit
,QTimeEdit
- 继承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 可能是模态的或非模态的对话框
- 模态对话框
- 应用程序级别
- 默认值
- 当该中模态的对话框出现时,用户必须首先对对话框进行交互,直接关闭,然后才能访问程序其他的窗口
exec()
- 窗口级别
- 该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其他窗口交互
open()
- 应用程序级别
- 非模态对话框
- 不会阻塞与对话框关联的窗口以及其他窗口进行交互
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() # 当前选择的日期发生改变时会发出此信号,代码或鼠标修改
本文来自博客园,作者:Kenny_LZK,转载请注明原文链接:https://www.cnblogs.com/liuzhongkun/p/16103896.html