PyQt5的笔记的其他文章链接:
(3条消息) PyQt5的笔记(上)_我行我素,向往自由的博客-CSDN博客
(3条消息) PyQt5的笔记(中-1)_我行我素,向往自由的博客-CSDN博客
(3条消息) PyQt5的笔记(中-2)_我行我素,向往自由的博客-CSDN博客
目录
22.QComboBox
组合控件,多个小控件组合而成。
22.1 数据操作
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QComboBox功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
self.cb=QComboBox(self)
self.cb.resize(300,30)
# #添加一个条目
# # self.cb.addItem('xxx1')
# # self.cb.addItem(QIcon('图片/校徽.png'),'xxx2')
# #添加多个条目
# self.cb.addItems(['1','2','3'])#参数是可迭代对象,其他数据类型也可以,但字符串不可以
# #插入条目
# self.cb.insertItem(1,QIcon('图片/赞同.png'),'棒')#第一个参数是指位置
# self.cb.insertItems(1,('a','b','c'))#一次插入好几个条目
# #设置条目项【条目图标,条目名字内容】
# self.cb.setItemIcon(2,QIcon('图片/点击.png'))#第一个参数代表位置 0 1 2
# self.cb.setItemText(2,'点击')
# #删除条目
# self.cb.removeItem(3)
#展示一个树形结构【了解,以后会学】
model=QStandardItemModel()
item1=QStandardItem('item1')
item2 = QStandardItem('item2')
item22 = QStandardItem('item22')
item2.appendRow(item22)#添加行
model.appendRow(item1)
model.appendRow(item2)
self.cb.setModel(model)#这里只支持展示一级视图
self.cb.setView(QTreeView(self.cb))#这里会按照树形结构展示
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
效果展示:
22.2 数据的获取
self.cb=QComboBox(self)
self.cb.resize(300,30)
test_btn=QPushButton('测试按钮',self)
test_btn.move(100,100)
#test_btn.clicked.connect(lambda:print('当前共有{}个条目'.format(self.cb.count())))
test_btn.clicked.connect(lambda: print('当前的索引:{}'.format(self.cb.currentIndex())))
test_btn.clicked.connect(lambda: print('当前的条目:{}'.format(self.cb.currentText())))#currentText返回的是条目名字
test_btn.clicked.connect(lambda: print('当前的数据:{}'.format(self.cb.currentData())))#currentData返回条目下的内容
test_btn.clicked.connect(lambda: test_btn.setIcon(self.cb.itemIcon(self.cb.currentIndex())))#获取当前条目的图标
self.cb.addItem(QIcon('图片/校徽.png'),'校徽',{'name':'张三'})
self.cb.addItems(['abc','123','456'])
运行效果:
22.3 数据的限制
#数据限制
self.cb.setMaxCount(5)#设置最大条目,超过就无法添加,而不是新的替换老的
self.cb.setMaxVisibleItems(3)#设置可见的条目数目,多余的...显示
22.4 常规操作
#常规操作
self.cb.setIconSize(QSize(60,60))
self.cb.setSizeAdjustPolicy(QComboBox.AdjustToContents)#组合框将始终根据内容进行调整
#test_btn.pressed.connect(lambda :self.cb.clear())#清空
#test_btn.clicked.connect(lambda :self.cb.showPopup())#弹出
self.cb.setCompleter(QCompleter(['123','abc','aaa','bbb']))#完成器
22.5 信号的发射
#信号的发射
self.cb.activated.connect(lambda val:print('第{}个条目被激活'.format(val)))#【注意】只有用户改变条目才会被激活,代码改变的不会
self.cb.activated[str].connect(lambda val: print('条目被激活,内容是:',val))#获取到的是条目的名字
self.cb.currentIndexChanged.connect(lambda val:print('当前索引发生改变:',val))
self.cb.currentTextChanged.connect(lambda val:print('当前文本发生改变:',val))
self.cb.editTextChanged.connect(lambda val:print('当前编辑文本发生改变:',val))
self.cb.highlighted[str].connect(lambda val:print('当前高亮发生改变:',val))
22.6 综合案例
运行效果:
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QComboBox案例')
self.resize(500, 500)
self.city_dic = {
'北京': {
'东城': '001',
'西城': '002',
'朝阳': '003',
'丰台': '004'
},
'上海': {
'黄埔': '005',
'徐汇': '006',
'长宁': '007',
'静安': '008',
'松江': '009'
},
'广东': {
'广州': '010',
'深圳': '011',
'湛江': '012',
'佛山': '013'
}
}
self.setup_ui()
def setup_ui(self):
#1.创建两个下拉列表控件 pro city
self.pro = QComboBox(self)
self.city = QComboBox(self)
self.pro.move(100, 100)
self.city.move(200, 100)
#3.监听省下拉列表当前索引发生改变的信号
self.pro.currentIndexChanged[str].connect(self.pro_changed)
#self.pro.setCurrentIndex(0)#这个并不会触发信号
#4.监听城市下拉列表当前索引发生改变的信号
self.city.currentIndexChanged[int].connect(self.city_changed)#拿到的是索引
#2.展示数据到第一个下拉选择控件当中
self.pro.addItems(self.city_dic.keys())
def pro_changed(self, pro_name):
#1.根据省的名字,到字典里,获取对应的城市字典
citys=self.city_dic[pro_name]
self.city.blockSignals(True)#阻塞信号,防止clear()触发
self.city.clear()#清空之前的条目,这里也会触发city_changed()
self.city.blockSignals(False)
for key,val in citys.items():
self.city.addItem(key,val)
def city_changed(self,item_idx):
print(self.city.itemData(item_idx))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
22.7 子类QFontComboBox的使用
QComboBox的子类:QFontComboBox,字体家族,选择字体。
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QFontComboBox功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
label = QLabel(self)
label.setText('label')
label.move(100,100)
fcb=QFontComboBox(self)
#fcb.currentFontChanged.connect(lambda font:print('字体发生改变:',font))
fcb.currentFontChanged.connect(lambda font:label.setFont(font))
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
23.QAbstractSlider
print('QAbstractSlider的子类有:',QAbstractSlider.__subclasses__())
#QDial,QScrollBar,QSlider
23.1 功能作用
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QAbstractSlider功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
#print('QAbstractSlider的子类有:',QAbstractSlider.__subclasses__())#QDial,QScrollBar,QSlider
#QAbstractSlider(self)
label=QLabel(self)
label.setText('0')
label.move(200,200)
#label.adjustSize()#动态调整控件大小
label.resize(100,30)
sd=QSlider(self)
sd.move(100,100)
sd.valueChanged.connect(lambda val:label.setText(str(val)))
#设置最大值最小值
sd.setMaximum(100)
sd.setMinimum(60)
#当前数值的设置和获取
sd.setValue(88)
print('当前的数值为:',sd.value())
#步长的设置
sd.setSingleStep(5)#这里的步长不是指鼠标拖动时的,而是指按下上下键的时候
#是否追踪
print('是否有追踪:',sd.hasTracking())#默认是True,即滑块拖动一下就会出发一下,而不是稳定的时候
sd.setTracking(False)#不追踪:只要鼠标不松开,就不触发
#倒立外观:大小头反过来,下面是大值,上面是小值
sd.setInvertedAppearance(True)
#操作反转:上下键位反过来
sd.setInvertedControls(False)#设置为False,则按键盘上上下键效果相反,即上键实际上滑块下跑
# 设置水平方向
sd.setOrientation(Qt.Horizontal)
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
23.2 信号
#信号
sd.sliderMoved.connect(lambda val:print('值改为:',val))
sd.actionTriggered.connect(lambda val:print('打印的是状态:',val))
23.3 QSlider
sd=QSlider(self)
sd.move(200,200)
sd.resize(30,200)
#设置刻度:每隔十个值画一个刻度线
sd.setTickPosition(QSlider.TicksRight)#右边
sd.setTickPosition(QSlider.TicksBothSides)#两边都有
sd.setTickInterval(5)#每隔5个绘制一个刻度线
#sd.setPageStep(5)#设置步长
案例拓展:
from PyQt5.Qt import *
import sys
class SLider(QSlider):
def __init__(self,parent=None,*args,**kwargs):
super().__init__(parent,*args,**kwargs)
self.setTickPosition(QSlider.TicksBothSides)
self.set_up()
def set_up(self):
self.label=QLabel(self)
self.label.setStyleSheet('color:red;')
def mousePressEvent(self,evt):
super().mousePressEvent(evt)
x=(self.width()-self.label.width())/2
y=(1-self.value()/(self.maximum()-self.minimum()))*self.height()-self.label.height()
self.label.show()
self.label.move(int(x),int(y))
def mouseMoveEvent(self,evt):
super().mouseMoveEvent(evt)
x = (self.width() - self.label.width()) / 2
y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height())
self.label.move(int(x),int(y))
self.label.setText(str(self.value()))
self.label.adjustSize()
def mouseReleaseEvent(self, evt):
super().mouseReleaseEvent(evt)
self.label.hide()
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QSlider案例')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
#案例
self.slider=SLider(self)
self.slider.move(200,200)
self.slider.resize(30,200)
self.label=QLabel(self.slider)
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
23.4 QScrollBar
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QScrollBar功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
sb=QScrollBar(self)#竖直滚动条
sb.move(100,100)
sb.resize(30,200)
sb2 = QScrollBar(Qt.Horizontal,self) # 水平滚动条
sb2.move(150, 100)
sb2.resize(200, 30)
sb.valueChanged.connect(lambda val:print(val))
sb.setPageStep(50)
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
效果展示:
23.5 QDial
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QDial功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
dia=QDial(self)
dia.setRange(0,360)#设置范围,默认循环
dia.setNotchesVisible(True)#刻度可看见
dia.setPageStep(5)
dia.setWrapping(True)#无缺口,36.°无死角转动
dia.setNotchTarget(90)#凹口之间的目标像素值,即大刻度的密度值
#dia.valueChanged.connect(lambda val:print('值发生改变:',val))
label=QLabel(self)
label.move(200,100)
label.setText('label')
def test(val):
label.setStyleSheet('font-size:{}px;'.format(val))
label.adjustSize()
dia.valueChanged.connect(lambda val:test(val))
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
效果展示:
24.QRubberBand橡皮筋选中
rb=QRubberBand(QRubberBand.Rectangle,self)#矩形形状
rb.setGeometry(10,10,60,60)
print('当前是否被显示出来:',rb.isVisible())#False,默认状态下是隐藏的
rb.show()
案例:
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QRubberBand案例')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
#0.添加子控件 复选框
for i in range(30):
cb=QCheckBox(self)
cb.setText(str(i))
cb.move(i%4*50,i//4*60)
# 1.创建一个橡皮筋选中控件
self.rb = QRubberBand(QRubberBand.Rectangle, self)
def mousePressEvent(self,evt):
#2.设置尺寸大小:鼠标点击的位置点,
self.origin_pos=evt.pos()
self.rb.setGeometry(QRect(self.origin_pos,QSize()))
#3.展示橡皮筋控件
self.rb.show()
def mouseMoveEvent(self,evt):
#调整橡皮筋选中控件的位置以及尺寸
self.rb.setGeometry(QRect(self.origin_pos,evt.pos()).normalized())#normalized的设置,支持了右下角往左上角拖
def mouseReleaseEvent(self,evt):
#1.获取橡皮筋空间的尺寸范围
rect=self.rb.geometry()
#2.遍历所有的子控件,查看哪些自控件在区域范围
for child in self.children():
if rect.contains(child.geometry()) and child.inherits("QCheckBox"):
child.toggle()
self.rb.hide()
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
效果展示:
25.QDialog
25.1 功能测试
from PyQt5.Qt import *
import sys
app=QApplication(sys.argv)
window=QWidget()
window.setWindowTitle('QDialog功能测试')
window.resize(500,500)
d=QDialog(window)
btn1=QPushButton(d)
btn1.setText('btn1')
btn1.move(20,20)
btn1.clicked.connect(lambda :d.accept())#
btn2=QPushButton(d)
btn2.setText('btn2')
btn2.move(60,60)
# btn2.clicked.connect(lambda :d.reject())#
btn2.clicked.connect(lambda:print(d.accept()))
btn3=QPushButton(d)
btn3.setText('btn3')
btn3.move(60,160)
# btn3.clicked.connect(lambda :d.done(8))#
btn3.clicked.connect(lambda :d.setRresult(888))#设置和获取数值
d.setWindowTitle('对话框')
d.setWindowModality(Qt.WindowModal)
#是否显示尺寸调整控件
d.setSizeGripEnabled(True)
d.show()
# d.exec()#模态对话框
window.show()
sys.exit(app.exec_())
25.2 信号
from PyQt5.Qt import *
import sys
app=QApplication(sys.argv)
window=QWidget()
window.setWindowTitle('QDialog功能测试')
window.resize(500,500)
d=QDialog(window)
btn1=QPushButton(d)
btn1.setText('btn1')
btn1.move(20,20)
btn1.clicked.connect(lambda :d.accept())#
btn2=QPushButton(d)
btn2.setText('btn2')
btn2.move(60,60)
btn2.clicked.connect(lambda :d.reject())#
# btn2.clicked.connect(lambda:print(d.accept()))
btn3=QPushButton(d)
btn3.setText('btn3')
btn3.move(60,160)
btn3.clicked.connect(lambda :d.done(8))#
# btn3.clicked.connect(lambda :d.setRresult(888))#设置和获取数值
d.accepted.connect(lambda:print('点击了接受按钮'))
d.rejected.connect(lambda :print('点击了拒绝按钮'))
d.finished.connect(lambda val:print('点击了完成按钮:',val))
d.setWindowTitle('对话框')
d.setWindowModality(Qt.WindowModal)
#是否显示尺寸调整控件
d.setSizeGripEnabled(True)
d.show()
# d.exec()#模态对话框
window.show()
sys.exit(app.exec_())
26.QFontDialog
继承于QDialog。
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QFontDialog功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
# fd = QFontDialog(self)
font=QFont()
font.setFamily('宋体')
font.setPointSize(36)
fd=QFontDialog(font,self)#font就是默认的
btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(100,100)
btn.clicked.connect(lambda:fd.open())#窗口级别的模态对话框
fd.exec()
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
26.1 功能作用
fd.show()#非模态对话框
fd.open()#模态中的窗口级别
fd.exec()#模态中的应用程序级别
'''
非模态:就是窗口之间互不干扰
模态:必须关闭当前对话框,才允许操作其他对话框
窗口级别:所有窗口都展示出来
应用程序级别:只有一个对话框展示出来
'''
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QFontDialog功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
# fd = QFontDialog(self)
font=QFont()
font.setFamily('宋体')
font.setPointSize(36)
# fd=QFontDialog(font,self)#font就是默认的
# 设置当前字体
fd = QFontDialog(self)
fd.setCurrentFont(font)
#选项控制
# fd.setOption(QFontDialog.NoButtons)#只设置一个
fd.setOptions(QFontDialog.MonospacedFonts | QFontDialog.NoButtons)#同时设置多个
print(fd.testOption(QFontDialog.NoButtons))#查看某一个选项是否生效
btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(100,100)
label=QLabel(self)
label.move(200,100)
label.setText("label")
def font_sel():
# result=QFontDialog.getFont(self)
result=QFontDialog.getFont(font,self,'选择一个好看的字体')
#print(result)#字体 bool类型,返回的这个bool类型,表示是否点击了OK键
if result[1]==True:
label.setFont(result[0])
label.adjustSize()
btn.clicked.connect(font_sel)
def cfc(font):
label.setFont(font)
label.adjustSize()
fd.currentFontChanged.connect(cfc)#实时改变
# def font_sel():
# print('字体已经被选择:',fd.selectedFont().family())
# # btn.clicked.connect(lambda:fd.open(font_sel))#窗口级别的模态对话框
#
# # print(fd.exec())#可以拿到用户点了哪个选项,【取消】或者×为0,【ok】是1
# if fd.exec()==1:
# print(fd.selectedFont().family())
# fd.show()
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
27.QColorDialog
QColorDialog和QFontDialog差不多。
27.1 功能特性
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QColorDialog功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
#设置控件的背景颜色
# self.setStyleSheet('background-color:red')#自己以及子控件均会被设置
# self.setStyleSheet('background-color:rgb(100,200,150);')
# cd=QColorDialog(self)
cd = QColorDialog(QColor(100,200,150),self)#设置默认颜色
cd.setWindowTitle('选择一个好看的颜色')
# def color(col):
# # 调色板
# palette = QPalette()
# palette.setColor(QPalette.Background, col) # WindowText文本颜色;Background背景颜色
# self.setPalette(palette)
# cd.colorSelected.connect(color)#只有用户点击【OK】才会向外界传递信息
# cd.show()#非模态对话框,无返回值
def color():
palette = QPalette()
palette.setColor(QPalette.Background, cd.selectedColor())
self.setPalette(palette)
# cd.open(color)#模态中的窗口级别,无返回值
if cd.exec():# cd.exec()#模态中的应用程序级别,有int类型的返回值,1表示点击了【OK】,0表示点击其他
color()
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QColorDialog功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
cd = QColorDialog(QColor(100,200,150),self)#设置默认颜色
cd.setWindowTitle('选择一个好看的颜色')
def color():
# 调色板
palette = QPalette()
palette.setColor(QPalette.Background, cd.currentColor()) # WindowText文本颜色;Background背景颜色
self.setPalette(palette)
cd.currentColorChanged.connect(color)
cd.setOptions(QColorDialog.NoButtons | QColorDialog.ShowAlphaChannel)#NoButtons:没有了【OK】【取消】按钮了,应用于实时检测场景;ShowAlphaChannel:透明度
cd.show()#非模态对话框,无返回值
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
#设置
QColorDialog.setCustomColor(0, QColor(100, 200, 50))#第一个参数表示位置,从上往下数,从左往右数
QColorDialog.setStandardColor(2,QColor(255,0,0))
btn=QPushButton()
btn.setText('测试按钮')
btn.move(100,100)
def test():
color=QColorDialog.getColor(QColor(10,20,100),self,'选择颜色')
#调色板
palette = QPalette()
palette.setColor(QPalette.Background,color) # WindowText文本颜色;Background背景颜色
btn.setPalette(palette)
# self.setPalette(palette)
btn.clicked.connect(test)
27.2 信号
28.QFileDialog
28.1 静态方法-弹出文件操作对话框
获取文件是指获取该文件的路径。
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QFileDialog功能测试')
self.resize(500,500)
self.setup_ui()
def setup_ui(self):
#选择一个文件打开 getOpenFileName
# # 父类 对话框名字 打开的路径路径 指定将要打开的文件类型以;;分割 默认指定类型
# result=QFileDialog.getOpenFileName(self,'选择一个.py文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)','Python文件(*.py)')
#同时选多个文件 getOpenFileNames
# result=QFileDialog.getOpenFileNames(self,'选择一个.py文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)','Python文件(*.py)')
result=QFileDialog.getSaveFileName(self,'选择一个.py文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)','Python文件(*.py)')
print(result)#是一个元组,(文件的完整路径,选择的文件类型过滤字符串)
if __name__=='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行效果:
28.2 静态方法-弹出文件夹操作对话框
#选择文件夹
# result=QFileDialog.getExistingDirectory(self,'选择一个py文件','./')
result=QFileDialog.getExistingDirectoryUrl(self,'选择一个py文件',QUrl('./'))
运行效果:
28.3 构造函数
btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(100,100)
def test():
fd=QFileDialog(self,'选择一个文件','./','All(*.*);;Images(*.png *.jpg);;Python文件(*.py)')
fd.fileSelected.connect(lambda file:print(file))#可以拿到文件路径
fd.open()
btn.clicked.connect(test)
运行效果:
28.4 功能特性
#接收模式
fd.setAcceptMode(QFileDialog.AcceptSave)#选择的时候必须要有文件后缀名
#设置默认后缀名
fd.setDefaultSuffix('txt')
#设置文件模式
fd.setFileMode(QFileDialog.Directory)#设置为选择文件夹,而不再是All(*.*)...
#设置名称过滤器
# fd.setNameFilter('IMG(*.jpg *.png *.jpeg)')#注意:格式之间用空格隔开
fd.setNameFilters(['All(8.8)','Images(*.png *.jpg)','Python文件(*.py)'])
#显示信息的详细程度
fd.setViewMode(QFileDialog.Detail)
#设置指定角色的标签名称
fd.setLabelText(QFileDialog.FileName,'zmj的文件')
fd.setLabelText(QFileDialog.Accept,'zmj的打开')
fd.setLabelText(QFileDialog.Reject,'zmj的取消')
效果展示:
28.5 信号
#信号
fd.currentChanged.connect(lambda path:print('当前路径字符串发生改变。',path))
fd.currentUrlChanged.connect(lambda url:print('当前路径QUrl发生改变时:',url))
fd.directoryEntered.connect(lambda path:print('当前目录字符串进入时:',path))
fd.directoryUrlEntered.connect(lambda url:print('当前目录QUrl进入时:',url))
fd.filterSelected.connect(lambda filter:print('当前名称过滤字符串被选中时:',filter))
fd.setFileMode(QFileDialog.ExistingFiles)#允许同时选择多个文件 ctrl
fd.fileSelected.connect(lambda val:print('单个文件被选中',val))
fd.filesSelected.connect(lambda val:print('多个文件被选中-列表[字符串]',val))
fd.urlSelected.connect(lambda val:print('单个文件被选中-url:',val))
fd.urlsSelected.connect(lambda val:print('多个文件被选中-列表[url]',val))
29.QInputDialog
29.1 静态方法
getInt()
getDouble()
getText()
getMultiLineText()
getItem()
#'xxx1'是对话框的主标题,'xxx2'是输入框的提示标题
result=QInputDialog.getInt(self,'xxx1','xxx2',666,step=5)#默认值是666,步长为5,返回一个元组(数值,bool),点击【OK】返回True
result=QInputDialog.getDouble(self,'大标题','小标题',66.66,decimals=2)#decimals表示小数位数
result=QInputDialog.getText(self,'大标题','小标题',echo=QLineEdit.Password)#单行文本编辑器,没有上下箭头,echo是输出模式
result=QInputDialog.getMultiLineText(self,'大标题','小标题','zzz')#多行文本编辑器,默认字符串是:'zzz'
result=QInputDialog.getItem(self,'大标题','小标题',['1','2','3'],2,True)#默认是第二个条目,True表示可编辑
print(result)
29.2 功能作用
input_d=QInputDialog(self,Qt.FramelessWindowHint)
#选项设置
input_d.setOption(QInputDialog.UseListViewForComboBoxItems)
# input_d.setComboBoxItems(['1','2','abc'])#设置下拉列表
#设置界面文本控件内容
input_d.setLabelText('请输入你的姓名')
input_d.setOkButtonText('好的')
input_d.setCancelButtonText('我想取消')
#输入模式的设置
input_d.setInputMode(QInputDialog.DoubleInput)
input_d.setDoubleRange(9.9,19.9)
input_d.setDoubleStep(2)
input_d.setDoubleDecimals(3)#设置3位小数
input_d.show()
29.3 信号
30.QCalenderWidget
QCalenderWidget继承于QWidget,意味着不可以弹出来。
提供了一个基于每月日历控件,允许用户选择一个日期。
30.1 功能特性
30.1.1 设置日期范围
cw=QCalendarWidget(self)
#设置日期范围
cw.setMinimumDate(QDate(1990,1,1))
cw.setMaximumDate(QDate(2025,12,12))
# cw.setDateRange(QDate(1990,1,1),QDate(2025,12,12))
30.1.2 日期编辑
#通过键盘输入日期
cw.setDateEditEnabled(True)#默认是True
cw.setDateEditAcceptDelay(3000)#等待3秒会变成选中效果
30.1.3 日期获取
# 日期获取
btn=QPushButton(self)
btn.setText('测试按钮')
btn.move(300,300)
btn.clicked.connect(lambda:print('月份:',cw.monthShown()))
btn.clicked.connect(lambda: print('年份:', cw.yearShown()))
btn.clicked.connect(lambda: print('选中日期:', cw.selectedDate()))
效果展示:
30.1.4 格式外观
#外观格式的设置
cw.setNavigationBarVisible(True)#False:导航条的消失,不影响通过键盘设置日期
cw.setFirstDayOfWeek(Qt.Sunday)#设置周日为第一天
cw.setGridVisible(True)#设置网格的显示
tcf=QTextCharFormat()
tcf.setFontFamily('楷书')
tcf.setFontPointSize(16)
tcf.setFontUnderline(True)
cw.setHeaderTextFormat(tcf)
cw.setHorizontalHeaderFormat(QCalendarWidget.NoHorizontalHeader)
cw.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
t_tcf=QTextCharFormat()
t_tcf.setFontPointSize(20)
t_tcf.setToolTip('这是星期二')#小提示
cw.setDateTextFormat(QDate(2018,12,12),t_tcf)
30.1.5 选中模式
不支持多选。
#选中模式
cw.setSelectionMode(QCalendarWidget.NoSelection)
cw.setSelectedDate(QDate(2022,7,19))
30.1.6 常用方法
#显示方法
btn.clicked.connect(cw.showToday)#展示当前这一天,只是展示,而不选中
btn.clicked.connect(cw.showNextYear)#展示下一年