PyQt5学习笔记二----组件---窗口、控件

15 篇文章 0 订阅
  • 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_())


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值