- QIcon 图标控件,为每一个窗口设置一个特有的图标。
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QIcon
import sys
#创建一个名为Icon的窗口,继承自QWidget
class Icon(QWidget):
def __init__(self,parent=None):
super(Icon,self).__init__(parent)
self.initUI()
#初始化窗口
def initUI(self):
self.setGeometry(300,300,250,150) # x,y width, height
self.setWindowTitle("程序图标")
self.setWindowIcon(QIcon("./../images/resize.png"))#为窗口设置图标
if __name__=="__main__":
app=QApplication(sys.argv)
icon=Icon()
icon.show()
sys.exit(app.exec_())
- QToolTip 该控件是为用户显示有好的气泡信息
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QApplication,QWidget,QToolTip
from PyQt5.QtGui import QFont
import sys
class WinForm(QWidget):
def __init__(self):
super().__init__()
self.initUI()
#鼠标放在窗口上就可以显示提示
def initUI(self):
QToolTip.setFont(QFont("SansSerif",10))
self.setToolTip("这是一个<b>气泡提示</b>")
self.setGeometry(200,300,400,400)
self.setWindowTitle("气泡提示")
if __name__=="__main__":
app=QApplication(sys.argv)
win=WinForm()
win.show()
sys.exit(app.exec_())
- QLable 标签类占位符,该控件可以显示文本、图片、GIF动画,还可被用作提示标记为其他控件。继承自QFrame
常用方法
setAlignment() | 按固定值方式对齐文本:Qt.AlignLeft(水平靠左对齐)、Qt.AlignRight(水平靠右对齐)、Qt.AlignCenter(水平居中)、Qt.AlignTop(垂直靠上对齐)、Qt.AlignButton(垂直靠下)、Qt.AlignVCenter(垂直居中对齐) Qt.AlignJustify(水平方向调整间距两端对齐)、 |
setIndent() | 设置文本缩进值 |
setPixmap() | 设置QLable为一个Pixmap图片 |
text() | 获得QLable的文本内容 |
setText() | 设置QLable的文本内容 |
selectedText() | 返回选择的字符 |
setBuddy() | 设置QLable的助记符及buddy(伙伴),即使用QLable设置快捷键,会在快捷键后将焦点设置到其Buddy上,这里用到了QLable的交互控件功能。此外buddy可以是任何一个Widget控件,使用setBuddy(QWidget* )设置,其QLable必须是文本,并且使用 & 符号标记了助记符 |
setWordWrap() | 设置是否允许换行 |
常用信号
linkActivated | 当单击标签中嵌入的超链接,希望在新窗口打开超链接时,setOpenExternalLinks特性必须为true |
linkHovered | 当鼠标滑过标签中嵌入的超链接时,需要用槽函数与这个信号绑定 |
案例:操作QLable
#在窗口中显示QLable
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QVBoxLayout
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap,QPalette
import sys
class WindowDemo(QWidget):
def __init__(self):
super().__init__()
self.initUi()
self.setLable()
self.addWidgets()
self.doSomething()
#定义控件变量并初始化控件,并不用全部都定义在构造函数中
def initUi(self):
self.lable1 = QLabel(self)
self.lable2 = QLabel(self)
self.lable3 = QLabel(self)
self.lable4 = QLabel(self)
self.palette = QPalette()
self.palette.setColor(QPalette.Window, Qt.blue)
self.vBox = QVBoxLayout()
# 初始化标签
def setLable(self):
self.lable1.setText("这是一个文本标签")
self.lable1.setAutoFillBackground(True)
self.lable1.setPalette(self.palette)
self.lable1.setAlignment(Qt.AlignCenter)
self.lable2.setText("<a href='#'>欢迎使用Python</a>")
self.lable3.setAlignment(Qt.AlignCenter)
self.lable3.setToolTip("这是一个图片标签")
self.lable3.setPixmap(QPixmap("./../images/resize.png"))
self.lable4.setText("<a href='http://www.cnblogs.com/wangshuo1'>欢迎访问小屋</a>")
self.lable4.setAlignment(Qt.AlignRight)
self.lable4.setToolTip("这是一个超链接")
# 2在窗口布局中添加控件
def addWidgets(self):
self.vBox.addWidget(self.lable1)
self.vBox.addStretch()
self.vBox.addWidget(self.lable2)
self.vBox.addStretch()
self.vBox.addWidget(self.lable3)
self.vBox.addStretch()
self.vBox.addWidget(self.lable4)
self.setLayout(self.vBox)
self.setWindowTitle("QLable 例子")
def doSomething(self):
#允许Lable1控件访问超链接
self.lable1.setOpenExternalLinks(True)
#打开超链接,默认是不允许,需要使用setOpenExternalLinks(True)允许浏览器访问超链接
self.lable4.setOpenExternalLinks(False)
#点击文本框绑定槽事件
self.lable4.linkActivated.connect(self.link_clicked)
#划过文本框绑定槽事件
self.lable2.linkHovered.connect(self.link_hovered)
self.lable1.setTextInteractionFlags(Qt.TextSelectableByMouse)
#槽函数
def link_hovered(self):
print("当鼠标滑过lable2标签时,触发")
def link_clicked(self):
print("当鼠标滑过lable4标签时,触发")
if __name__=="__main__":
app=QApplication(sys.argv)
win=WindowDemo()
win.resize(400,400)
win.show()
sys.exit(app.exec_())
QLable:案例快捷键的使用
#在QLable中使用快捷键
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
import sys
class QlableDemo(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle("快捷键")
self.initUI()
def initUI(self):
self.nameLB1=QLabel("&Name",self)
self.nameED1=QLineEdit(self)
self.nameLB1.setBuddy(self.nameED1)
self.nameLB2=QLabel("&Password",self)
self.nameED2=QLineEdit(self)
self.nameLB2.setBuddy(self.nameED2)
self.btOK=QPushButton("&OK")
self.btCancel=QPushButton("&Cancel")
self.mainLayout=QGridLayout(self)
self.mainLayout.addWidget(self.nameLB1,0,0)
self.mainLayout.addWidget(self.nameED1,0,1,1,2)
self.mainLayout.addWidget(self.nameLB2,1,0)
self.mainLayout.addWidget(self.nameED2,1,1,1,2)
self.mainLayout.addWidget(self.btOK,2,1)
self.mainLayout.addWidget(self.btCancel, 2, 2)
#点击文本框绑定槽事件
self.nameLB1.linkActivated.connect(self.link_clicked)
#划过文本框绑定槽事件
self.nameLB2.linkHovered.connect(self.link_hovered)
def link_hovered(self):
print("鼠标滑过lable-2,触发事件")
def link_clicked(self):
print("鼠标点击lable-4,触发事件")
if __name__=="__main__":
app=QApplication(sys.argv)
demo=QlableDemo()
demo.show()
sys.exit(app.exec_())
- QLineEdit:QLineEdit十一个单行文本框控件,可以输入单行字符串,若需输入多行可以使用QTextEdit,该类中有许多常用的方法。
常用的方法
setAlignment() | 按固定值方式对齐文本:Qt.AlignLeft(水平靠左对齐)、Qt.AlignRight(水平靠右对齐)、Qt.AlignCenter(水平居中)、Qt.AlignTop(垂直靠上对齐)、Qt.AlignButton(垂直靠下)、Qt.AlignVCenter(垂直居中对齐) Qt.AlignJustify(水平方向调整间距两端对齐)、 |
clear() | 清空文本框内容 |
setEchoMode() | 设置文本框显示格式,允许输入的格式的值: QLineEdit.Normal:正常输入,默认模式 QLineEdit.NoEcho:不显示任何输入字符。常用于密码类型的输入,且长度需要保密 QLineEdit.Password:不显示密码字符使用平台内置的字符掩码,星号或者圆点 QLineEdit.PasswordEchoOnEdit:在编辑时显示字符和类型 |
Text() | 获得QLable的文本内容 |
setText() | 设置QLable的文本内容 |
setPlaceholdText() | 设置文本框浮显文字 |
setMaxLength() | 设置文本框最大输入长度 |
setReadOnly() | 设置文本框只读 |
setDragEnable() | 设置文本框是否接受拖动 |
selectAll() | 全选 |
setFocus() | 得到焦点 |
setInputMask() | 设置掩码 |
setValidator() | 设置文本框验证器,将限制任意可能输入的文本 QInputValidator:限制输入整数 QDoubleValidator:限制输入浮点数 QRegexpValidator:输入是否符合正则表达式 |
常用信号与槽
selectionChanged | 选择改变,信号就会被发射 |
textChanged | 修改文本内容时,信号触发 |
editingFinished | 编辑文本结束时,信号被发射 |
案例一 #在QLineEdit
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
import sys
class LineEditDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QLineEdit 例子")
self.initUI()
self.setLayout(self.flo)
def initUI(self):
self.flo=QFormLayout()
self.pNormalLineEdit=QLineEdit()
self.pNoEchoLineEdit=QLineEdit()
self.pPasswordLineEdit=QLineEdit()
self.pPasswordEchoOnEditLineEdit=QLineEdit()
self.flo.addRow("Normal",self.pNormalLineEdit)
self.flo.addRow("NoEcho",self.pNoEchoLineEdit)
self.flo.addRow("Password",self.pPasswordLineEdit)
self.flo.addRow("PasswordEchoOnEdit",self.pPasswordEchoOnEditLineEdit)
self.pNormalLineEdit.setPlaceholderText("Normal")
self.pNoEchoLineEdit.setPlaceholderText("NoEcho")
self.pPasswordLineEdit.setPlaceholderText("Password")
self.pPasswordEchoOnEditLineEdit.setPlaceholderText("PasswordEchoOnEdit")
self.Show()
def Show(self):
self.pNormalLineEdit.setEchoMode(QLineEdit.Normal)
self.pNoEchoLineEdit.setEchoMode(QLineEdit.NoEcho)
self.pPasswordLineEdit.setEchoMode(QLineEdit.Password)
self.pPasswordEchoOnEditLineEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
if __name__=="__main__":
app=QApplication(sys.argv)
demo=LineEditDemo()
demo.show()
sys.exit(app.exec_())
案例二:设置QLineEdit模式,设置编辑框的输入格式(输入掩码)、验证器(输入规则,搭配正则表达式
#QLineEdit验证器
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator
from PyQt5.QtCore import QRegExp
import sys
class lineEditDemo(QWidget):
def __init__(self,parent=None):
super(lineEditDemo,self).__init__(parent)
self.setWindowTitle("QLineEdit 验证器")
self.resize(400,300)
self.initUI()
self.setInputMask()
self.addRow()
self.setValue()
# 设置验证器
self.setLayout(self.flo)
def initUI(self):
#网格布局
self.flo=QFormLayout()
#设置正则规则编辑框
self.pIntLineEdit=QLineEdit()
self.pDoubleLineEdit=QLineEdit()
self.pValidatorLineEdit=QLineEdit()
#设置输入掩码编辑框
self.pIPLineEdit=QLineEdit()
self.pMACLineEdit=QLineEdit()
self.pDateLineEdit=QLineEdit()
self.pLicenseLineEdit=QLineEdit()
def setInputMask(self):
self.pIPLineEdit.setInputMask("000.000.000.000;_")
self.pMACLineEdit.setInputMask("HH:HH:HH:HH:HH:HH;_")
self.pDateLineEdit.setInputMask("0000-00-00")
self.pLicenseLineEdit.setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#")
def addRow(self):
self.flo.addRow("整形",self.pIntLineEdit)
self.flo.addRow("浮点型",self.pDoubleLineEdit)
self.flo.addRow("字母和数字",self.pValidatorLineEdit)
#设置文本框默认显示文字背景
self.pIntLineEdit.setPlaceholderText("整形")
self.pDoubleLineEdit.setPlaceholderText("浮点型")
self.pValidatorLineEdit.setPlaceholderText("字母和数字")
self.flo.addRow("数字掩码",self.pIPLineEdit)
self.flo.addRow("MAC 掩码",self.pMACLineEdit)
self.flo.addRow("日期掩码",self.pDateLineEdit)
self.flo.addRow("许可证掩码",self.pLicenseLineEdit)
def setValue(self):
#整型 范围 [1,99]
self.pIntValidator=QIntValidator(self)
self.pIntValidator.setRange(1,99)
#浮点型,范围[-360,360] 精度,小数点后两位
self.pDoubleValidator=QDoubleValidator(self)
self.pDoubleValidator.setRange(-360,360)
self.pDoubleValidator.setNotation(QDoubleValidator.StandardNotation)
self.pDoubleValidator.setDecimals(2)
#字母和数字
self.reg=QRegExp("[a-zA-Z0-9]+$")
self.pValidator=QRegExpValidator(self)
self.pValidator.setRegExp(self.reg)
#设置验证器
self.pIntLineEdit.setValidator(self.pIntValidator)
self.pDoubleLineEdit.setValidator(self.pDoubleValidator)
self.pValidatorLineEdit.setValidator(self.pValidator)
if __name__=="__main__":
app=QApplication(sys.argv)
win=lineEditDemo()
win.show()
sys.exit(app.exec_())
- QTextEdit:该控件是一个 多行内容文本编辑框。
#QTextEdit格式
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QApplication,QWidget,QTextEdit,QVBoxLayout,QPushButton
import sys
class TextEditDemo(QWidget):
def __init__(self,parent=None):
super(TextEditDemo,self).__init__(parent)
self.setWindowTitle("QTextEdit 例子")
self.resize(300, 270)
self.initUI()
self.addWidgets()
self.SignalSlot()
def initUI(self):
self.textEdit=QTextEdit()
self.btnPress1=QPushButton("显示文本")
self.btnPress2=QPushButton("显示HTML")
self.layout=QVBoxLayout()
def addWidgets(self):
self.layout.addWidget(self.textEdit)
self.layout.addWidget(self.btnPress1)
self.layout.addWidget(self.btnPress2)
self.setLayout(self.layout)
def SignalSlot(self):
self.btnPress1.clicked.connect(self.btnPress1_clicked)
self.btnPress2.clicked.connect(self.btnPress2_clicked)
def btnPress1_clicked(self):
self.textEdit.setPlainText("Hello Qt5!\n 单机")
def btnPress2_clicked(self):
self.textEdit.setHtml("<font color='red' size='6'><red>hello pyqt5! \n </font>")
if __name__=="__main__":
app=QApplication(sys.argv)
win=TextEditDemo()
win.show()
sys.exit(app.exec_())