7-16(pyqt线程、控件等)

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()
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值