#用掩码限制QLineEdit控件的输入
# A ASCII字母字符是必须输入的(A-Z ,a-z)
# a ASCII字母字符是允许输入的,但不是必须的(A-Z,a-z)
# N ASCII字母字符是必须输入的(A-Z ,a-z ,0-9)
# n ASCII字母字符是允许输入的,但不是必须的(A-Z,a-z,0-9)
# X 任何字符都是必须输入的
# x 任何字符都是允许输入的 ,但不是必须的
# 9 必须输入(0-9)
# 0 允许输入,但不是必须的(0-9)
# D 必须输入(1-9)
# d 允许输入,但不是必须(1-9)
# # ASCII 数字字符和加减符号是允许输入的,但不是必需的
# H 十六进制格式字符是必须输入的(A-F,a-f,0-9)
# h 只能输入同上,但不是必须输入的
# B 二进制字符是必须输入的(0,1)
# b 允许输入二进制 但不是必须的,意思是可以为空
# > 所有字母字符都大写
# < 都小写
# ! 关闭大小写转换
# \ 使用\ 转义上面列出的字符
#掩码来控制文本框
from PyQt5.QtWidgets import *
import sys
class QLineEditMask(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('用掩码来控制文本框')
formlayout = QFormLayout()
lineEdit_ip = QLineEdit()
lineEdit_mac = QLineEdit()
lineEdit_date = QLineEdit()
lineEdit_license = QLineEdit()
lineEdit_ip.setInputMask('000.000.000.000;_') #只能输入0-9 蛋是 还要限定到最大 255 没有内容就显示分号后面的下划线
lineEdit_mac.setInputMask('HH:HH:HH:HH:HH:HH;_')
lineEdit_date.setInputMask('0000-00-00')
lineEdit_license.setInputMask('>AAAAA-AAAAA-AAAAA-AAAAA;#')
formlayout.addRow('ip地址',lineEdit_ip)
formlayout.addRow('mac地址',lineEdit_mac)
formlayout.addRow('日期掩码',lineEdit_date)
formlayout.addRow('许可证掩码',lineEdit_license)
self.setLayout(formlayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainFrame = QLineEditMask()
mainFrame.show()
sys.exit(app.exec_())
#QLineEdit 综合案例
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class QLineEditDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lineEdit1 = QLineEdit()
lineEdit1.setValidator(QIntValidator())
lineEdit1.setMaxLength(4) #不超过9999
lineEdit1.setAlignment(Qt.AlignRight)
lineEdit1.setFont(QFont('Arial',12))
lineEdit2 = QLineEdit()
lineEdit2.setValidator(QDoubleValidator(0.99,99.99,2))
lineEdit2.setAlignment(Qt.AlignRight)
lineEdit3 = QLineEdit()
lineEdit3.setInputMask('99_9999_999999;#')
lineEdit4 = QLineEdit()
lineEdit4.textChanged.connect(self.textChanged) #绑定信号与槽
lineEdit5 = QLineEdit()
lineEdit5.setEchoMode(QLineEdit.Password)
lineEdit6 = QLineEdit('hello')
lineEdit6.setReadOnly(True)
formlayout = QFormLayout()
formlayout.addRow('整数校验',lineEdit1)
formlayout.addRow('浮点数校验',lineEdit2)
formlayout.addRow('掩码校验',lineEdit3)
formlayout.addRow('文本编号',lineEdit4)
formlayout.addRow('密码回显',lineEdit5)
formlayout.addRow('只读',lineEdit6)
self.setLayout(formlayout)
self.setWindowTitle('QLineEdit综合案例')
#定义2个槽
def textChanged(self,text):
print('输入的内容:'+text)
def enterPress(self):
print('已输入内容')
if __name__ == '__main__':
app = QApplication(sys.argv)
mainFrame = QLineEditDemo()
mainFrame.show()
sys.exit(app.exec_())
#多行文本 QTextEdit控件
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class QTextEditDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('多行文本框使用')
self.textEdit = QTextEdit()
self.buttonText = QPushButton('显示文本')
self.buttonText.clicked.connect(self.onClick_ButtonText)
self.buttonHtml = QPushButton('显示Html')
self.buttonHtml.clicked.connect(self.onClick_ButtonHtml)
self.buttonText1 = QPushButton('获取文本')
self.buttonText1.clicked.connect(self.onClick_ButtonToText)
self.buttonHtml1 = QPushButton('获取Html')
self.buttonHtml1.clicked.connect(self.onClick_ButtonToHtml)
layout = QVBoxLayout() #垂直布局
layout.addWidget(self.textEdit)
layout.addWidget(self.buttonText)
layout.addWidget(self.buttonHtml)
layout.addWidget(self.buttonText1)
layout.addWidget(self.buttonHtml1)
self.setLayout(layout)
def onClick_ButtonText(self):
self.textEdit.setPlainText('hello world!')
def onClick_ButtonHtml(self):
self.textEdit.setHtml('<a href="#">hello world</a>')
def onClick_ButtonToText(self):
print(self.textEdit.toPlainText())
def onClick_ButtonToHtml(self):
print(self.textEdit.toHtml()) #这里不是单纯的显示了超链接 <a...内容,还放了很多包括<html>...等
if __name__ == '__main__':
app = QApplication(sys.argv)
mainFrame = QTextEditDemo()
mainFrame.show()
sys.exit(app.exec_())
#按钮控件QPushButton AToolButton QRadioButton QCheckBox 都继承自 QAbstractButton
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class QPushButtonDemo(QDialog):#对话框
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('按钮控件')
self.button1 = QPushButton('button1')
self.button1.setText('button1 haha')
self.button1.setCheckable(True) #设置了以后 就可以当做checkbox复选框来用,按一下选中,按钮颜色变化,再按一下,就变成普通颜色
self.button1.toggle() #toggle 是开关的意思
self.button1.clicked.connect(lambda:self.whitchButton(self.button1)) #这里用了一个lambda函数来绑定槽,connect里只能用函数名
self.button1.clicked.connect(self.buttonState)
# self.button1.clicked.connect(self.whitchButton) #这里不能直接把方法做connect的参数,因为whitchButton还要传参数btn进去
#文本前显示图像
self.button2 =QPushButton('button2 haha ')
self.button2.setIcon(QIcon(QPixmap('./python.jpg')))
self.button2.clicked.connect(lambda: self.whitchButton(self.button2))
#设置按钮不可用 setEnable
self.button3 = QPushButton('button3 ')
self.button3.setEnabled(False)
self.button4 = QPushButton('&button4 ')
self.button4.setDefault(True)
layout = QVBoxLayout()
layout.addWidget(self.button1)
layout.addWidget(self.button2)
layout.addWidget(self.button3)
layout.addWidget(self.button4)
self.setLayout(layout)
def buttonState(self):
if self.button1.isChecked():
print('按钮1被选中')
else:print('按钮1未被选中')
def whitchButton(self,btn):
print('被单击的按钮是<'+btn.text()+'>')
if __name__ == '__main__':
app = QApplication(sys.argv)
mainFrame = QPushButtonDemo()
mainFrame.show()
sys.exit(app.exec_())