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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?