pyqt入门
常用的窗口控件
•QMainWindow、QWidget和QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用
创建主窗口菜单
设置窗口图标,标题,改变窗口大小
将窗口移动到屏幕中心
x = (屏幕宽度-窗口宽度)/2
y = (屏幕高度-窗口高度)/2
方法 | 调用对象 | 方法说明 |
screenGeometry() | QDesktopWidget() | 获取屏幕尺寸 |
geometry() | QMainWindow() | 获取窗口尺寸 |
move(x,y) | QMainWindow() | 移动到指定的位置 |
气泡提示
•设置气泡需要用到下面这个方法
setToolTip(msg) msg----为提示信息,字符串形式
# 设置提示
button.setToolTip('这个按钮是发送消息按钮') #鼠标移动到按钮上后会弹出提示
pyqt常用API学习
文本框–用QLabel实现
•QLabel可以显示不可编辑的文本或图片,也可以放置一个GIF动画
•QFont开设置字体样式和字体大小
# QLabel
label = QLabel()
# 设置文本信息
label.setText('这是一个文本消息')
# 设置文本样式
label.setFont(QFont('宋体',20)) #setFont用来设置字体
# 设置父窗体
label.setParent(widget)
编辑图片
# 创建QLabel
label = QLabel()
# 创建PixMap
map = QPixmap('xuexi.png')
# 设置图片
label.setPixmap(map) #setpixmap--map为路径+图片名
# 设置父窗体
label.setParent(widget)
文本框控件
•即输入框,QLineEdit是单行文本输入框,QTextEdit是多行文本输入框
QlineEdit
方法 | 说明 |
setEchoMde() | QLineEdit.Normal,正常显示所输入的字符,默认选项 QLineEdit.NoEcho,不显示任何输入的字符,常用于密码类型的输入,且其密码长度需要保密时 QLineEdit.Password,显示与平台相关的密码掩码字符,而不是实际输入的字符 QLineEdit.PasswordEchoOnEdit,在编辑时显示字符,负责显示密码类型的输入 |
setPlaceholderText() | 设置文本框浮显文字 |
setText() | 设置文本框内容 |
setMaxLength() | 设置文本框所允许输入的最大字符数 |
#设置文本框
edit = QLineEdit()
# 设置提示文字
edit.setPlaceholderText('请输入QQ')
# 设置文字
edit.setText('12312321')
# 设置输入框模式
# edit.setEchoMode(QLineEdit.NoEcho) #输入不显示任何字符
# edit.setEchoMode(QLineEdit.Password) #密码模式时
edit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
# 设置最大长度
edit.setMaxLength(5)
# 显示设置父窗体
edit.setParent(widget)
edit.resize(100,500) #设置文本框框体的大小
QTextEdit
•QTextEdit类是一个多行文本框控件,可以显示多行文本内容,当文本内容超过控件显示范围时,可以显示水平或竖直滚动条.
•QTextEdit不仅可以显示文本还可以显示HTML文档.
方法 | 说明 |
setPlainText() | 设置多行文本框的文本内容 |
toPlainText() | 返回多行文本框的文本内容 |
setHtml() | 设置多行文本框的内容为HTML文档 |
toHtml() | 返回多行文本框的HTML文档内容 |
clear() | 清空多行文本框的内容 |
# 创建多行输入框
edit = QTextEdit()
edit.setPlaceholderText('请输入留言') #注意此处与setText用法的区别,多了一个place
# 输入文字
# edit.setText('2222') #输入文字时这两种方式都可以
edit.setPlainText('2222')
# 清空
edit.clear()
按钮控件-
-•常见的按钮实现类包括:按钮–QPushButton、单选框–QRadioButton和复选框–QCheckBox
QPushButton
单选框–QRadioButton:它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项
复选框–QCheckBox
单选框和复选框的信号都是:toggled
toggled是一个状态改变信号,不是选中信号。
def deal(btn):
if btn.isChecked(): #如果bnt按钮被选中
# 输出哪个选中了
print(btn.text()) #输出bnt上的文本内容
# 创建布局
layout = QHBoxLayout()
rb1 = QRadioButton('button1')
# 设置切换信号
rb1.toggled.connect(lambda :deal(rb1)) #发生状态改变的信号
rb2 = QRadioButton('button2')
rb2.toggled.connect(lambda :deal(rb2)) #****注意connect链接一个带参数的函数前面必须加lambda
rb2.setChecked(True) #默认按钮rb2前的勾选框被选中
常用组件(1)
信号和槽
•如果信号和多个槽函数相关联,当信号被发射时,这些槽的执行顺序将会是随机的、不确定的。
# 将信号和槽函数关联
button.clicked.connect(showMsg) #***注意clicked没有(),它是一个信号,connect的()内是一个函数, 而不是一个函数返回值,所以showMsg后面不能加()
# button.clicked.connect(lambda :print('hello'))
'''需求:点击按钮,关闭窗口'''
def close():
print('关闭窗口')
app.quit()
# 创建按钮
button =QPushButton()
# 文本
button.setText('关闭窗口')
# 点击信号
button.clicked.connect(close) #和下面两种方式都可以,但注意connect后是函数的名字
# button.clicked.connect(app.quit)
布局管理
•所谓布局,指的就是多个控件在窗口中的展示方式
•布局方式大致分为:绝对布局、水平布局、竖直布局、网格布局、表单布局
•布局中可以添加控件,使用addWidget()方法
•布局中也可以再添加布局,使用addLayout()方法
框布局
•水平布局(QHBoxLayout)和竖直布局(QVBoxLayout)都称为框布局
•水平布局中是按照从左往右的顺序添加控件的,•竖直布局采用QVBoxLayout,是采用从上往下的方式添加控件的
参数 | 说明 |
Qt.AlignLeft | 水平左对齐 |
Qt.AlignRight | 水平右对齐 |
Qt.AlignCenter | 水平居中对齐 |
Qt.AlignJustify | 水平两端对齐 |
Qt.AlignTop | 竖直上对齐 |
Qt.AlignBottom | 竖直下对齐 |
Qt.AlignVCenter | 竖直居中对齐 |
#创建水平布局
layout = QHBoxLayout()
#把按钮添加到布局中
btn=QPushButton()
layout.addWidget(btn,0,Qt.AlignBottom) #将按钮添加到布局的底部
#layout.addWidget(btn) #这种方式默认从上至下添加控件
# 把布局放到窗口中
widget.setLayout(layout) #注意这里不能用layout.setParent(widget)
表单布局
QFormLayout
•表单布局添加控件的方法为 addRow(label,widget)
# 创建布局
layout = QFormLayout()
# 添加控件
layout.addRow(QLabel('姓名'),QLineEdit())
layout.addRow(QLabel('年纪'),QLineEdit())
layout.addRow(QLabel('电话'),QLineEdit())
# 显示布局
widget.setLayout(layout)
布局嵌套
layout4 = QVBoxLayout()
layout.addLayout(layout4) #布局中添加布局
常用控件(2)
对话框控件
•QDialog的子类有:QMessageBox、QFileDialog、QFontDialog.QInputDialog等
QMessageBox–对话框
def deal():
print('点击了按钮')
# 参数1:显示在哪个窗体中
# 参数2:标题
# 参数3:提示内容
# 参数4:按钮个数
# 参数5:默认按钮选中
QMessageBox.information(widget,'对话框','提示信息!',QMessageBox.Ok|QMessageBox.Cancel,QMessageBox.Ok)
#QMessageBox.question(widget,'对话框','提示信息?',QMessageBox.Ok,QMessageBox.Ok)
#区别一个提示?,一个提示!。。上面那个弹出对话框有两个按钮,默认ok,下面有一个按钮,默认ok
# 创建按钮
btn = QPushButton()
btn.setText('显示对话框')
# 处理按钮点击事件
btn.clicked.connect(deal) #发送信号后执行槽函数
QInputDialog-输入框对话框
•QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成
def create():
str,ok = QInputDialog.getText(widget,'提示','请输入角色') #(基于widget弹出,标题,提示内容)
if ok:
print(str) #点击ok后输出文本框内输入的信息
# 按钮
btn = QPushButton('创建角色')
# 设置槽函数
btn.clicked.connect(create)
# 显示按钮
btn.setParent(widget)