#手工实现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_())
#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_())
#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_())
#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_())