小渣渣学习笔记 python day42【PyQt5 QLabel QLineEdit 2】


#手工实现QLabel控件【以下整段代码都可以放在py文件中运行,首先要确保安装了PyQt5,手工码代码实现真的是浪费生命啊!!QtDesigner分分钟搞定!不过拖拽控件设计的页面是死的,如果动态创建控件还是要靠代码实现】
#QLabel常用信号: linkHovered (鼠标滑过) linkActivated(鼠标单击label)

from PyQt5.QtWidgets import QMainWindow,QWidget,QApplication,QLabel,QVBoxLayout #垂直布局
from PyQt5.QtGui import QPalette,QPixmap #调色板 #图片
from PyQt5.QtCore import Qt #这里引用的都是类,Qt放颜色、字体等常量  【怪不得,QtDesigner 每次都自动引用以下三个模块:from PyQt5 import QtCore,QtGui,QtWidgets】
import sys
class QLabelDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.initUi()
    def initUi(self):
        label1 = QLabel(self) #第一个标签设置背景色
        label2 = QLabel(self) #第二个用作超链接
        label3 = QLabel(self) #第三个作为图片标签【强大】
        label4 = QLabel(self) #第四个用作超链接,链接到浏览器

        label1.setText('这是一个文本标签')
        label1.setAutoFillBackground(True) #setAutoFillBackground设置背景色填充范围
        paletee = QPalette() #实例化一个调色板 QPalette
        paletee.setColor(QPalette.Window,Qt.green) #调色板设置颜色,背景色,2个参数
        label1.setPalette(paletee) #把调色板和标签label1绑定
        label1.setAlignment(Qt.AlignCenter) #设置文字位置

        label2.setText('<a href="#"> 欢迎使用Python Gui程序</a>') #label2是个超链接

        label3.setAlignment(Qt.AlignCenter) #居中
        label3.setToolTip('这是一个图片标签')
        label3.setPixmap(QPixmap('python.jpg')) #镶嵌图片

        label4.setText('<a href="https://www.jd.com/">京东</a>') #超链接
        label4.setOpenExternalLinks(True) #设置超链接打开setOpenExternalLinks,以系统默认浏览器打开相关链接href,如果设置False调用槽函数
        label4.setAlignment(Qt.AlignRight)
        label4.setToolTip('这是一个超链接')

        #垂直布局
        vbox = QVBoxLayout()
        vbox.addWidget(label1)
        vbox.addWidget(label2)
        vbox.addWidget(label3)
        vbox.addWidget(label4)

        label2.linkHovered.connect(self.linkHovered)  #绑定信号槽
        label4.linkActivated.connect(self.linkClicked) #绑定信号槽

        self.setLayout(vbox) #设置布局
        self.setWindowTitle('QLabel控件演示') #设置窗口标题

    def linkHovered(self):
        print('鼠标滑过label2信号') #控制台打印结果

    def linkClicked(self):
        print('鼠标单击label4信号')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainFrame = QLabelDemo()
    mainFrame.show()
    sys.exit(app.exec_())

python qlabel python qlabel拖拽_Qt

#QLabel 控件与其他控件的伙伴关系
from PyQt5.QtWidgets import *
import sys
class QLabelBuddy(QDialog):#这里集成对话框类QDialog 对话框没有菜单栏
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('')

        label1 = QLabel('&Name',self) #设置第一对控件,账号,QLabel里第一个参数是标签内容,加了&符号,并且绑定了伙伴关系setBuddy后就可以Alt+第一个字母N 快速定位
        lineEdit1 = QLineEdit(self)
        label1.setBuddy(lineEdit1)

        label2 = QLabel('&Password', self) #设置第二对控件,密码 Alt+P快速定位到 lineEdit2
        lineEdit2 = QLineEdit(self)
        label2.setBuddy(lineEdit2)

        #增加2个按钮 确认和退出
        btnOK = QPushButton('&OK')
        btnCANCEL = QPushButton('&CANCEL')

        layout = QGridLayout(self) #设置栅格布局

        #addWidget方便以后动态的添加控件
        layout.addWidget(label1,0,0) #把第一个标签添加到第一行(0)第一个位置(0)
        layout.addWidget(lineEdit1,0,1,1,2)#把第第一个标签绑定的文本框放在 第一行(0)第二个(1)位置,并且占用第二个(1)位置的2个列的宽度
        layout.addWidget(label2,1,0)
        layout.addWidget(lineEdit2,1,1,1,2)
        layout.addWidget(btnOK,2,1) #放在第三行第二个位置
        layout.addWidget(btnCANCEL,2,2)#放在第三行第三个位置
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QLabelBuddy()
    main.show()
    sys.exit(app.exec_())

python qlabel python qlabel拖拽_控件_02

#QLineEdit 输入单行文本内容
#4种回显模式
    #1、Normal 常规
    #2、NoEcho 不显示,比如linux输入密码,但是不显示
    #3、Password 显示星号或者点 ****
    #4、PasswordEchoOnEdit 先输入一个字母,然后再把字母变成星号或者点
from PyQt5.QtWidgets import *
import sys
class QLineEditDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('文本框输入回显')

        formLayout = QFormLayout(self) #创建一个formlayout 布局对象

        normalLineEdit = QLineEdit() #创建4个文本框
        noEchoLineEdit = QLineEdit()
        passwordLineEdit= QLineEdit()
        passwordEchoOnEditLineEdit = QLineEdit()

        formLayout.addRow('Normal',normalLineEdit) #在formlayout布局里添加这4个文本框
        formLayout.addRow('NoEcho',noEchoLineEdit)
        formLayout.addRow('Password',passwordLineEdit)
        formLayout.addRow('PaswordEchoOnEdit',passwordEchoOnEditLineEdit)

        normalLineEdit.setPlaceholderText('Normal') #在文本框里设置默认内容 setPlaceholderText
        noEchoLineEdit.setPlaceholderText('NoEcho')
        passwordLineEdit.setPlaceholderText('Password')
        passwordEchoOnEditLineEdit.setPlaceholderText('PaswordEchoOnEdit')

        normalLineEdit.setEchoMode(QLineEdit.Normal) #设置文本框的 模式
        noEchoLineEdit.setEchoMode(QLineEdit.NoEcho)
        passwordLineEdit.setEchoMode(QLineEdit.Password)
        passwordEchoOnEditLineEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QLineEditDemo()
    main.show()
    sys.exit(app.exec_())

python qlabel python qlabel拖拽_python qlabel_03

#QLineEdit (校验器)限制输入
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator #校验整型 浮点型 和正则表达式(自定义规则)
from PyQt5.QtCore import QRegExp
import sys

class QLineEditValidator(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('QLineEditValidator')

        formLayout = QFormLayout(self)
        intLineEdit = QLineEdit()
        doubleLineEdit = QLineEdit()
        validateLineEdit = QLineEdit()

        formLayout.addRow('整数类型',intLineEdit)
        formLayout.addRow('浮点数型',doubleLineEdit)
        formLayout.addRow('数字和字母',validateLineEdit)

        intLineEdit.setPlaceholderText('整数类型')
        doubleLineEdit.setPlaceholderText('浮点数型')
        validateLineEdit.setPlaceholderText('数字和字母')

        intValidator = QIntValidator(self)
        intValidator.setRange(1,99) #1-99

        doubleValidator = QDoubleValidator(self)
        doubleValidator.setRange(-360,360) #-360到360 ,精度小数点后2位 #这里的校验有问题 366 可以输入
        doubleValidator.setNotation(QDoubleValidator.StandardNotation)
        doubleValidator.setDecimals(2) #2位

        reg = QRegExp('[a-zA-Z0-9]+$')
        validator = QRegExpValidator(self)
        validator.setRegExp(reg)

        intLineEdit.setValidator(intValidator)
        doubleLineEdit.setValidator(doubleValidator)
        validateLineEdit.setValidator(validator)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QLineEditValidator()
    main.show()
    sys.exit(app.exec_())

python qlabel python qlabel拖拽_Qt_04