Qt Designer基本控件介绍——Input Widgets(输入小部件)
原创- Combo Box : 组合框。是一个集按钮和下拉选项于一体的控件,也称做下拉列表框
常用方法:
count()
:返回下拉选项集合中的数目
currentText()
:返回选中选项的文本
itemText(i)
:获取索引为 i 的 item 的选项文本
currentIndex()
:返回选中项的索引
setItemText(int index,text)
:改变序列号为 index 的文本
信号:
Activated
:当用户选中一个下拉选项时发射该信号
currentIndexChanged
:当下拉选项的索引发生改变时发射该信号
highlighted
:当选中一个已经选中的下拉选项时,发射该信号
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class ComboxDemo(QWidget):
def __init__(self,parent=None):
super(ComboxDemo, self).__init__(parent)
#设置标题
self.setWindowTitle('ComBox例子')
#设置初始界面大小
self.resize(300,90)
#垂直布局
layout=QVBoxLayout()
#创建标签,默认空白
self.btn1=QLabel('')
#实例化QComBox对象
self.cb=QComboBox()
#单个添加条目
self.cb.addItem('C')
self.cb.addItem('C++')
self.cb.addItem('Python')
#多个添加条目
self.cb.addItems(['Java','C#','PHP'])
#当下拉索引发生改变时发射信号触发绑定的事件
self.cb.currentIndexChanged.connect(self.selectionchange)
#控件添加到布局中,设置布局
layout.addWidget(self.cb)
layout.addWidget(self.btn1)
self.setLayout(layout)
def selectionchange(self,i):
#标签用来显示选中的文本
#currentText():返回选中选项的文本
self.btn1.setText(self.cb.currentText())
print('Items in the list are:')
#输出选项集合中每个选项的索引与对应的内容
#count():返回选项集合中的数目
for count in range(self.cb.count()):
print('Item'+str(count)+'='+self.cb.itemText(count))
print('current index',i,'selection changed',self.cb.currentText())
if __name__ == '__main__':
app=QApplication(sys.argv)
comboxDemo=ComboxDemo()
comboxDemo.show()
sys.exit(app.exec_())
- Font Combo Box : 字体组合框。组合框中填充了按字母顺序排列的字体系列名称列表,让用户选择字体。
常用方法:
currentFont(): 获得当前所选择的字体;
fontFilters(): 获得当前的字体过滤器。
信号:
currentIndexChanged(QString text) :当前索引发生了改变,会发射该信号
currentFontChanged(QFont font) :选中字体时会发射该信号
详细介绍可参考博客” 实战PyQt5: 030-字体选择控件QFontComboBox “
- Line Edit : 单行文本框。
常用方法:
setText() : 设置文本框内容
Text() : 返回文本框内容
clear() : 清除多行文本框的内容。
信号:
selectionChanged : 只要选择改变了,这个信号就会被发射
textChanged : 当修改文本内容时,这个信号会被发射
editingFinished : 当编辑文本结束时,这个信号会被发射
详细介绍可参考博客“ PyQt5- QLineEdit控件使用 ”
- Text Edit : 多行文本框。可显示多行文本内容,当文本内容超出控件显示范围时,可以显示水平和垂直滚动条
常用方法:
toPlainText() : 返回多行文本框的文本内容。
toHtml() : 返回多行文本框的HTML文档内容(HTML文档是描述网页的)
append() : 追加字符串
clear() : 清除多行文本框的内容。
- Plain Text Edit : 纯文本框。用于编辑和显示纯文本控件。在默认情况下,一个换行符表示一个段落,文档可以一个或者多个段落组成,且段落中的每个字符都可以有其自己的属性,例如有自己的字体和颜色
常用方法:
toPlainText() :获取文本内容
insertPlainText(): 插入普通文本
appendPlainText(): 添加普通文本
appendHtml(): 添加HTML文本内容
isReadOnly(): 是否是只读模式
信号:
textChanged: 文本内容发生改变时触发;
selectionChanged:选中内容发生改变时触发;
cursorPositionChanged: 光标位置发生改变触发;
copyAvailable:复制可用时触发
redoAvailable: 重做可用触发
undoAvailable: 撤销可用触发
具体的调用示例可参考博客“ 纯文本编辑控件QPlainTextEdit ”
- Spin Box : 整型数值计数器。允许用户选择一个整数值通过单击向上向下或者按键盘上的上下键来增加减少当前显示的值,当然用户也可以输入值。
value() :返回计数器的当前值
信号:
editingFinish :当编辑框按下回车后触发
valueChanged :发生改变时,发射该信号
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class spindemo(QWidget):
def __init__(self,parent=None):
super(spindemo, self).__init__(parent)
#设置标题与初始大小
self.setWindowTitle('练习 :SpinBox')
self.resize(300,100)
#垂直布局
layout=QVBoxLayout()
#创建按钮并设置居中
self.l1=QLabel('current value')
self.l1.setAlignment(Qt.AlignCenter)
layout.addWidget(self.l1)
#创建计数器,并添加控件,数值改变时发射信号触发绑定事件
self.sp=QSpinBox()
layout.addWidget(self.sp)
self.sp.valueChanged.connect(self.Valuechange)
self.setLayout(layout)
def Valuechange(self):
#显示当前计数器地数值
self.l1.setText('current value:'+str(self.sp.value()))
if __name__ == '__main__':
app=QApplication(sys.argv)
ex=spindemo()
ex.show()
sys.exit(app.exec_())
- Double Spin Box : 浮点数值计数器。默认精度是两位小数,可以通过setDecimals()来改变。
详细介绍可参考博客“ 【PyQt5】SpinBox和DoubleSpinBox ”
- Time Edit : 时间编辑
- Date Edit : 日期编辑
- Date/Time Edit : 时间/日期编辑
允许用户编辑时间、日期的控件
QDateEdit用来编辑控件的日期,年月日
QTimeEdit用来编辑控件的时间,时分秒
如果要同时操作日期时间,请使用QDateTimeEdit
常用方法:
time() :返回编辑的时间
date() :返回编辑的日期
信号:
dateChanged:当日期改变时发射此信号
dateTImeChanged:当日期时间改变时发射此信号
timeChanged:当时间发生改变时发射此信号
import sys
from PyQt5.QtCore import QDate,QDateTime,QTime
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class DateTimeEditDemo(QWidget):
def __init__(self):
super(DateTimeEditDemo, self).__init__()
self.initUI()
def initUI(self):
#设置标题与初始大小
self.setWindowTitle('练习 :QDateTimeEdit')
self.resize(300,90)
#垂直布局
layout=QVBoxLayout()
#创建日期时间空间,并把当前日期时间赋值,。并修改显示格式
self.dateEdit=QDateTimeEdit(QDateTime.currentDateTime(),self)
self.dateEdit.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
#设置日期最大值与最小值,在当前日期的基础上,后一年与前一年
#设置日期时间为今天
self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365))
self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365))
#设置日历控件允许弹出
#注意:用来弹出日历的类只有QDateTimeEdit和QDateEdit,
#而QTimeEdit类虽然在语法上可以设置弹出日历,但是不起作用
self.dateEdit.setCalendarPopup(True)
#当日期改变时触发槽函数
self.dateEdit.dateChanged.connect(self.onDateChanged)
#当日期时间改变时触发槽函数
self.dateEdit.dateTimeChanged.connect(self.onDateTimeChanged)
#当时间改变时触发槽函数
self.dateEdit.timeChanged.connect(self.onTimeChanged)
#创建按钮并绑定一个自定义槽函数
self.btn=QPushButton('获得日期和时间')
self.btn.clicked.connect(self.onButtonClick)
#布局控件的加载与设置
layout.addWidget(self.dateEdit)
layout.addWidget(self.btn)
self.setLayout(layout)
#日期发生改变时执行
def onDateChanged(self,date):
#输出改变的日期
print(date)
#无论是日期还是时间改变都执行
def onDateTimeChanged(self,dateTime):
#输出改变的日期时间
print(dateTime)
#时间发生改变执行
def onTimeChanged(self,time):
#输出改变的时间
print(time)
def onButtonClick(self):
dateTime=self.dateEdit.dateTime()
#最大日期
maxDate=self.dateEdit.maximumDate()
#最大日期时间
maxDateTime=self.dateEdit.maximumDateTime()
#最大时间
maxTime=self.dateEdit.maximumTime()
#最小日期
minDate = self.dateEdit.minimumDate()
#最小日期时间
minDateTime=self.dateEdit.minimumDateTime()
#最小时间
minTime=self.dateEdit.minimumTime()
print('\n选择时间日期')
print('日期时间=%s' %str(dateTime))
print('最大日期=%s'%str(maxDate))
print('最大日期时间=%s'%str(maxDateTime))
print('最大时间=%s'%str(maxTime))
print('最小日期=%s'%str(minDate))
print('最小日期时间=%s'%str(minDateTime))
print('最小时间=%s'%str(minTime))
if __name__ == '__main__':
app=QApplication(sys.argv)
demo=DateTimeEditDemo()
demo.show()
sys.exit(app.exec_())
- Dial : 圆表盘控件。例如汽车仪表盘上的速度计,就是一个圆表盘
常用方法:
notchesVisile(): 刻度可见返回True,不可见返回False
wrapping(): 指针可回绕则返回True, 否则返回False
notchTarget(): 返回刻度间的目标宽度
notchSize(): 当前刻度尺寸
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import (QApplication, QWidget, QDial,
QLabel, QHBoxLayout)
class DemoDial(QWidget):
def __init__(self, parent=None):
super(DemoDial, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('练习 :QDial')
# 设置窗口大小
self.resize(400, 300)
self.initUi()
def initUi(self):
self.dial = QDial(self)
self.dial.setRange(0, 100)
self.dial.setNotchesVisible(True)
self.dial.valueChanged.connect(self.onDialValueChanged)
self.labValue = QLabel('0', self)
self.labValue.setFont(QFont('Arial Black', 24))
hLayout = QHBoxLayout(self)
hLayout.addWidget(self.dial)
hLayout.addWidget(self.labValue)
self.setLayout(hLayout)
def onDialValueChanged(self):
self.labValue.setText(str(self.dial.value()))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoDial()
window.show()
sys.exit(app.exec())
- Horizontal Scroll Bar : 水平滚动条
- Vertical Scroll Bar : 垂直滚动条
允许用户沿水平或者垂直方向在某一范围内滚动条,QScrollbar常用于空间位置的变化,比如,一幅大的图像。
常用方法:
value(): 获得滚动条的值
信号:
valueChanged: 当滑块的值发生改变时发射此信号,最常用的!!
sliderPressed: 当用户按下滑块时发射此信号
sliderMoved: 当用户拖动滑块时发射此信号
sliderReleased: 当用户释放滑块时发射此信号
- Horizontal Slider : 水平滑块
- Vertical Slider : 垂直滑块
允许用户沿水平或者垂直方向在某一范围内移动滑块,并将滑块所在的位置转换为一个合法范围内的整数值,QSlider用于控制时间变化,比如播放器。
常用方法:
value(): 获得滑动条的值
信号:
valueChanged: 当滑块的值发生改变时发射此信号,最常用的!!
sliderPressed: 当用户按下滑块时发射此信号
sliderMoved: 当用户拖动滑块时发射此信号
sliderReleased: 当用户释放滑块时发射此信号
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QLabel, QVBoxLayout, QFormLayout
class DemoSlider(QWidget):
def __init__(self, parent=None):
super(DemoSlider, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('练习 : QSlider')
# 设置窗口大小
self.resize(400, 240)
# 主布局为垂直布局
vLayer = QVBoxLayout(self)
# R,G,B颜色条
self.frm_r = QWidget(self)
self.frm_r.setMinimumHeight(32)
self.frm_r.setAutoFillBackground(True)
self.frm_g = QWidget(self)
self.frm_g.setMinimumHeight(32)
self.frm_g.setAutoFillBackground(True)
self.frm_b = QWidget(self)
self.frm_b.setMinimumHeight(32)
self.frm_b.setAutoFillBackground(True)
# form 布局
fLayout = QFormLayout(self)
fLayout.setHorizontalSpacing(20)
fLayout.addRow(QLabel('Red', self), self.frm_r)
fLayout.addRow(QLabel('Green', self), self.frm_g)
fLayout.addRow(QLabel('Blue', self), self.frm_b)
slider = QSlider(Qt.Horizontal, self)
slider.setRange(0, 255)
slider.setSingleStep(1)
slider.setValue(128)
slider.valueChanged.connect(self.sliderValueChanged)
vLayer.addLayout(fLayout)
vLayer.addSpacing(40)
vLayer.addWidget(slider)
vLayer.addStretch()
self.setLayout(vLayer)
# 设置初值
self.sliderValueChanged(128)
def sliderValueChanged(self, new_value):
pal = QPalette()
pal.setColor(QPalette.Background, QColor(new_value, 0, 0))
self.frm_r.setPalette(pal)
pal.setColor(QPalette.Background, QColor(0, new_value, 0))
self.frm_g.setPalette(pal)
pal.setColor(QPalette.Background, QColor(0, 0, new_value))
self.frm_b.setPalette(pal)