文章目录
前言
用于记录PyQT开发中遇到的控件操作
Qt开场白
def main():
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("./icons/应用图标.ico"))#设置软件图标
# app.setWindowIcon(QIcon("./icons/应用图标.jpg"))
window = Mainapp()
window.show()
app.exec_()
if __name__ == '__main__':
main()
一、Layouts
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
1、布局控制
在进行布局是,将布局中控件的sizePolicy调整为Expanding,水平布局调整水平策略,垂直布局则调整垂直策略,然后设置水平延展的比例,若第一份占3/4,则设置第一份的水平延展为3。
2、Form Layout:表单布局
可用于设置表单模式填写登陆信息或者表单对其信息
二、Spacers
1.引入库
三、Buttons
1、pushButton
#设置按钮不可用
self.PushButton_7.setEnabled(True)
#隐式函数编写
self.PushButton_8.clicked.connect(lambda: self.PushButton_7.setEnabled(False))
2、单选按钮
3、复选按钮
状态: isChecked:判断复选框是否勾选
信号: stateChanged:勾选或取消勾选发射信号
全选组件
def changecb1(self):
if self.cb1.checkState() == Qt.Checked:
self.cb2.setChecked(True)
self.cb3.setChecked(True)
self.cb4.setChecked(True)
elif self.cb1.checkState() == Qt.Unchecked:
self.cb2.setChecked(False)
self.cb3.setChecked(False)
self.cb4.setChecked(False)
四、Item Views
五、Item Widgets
Table Widgets
表头设置一定要放在行列后面,不然无法显示表头,在进行表格初始化时一定要先设定表格的行列
# 设置行列,设置表头
self.tableWidget_author.setRowCount(len(data))
self.tableWidget_author.setColumnCount(len(data[0]))
self.tableWidget_author.setHorizontalHeaderLabels(["姓名","电话","性别","家庭住址"])
# 表格加载内容
for row, form in enumerate(data):
for column, item in enumerate(form):
self.tableWidget_author.setItem(row, column, QTableWidgetItem(str(item)))
六、Contains
Tab Widget
隐藏标签栏
self.tabWidget.tabBar().setVisible(False)
显示第0页
self.tabWidget.setCurrentIndex(0)
七、Input Widgets
Combo Box
使用qfluentwidgets的designer时,部分信号与原生designer插件的信号有所出入,activated()等信号无法使用,用currentTextChanged()作为信号触发器
pyQT5中ComboBox的用法
#添加一个下拉选项
self.comboBox.addItem("默认文本")
#从列表中添加下拉选项
self.comboBox.addItems(["文本1", "文本2", "文本3"])
#设置显示项目
self.comboBox.setCurrentIndex(2)
#获取索引
self.comboBox.currentIndex()
#获取当前文本
self.comboBox.currentText()
#设置当前文本
self.comboBox.setCurrentText("你是谁")
LineEdit
配合校验器实现输入文本限制
配置校验器
def settings(self):
# 整数校验器 [1,99]
intValidator = QIntValidator(self)
intValidator.setRange(1,99)
# 浮点校验器 [-360,360],精度:小数点后2位
doubleValidator = QDoubleValidator(self)
doubleValidator.setRange(-360,360)
doubleValidator.setNotation(QDoubleValidator.StandardNotation)
# 设置精度,小数点2位
doubleValidator.setDecimals(2)
# 字符和数字
reg = QRegExp('[a-zA-Z0-9]+$')
validator = QRegExpValidator(self)
validator.setRegExp(reg)
# 设置校验器
self.ui.lineEdit.setValidator(intValidator)
self.ui.lineEdit_2.setValidator(doubleValidator)
self.ui.lineEdit_3.setValidator(validator)
QValidator 是一个抽象类,有一些子类:
链接: 校验器的使用
setRange范围设置通常无法设置到个位,应尽量避免用此种方式做范围限制
QIntValidator设置合法 int
可以设置其range,setRange()
QDoubleValidator 设置合法 Double
可以设置range setRange, ,小数点后位数setDecimals
QRegExpValidator 是用来结合正则表达式,判断合法性,利用正则表达式自由发挥
QRegExp, PyQt中的正则表达式类,设置正则表达式对象
setRegExp,指定校验器的正则表达式
# 字符和数字
reg = QRegExp('[a-zA-Z0-9]+$')
validator = QRegExpValidator(self)
validator.setRegExp(reg)
self.lineEdit_3.setValidator(validator)
LineEdit有四种回显模式Normal、NoEcho、Password、PasswordEchoOnEdit
文本获取
self.LineEdit.text()
文本输入
self.LineEdit.setText(data[5])
悬浮文本设置
self.LineEdit_7.setPlaceholderText("Normal回显模式")
TextEdit
文本获取
self.TextEdit.toPlainText()
文本输入
self.textEdit.setPlainText('Hello World,世界你好吗?')
信号控制,输入结束时,触发信号
self.lineEdit_client_tel.editingFinished.connect(self.tel_warning_add)
八、Display Widgets
Label
#设置文本
self.label_edit_tel.setText("请输入正确的电话号码")
#获取文本
text()
#设置伙伴关系
setBuddy()
#选择返回字符
selectedText()
#设置图片
self.label.setPixmap(QPixmap("test.png"))
#常用信号
#仅当标签文本为超链接时生效,普通文本两种信号无法生效
self.label_3.setText("<a href='https://www.baidu.com'>百度一下</a>")
#鼠标滑过触发
linkHovered
#鼠标点击触发
linkActivated
九、其他类
1、QTimer
信号: timeout
#实例化类
self.timer = QTimer()
#设置时间间隔(ms)
self.timer.setInterval(100)
#计时器连接函数
self.timer.timeout.connect(self.timer_control)
def timer_control(self):
sender = self.sender()
if sender == self.PushButton_6:
if self.PushButton_6.text() == "启动定时器":
self.timer.start()
self.PushButton_6.setText("暂停")
elif self.PushButton_6.text() == "暂停":
self.timer.stop()
self.PushButton_6.setText("继续")
elif self.PushButton_6.text() == "继续":
self.timer.start()
self.PushButton_6.setText("暂停")
if sender == self.PushButton_7:
self.timer.stop()
self.timer_date = 0
self.PushButton_6.setText("启动定时器")
if sender == self.timer:
self.timer_date +=1
if self.timer_date == 100:
self.timer_date = 0
self.timer.stop()
self.PushButton_6.setText("启动定时器")
self.Slider.setValue(self.timer_date)
2、对话框
2.1 文件对话框
返回值是一个元组,第一个值是路径,第二个是文本类型
def runQfileDialog(self):
#第三个参数进行文件格式进行限制
file = QFileDialog.getOpenFileName(self,"打开文件","./",("文本(*.txt)"))
file_save = QFileDialog.getSaveFileName(self,"保存文件","./",("文本(*.txt)"))
2.2 字体对话框
def runQfontDialog(self):
font,ok = QFontDialog.getFont()
self.TextEdit.setCurrentFont(font)
2.3 颜色对话框
#一个返回值
def runQcolorDialog(self):
col = QColorDialog.getColor()
self.TextEdit.setTextBackgroundColor(col)
2.4 进度条对话框
#进度条对话框
def runQprogressDialog(self):
num = 100000
progress = QProgressDialog(self)
progress.setWindowTitle("请稍等")
progress.setLabelText("正在操作...")
progress.setCancelButtonText("取消")
progress.setMinimumDuration(5)
progress.setWindowModality(Qt.WindowModal)
progress.setRange(0, num)
for i in range(num):
progress.setValue(i)
if progress.wasCanceled():
QMessageBox.warning(self, "提示", "操作失败")
break
else:
progress.setValue(num)
QMessageBox.information(self, "提示", "操作成功")