QAbstractSpinBox
定义
class MyASB(QAbstractSpinBox):
'''设置控件可以使用'''
def __init__(self, parent=None, num='0', *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.lineEdit().setText('0')
def stepEnabled(self):
if self.text:
number = eval(self.text())
if number == 0:
return QAbstractSpinBox.StepUpEnabled
elif number == 9:
return QAbstractSpinBox.StepDownEnabled
elif number > 9 or number < 0:
return QAbstractSpinBox.StepNone
else:
return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled
def stepBy(self, p_int):
cur_num = int(self.text()) + p_int
self.lineEdit().setText(str(cur_num))
简单方法
asb = MyASB(self)
asb.lineEdit().setText('-3')
asb.text()
asb.lineEdit().text()
asb.clear()
c = QCompleter(['123','11','aaa'],asb)
asb.lineEdit().setCompleter(c)
asb.lineEdit().setAlignment(Qt.AlignCenter)
asb.setAlignment(Qt.AlignRight)
asb.setFrame(False)
print(asb.hasFrame())
'''UpDownArrows:箭头(默认)
NoButtons:无符号
PlusMinus:加减号.'''
asb.setButtonSymbols(QAbstractSpinBox.PlusMinus)
asb.setAccelerated(True)
print(asb.isAccelerated())
asb.setReadOnly(True)
print(asb.isReadOnly())
设置读取内容
asb = MyASB(self, '1')
asb.resize(100, 30)
asb.move(10, 50)
btn = QPushButton('lineEdit下', self)
btn.move(10, 200)
btn_1 = QPushButton('abs下', self)
btn_1.move(110, 200)
def func():
print(asb.text())
print(asb.lineEdit().text())
asb.lineEdit().setText('-3')
c = QCompleter(['123', '11', 'aaa'], asb)
asb.lineEdit().setCompleter(c)
asb.lineEdit().setAlignment(Qt.AlignCenter)
btn.clicked.connect(func)
def func_1():
asb.setAlignment(Qt.AlignRight)
print(asb.hasFrame())
asb.setFrame(False)
asb.setButtonSymbols(
QAbstractSpinBox.PlusMinus)
asb.clear()
btn_1.clicked.connect(func_1)
内容验证
class ASB(MyASB):
def __init__(self, parent=None, num='0', *args, **kwargs):
super().__init__(parent, *args, **kwargs)
def validate(self, p_str, p_int):
'''验证'''
num = int(p_str)
if num < 18:
return (QValidator.Intermediate, p_str, p_int)
elif num <= 180:
return (QValidator.Acceptable, p_str, p_int)
else:
return (QValidator.Invalid, p_str, p_int)
def fixup(self, p_str):
'''修补'''
print(p_str)
return '18'
asb = ASB(self, '1')
asb.resize(100, 30)
asb.move(10, 50)
信号
asb = MyASB(self, '1')
asb.editingFinished.connect(lambda :print('完成编辑'))
QSpinBox

简单方法
sb = QSpinBox(self)
sb.setMinimum(18)
print(sb.minimum())
sb.setMaximum(180)
print(sb.maximum())
sb.setRange(18,180)
sb.setValue(10)
print(sb.value())
print(sb.text())
print(sb.lineEdit().text())
sb.setWrapping(True)
print(sb.wrapping())
sb.setSingleStep(2)
sb.setPrefix('这是第')
sb.setSuffix('月')
sb.setSpecialValueText('正月')
sb.setDisplayIntegerBase(10)
print(sb.displayIntegerBase())
自定义格式展示
class SB(QSpinBox):
'''重写这个类方法,格式改变,但是本身数值不会变'''
def textFromValue(self, p_int):
return str(p_int) + '*' + str(p_int)
sb = SB(self)
sb.resize(100, 30)

信号
sb = QSpinBox(self)
sb.valueChanged[str].connect(lambda val: print('值变了', val))
QDoubleSpinBox

简单方法
dsb = QDoubleSpinBox(self)
dsb.setMaximum(2.00)
dsb.setMinimum(1.00)
dsb.setRange(1.00, 2.00)
dsb.setSingleStep(0.1)
dsb.setPrefix('当前倍速:')
dsb.setSuffix('倍')
dsb.setSpecialValueText('正常倍速')
dsb.setWrapping(True)
dsb.setDecimals(1)
print(dsb.decimals())
dsb.setValue(100.00)
print(dsb.value())
print(dsb.cleanText())
print(dsb.text())
print(dsb.lineEdit().text())
自定义格式展示
class DSB(QDoubleSpinBox):
def textFromValue(self, p_float):
'''重写这个类方法'''
return str(p_float) + '-->' + str(p_float)
dsb = DSB(self)
dsb.resize(150, 30)
信号
dsb = QDoubleSpinBox(self)
dsb.valueChanged.connect(lambda val: print(val))
dsb.valueChanged[str].connect(lambda val: print(val))
QDateTimeEdit

QDateTime/&QTime类
dt = QDateTime.currentDateTime()
dt = dt.addYears(-2)
dt.offsetFromUtc()
t = QTime.currentTime()
t.start()
btn.clicked.connect(lambda: print('经历了{}秒'.format(t.elapsed() / 1000)))
QDate/&TimeEdit
dte = QDateTimeEdit(QDateTime.currentDateTime() , self)
de = QDateEdit(self)
de.setDisplayFormat('yy-MMMM-dddd')
te = QTimeEdit(QTime.currentTime(), self)
te.setDisplayFormat('a hh:m:ss')


获取日期时间
print(dte.dateTime())
print(de.date())
print(de.date().toString('MM/dd/yyyy'))
print(dte.time())
格式化时间显示
btn = QPushButton('按钮', self)
btn.move(10, 200)
dte = QDateTimeEdit(QDateTime.currentDateTime(), self)
dte.resize(200, 30)
dte.move(10, 50)
dte.setDisplayFormat('yy-MM-d $ m:ss:zzz')
print(dte.sectionCount())
def func():
dte.setFocus()
dte.setCurrentSectionIndex(2)
dte.setCurrentSection(QDateTimeEdit.DaySection)
print(dte.currentSectionIndex())
print(dte.sectionText(QDateTimeEdit.DaySection))
btn.clicked.connect(func)

设置范围
dte = QDateTimeEdit(QDateTime.currentDateTime(), self)
dte.setMaximumDateTime(QDateTime.currentDateTime().addYears(10))
dte.setMinimumDateTime(QDateTime.currentDateTime().addYears(-10))
dte.setDateTimeRange(QDateTime.currentDateTime().addYears(-10),QDateTime.curre ntDateTime().addYears(10))
dte.clearMaximumDateTime()
dte.clearMinimumDateTime()
弹出日历
dte = QDateTimeEdit(QDateTime.currentDateTime(), self)
dte.resize(200, 30)
dte.move(10, 50)
dte.setCalendarPopup(True)

信号
dte = QDateTimeEdit(QDateTime.currentDateTime(), self)
dte.dateTimeChanged.connect(lambda var:print('日期时间改变了',var))
dte.dateChanged.connect(lambda var:print('日期改变了',var))
dte.timeChanged.connect(lambda var:print('时间改变了',var))
QComboBox

简单方法
cb = QComboBox(self)
cb.addItems(['haha', 'AAA', 'BBB', 'CCC'])
cb.setMaxCount(6)
cb.setEditable(True)
cb.setMaxVisibleItems(4)
cb.setDuplicatesEnabled(True)
cb.setFrame(True)
cb.clear()
cb.clearEditText()
cb.showPopup()
cb.setIconSize(QSize(40,40))
cb.setSizeAdjustPolicy(QComboBox.AdjustToContents)
cb.setCompleter(QCompleter(['123,''aaa', 'www']))
数据条目操作
cb = QComboBox(self)
cb.addItem(QIcon('./resources/unity.png'), 'unity')
cb.addItems(['python', 'java', 'c#', 'c++'])
cb.insertItem(2, QIcon('./resources/big_flower.png'), 'R语言')
cb.insertItems(3, ['1', '2', '3'])
cb.setItemIcon(2, QIcon('./resources/可见.png'))
cb.setItemText(2, '不是R语言')
cb.removeItem(8)
添加特殊数据
model = QStandardItemModel()
item_0 = QStandardItem('0')
item_1 = QStandardItem('1')
item_1_0 = QStandardItem('1_0')
item_1.appendRow(item_1_0)
model.appendRow(item_0)
model.appendRow(item_1)
cb = QComboBox(self)
cb = QComboBox(self)
cb.setModel(model)
cb.setView(QTreeView(cb))

数据获取
cb = QComboBox(self)
cb.addItems(['haha', 'AAA', 'BBB', 'CCC'])
cb.addItem(QIcon('./resources/unity.png'), 'unity', {'name': 'U3D'})
btn = QPushButton('按钮', self)
btn.move(10, 200)
def func():
print(cb.count())
print(cb.currentIndex())
print(cb.currentText())
print(cb.currentData)
btn.setIcon(cb.itemIcon(cb.currentIndex()))
print(cb.itemIcon(cb.count() - 1), cb.itemText(cb.count() - 1), cb.itemData(cb.count() - 1))
btn.clicked.connect(func)
QFontComoBox简单方法
label = QLabel('Hello Unity World!', self)
label.resize(150, 60)
label.move(250, 100)
fcb = QFontComboBox(self)
fcb.move(100, 100)
fcb.currentFontChanged.connect(lambda font: label.setFont(font))
fcb.setEditable(False)

案例
province = QComboBox(self)
city = QComboBox(self)
province.move(100, 50)
city.move(250, 50)
province.resize(100, 30)
city.resize(100, 30)
info = {
'北京': {
'石景山': '001',
'朝阳': '002',
'海淀': '003',
'丰台': '004'
},
'山东': {
'青岛': '005',
'济南': '006',
'烟台': '007',
'日照': '008'
},
'湖北': {
'武汉': '009',
'黄冈': '010',
'黄石': '011',
'宜昌': '012'
}
}
def func(pro_name):
cities = info[pro_name]
city.blockSignals(True)
city.clear()
city.blockSignals(False)
for key, value in cities.items():
city.addItem(key, value)
province.currentIndexChanged[str].connect(func)
def func_1(city_index):
print(city.itemData(city_index))
city.currentIndexChanged[int].connect(func_1)
province.addItems(info.keys())
