1、对于python全局变量的改变
(1)这种情况下1,3为0,2为change
class Thread():
global flag
def run():
while True:
print "1:",flag
self.test()
print "3:",flag
...
def test():
flag = chage
print "2:",flag
__name__ == '__main__':
flag = 0
(2)这种情况下1、2、3为change
class Thread():
def run():
while True:
print "1:",flag
self.test()
print "3:",flag
...
def test():
global flag
flag = chage
print "2:",flag
__name__ == '__main__':
flag = 0
2、opencv-python 图片显示中文
import cv2
from PIL import Image,ImageDraw,ImageFont
font = ImageFont.truetype("./font/kai_GB2312.ttf", 40, encoding="utf-8") # 第一个参数为字体文件路径,第二个为字体大小
frame = Image.fromarray(frame)
draw = ImageDraw.Draw(frame) # 括号中为需要打印的canvas,这里就是在图片上直接打印
draw.text((left+5, bottom-32), name, (255, 255, 255), font=font) # 第一个参数为打印的坐标,第二个为打印的文本,第三个为字体颜色,第四个为字体
frame = np.array(frame)
3、PyQt QTableWidget的使用
https://blog.csdn.net/jia666666/article/details/81627589
from PyQt5.QtWidgets import QTableWidget,QFrame,QAbstractItemView
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt
#增加一个table
table = QTableWidget()
font = QFont('微软雅黑', 20)
font.setBold(True) #设置字体加粗
table.horizontalHeader().setFont(font) #设置表头字体
为font设置的字体样式
table.setFrameShape(QFrame.NoFrame) ##设置无表格的外框
table.horizontalHeader().setFixedHeight(50) ##设置表头高度
table.horizontalHeader().setSectionResizeMode(4,QHeaderView.Stretch)#设置第五列宽度自动调整,充满屏幕
table.horizontalHeader().setStretchLastSection(True) ##设置最后一列拉伸至最大
table.setSelectionMode(QAbstractItemView.SingleSelection) #设置只可以单选,可以使用ExtendedSelection进行多选
table.setSelectionBehavior(QAbstractItemView.SelectRows) #设置 不可选择单个单元格,只可选择一行。
table..horizontalHeader().resizeSection(0,200) #设置第一列的宽度为200
table.setColumnCount(5)##设置表格一共有五列
table.setHorizontalHeaderLabels(['id','姓名','年龄','学号','地址'])#设置表头文字
table.horizontalHeader().setSectionsClickable(False) #可以禁止点击表头的列
table.sortItems(1,Qt.DescendingOrder) #设置按照第二列自动降序排序
table.horizontalHeader().setStyleSheet('QHeaderView::section{background:green}')#设置表头的背景色为绿色
table.setColumnHidden(1,True)#将第二列隐藏
table.setEditTriggers(QAbstractItemView.NoEditTriggers) #设置表格不可更改
table.setSortingEnabled(True)#设置表头可以自动排序
4、PyQt5 pushbutton按钮
- 按键退出
self.pushButton3.clicked.connect(TabWidget.pushButtonA) #将按键与事件相连
......
#按键:退出的槽函数
def quit_system(self):
#sender 是发送信号的对象,此处发送信号的对象是button1按钮
sender = self.sender()
print( sender.text() + ' 被按下了' ,'退出系统!')
qApp = QtWidgets.QApplication.instance()
qApp.quit()
- 按键状态、使能
# self.pushButton.setCheckable(True) #保持该状态,但可点击
self.pushButton3.setEnabled(False) #非使能
self.pushButton3.setText("context")
text = self.pushButton3.text()
5、键盘响应
#键盘响应,按键A
def keyPressEvent(self, QKeyEvent): # 键盘某个键被按下时调用
global start_reconition
#参数1 控件
if QKeyEvent.key()== Qt.Key_A: #判断是否按下了A键
#key() 是普通键
start_reconition = 1
print'开始打卡!'
6、线程“槽函数”
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
class mywindow(QTabWidget,Ui_TabWidget): #这个窗口继承了用QtDesignner 绘制的窗口
def __init__(self):
super(mywindow,self).__init__()
self.setupUi(self)
self.videoprocessing() # 启动摄像头线程
def videoprocessing(self):
print("open camera")
th = Thread(self) #定义线程
th.changePixmap.connect(self.setImage) #显示在 Label中
th.testitem.connect(self.operate)
th.start() #开启显示进程
#槽函数
def setImage(self, image):
self.label.setPixmap(QPixmap.fromImage(image)) #label显示
def operate(self):
...
class Thread(QThread):#采用线程来播放视频
#定义连接信号变量
changePixmap = pyqtSignal(QtGui.QImage)
testitem = pyqtSignal()
#线程主函数
def run(self):
...
self.testitem.emit()
self.face_detect_recognition2()
...
def face_detect_recognition2(self):
...
self.changePixmap.emit(p)
7、按键弹出子窗口dialog
...
self.pushButton1.clicked.connect(TabWidget.showdialog) #将按键与事件相连
...
#与按钮:登录链接
def showdialog(self):
global dialog
global pNormalLineEdit
global pPasswordLineEdit
dialog = QtWidgets.QDialog()
dialog.setGeometry(QtCore.QRect(300, 300, 260, 160))
btn1 = QPushButton("确定", dialog)
btn1.move(20, 100)
btn2 = QPushButton("退出", dialog)
btn2.move(140, 100)
flo = QFormLayout()
pNormalLineEdit = QLineEdit()
pPasswordLineEdit = QLineEdit()
flo.addRow("Username", pNormalLineEdit)
flo.addRow("Password", pPasswordLineEdit)
pNormalLineEdit.setPlaceholderText("Normal")
pPasswordLineEdit.setPlaceholderText("Password")
pNormalLineEdit.setMaxLength(4)
pPasswordLineEdit.setMaxLength(4) #密码为四位
# 设置显示效果
pNormalLineEdit.setEchoMode(QLineEdit.Normal)
pPasswordLineEdit.setEchoMode(QLineEdit.Password) #密码隐藏
dialog.setLayout(flo)
btn1.clicked.connect(self.input_detect)
btn2.clicked.connect(dialog.close)
dialog.exec_()
7、子窗口实现用户输入并判断,确定后弹窗,点击弹窗后关闭子窗口
#用户在该函数下改密码和名字,相关定义见 global_define.py中 修改名字和密码
def input_detect(self):
name = pNormalLineEdit.text()
pwd = pPasswordLineEdit.text()
if name == gd.usr1:
if pwd == gd.pwd1:
self.text_ok()
else:
self.text_err()
dialog.close()
def text_ok(self):
text = QtWidgets.QMessageBox.about(self,"说明","验证通过") #弹窗
dialog.close()