QtDesigner程序设计逻辑,图来源于『嗡嗡』:https://www.wongwonggoods.com/author/admin/
将.ui文件转换为.py文件:
pyuic5 -x test.ui -o UI.py
检查UI.py文件是否如我们在QtDesigner上设计的一样:
python UI.py
之后编写controller.py文件,为界面上的我们加入的Widgets添加功能
之后执行controller.py文件验证:
python controller.py
我们一般使用上会使用 QTextEdit作为文字显示
使用 QPlainTextEdit 來进行文字 input 处理
我们可以使用QFileDialog 来开启每个作业系统的档案功能
安装cv2库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
controller.py函数封装思想
(就跟图书馆什么都有,只是你能不能有效率的快速找到你要的东西一样)
统一命名格式set, update:
1.set 开头的function:可以外部呼叫,为修改事件的开头
2.__update 开头的function:皆为private function,不可外部呼叫,只作为更新画面使用
主要分装这些函数,并遵守以下定义规则:
1.set_instance_name:使用者可以call,去修改一些想要的变化,并在此实作复杂功能与算法
2.__update_instance_name:private function,不希望使用者去call,主要只负责单纯的更新info,而不实作任何复杂功能或算法
利用QTimer来进行自动更新,QTimer 的使用方式很简单,主要我们需要设定一个timeout 时间,每经过一次timeout,我们的程式就会做一次指定的事情
QThread,也同样的是让主程式在执行的同时,能够同时有其他的支线任务可以独立运行!
UI.py文件如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test4.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(90, 100, 541, 231))
font = QtGui.QFont()
font.setFamily("Ubuntu Mono")
font.setPointSize(36)
self.label.setFont(font)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "TextLabel"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
controller.py文件如下:
#!usr/bin/python3
#! -*- coding:utf-8 -*-
# Teamplate
from PyQt5 import QtCore
from PyQt5.QtWidgets import QMainWindow, QFileDialog
from PyQt5.QtCore import QTimer
import time
import os
from UI import Ui_MainWindow
class MainWindow_controller(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setup_control()
def setup_control(self):
self.timer=QTimer() # init QTimer
self.timer.timeout.connect(self.run) # when timeout, do run one
self.timer.start(1) # start Timer, here we set '1 ms' while timeout one time
self.time_counter = 0 # init time counter
def run(self):
self.ui.label.setText(str(self.set_time_counter_format(self.time_counter))) # show time_counter(by format)
self.time_counter += 1
def set_time_counter_format(self, time_counter):
ms = time_counter % 1000
total_sec = max(0, (time_counter - ms)//1000)
hour = max(0, total_sec//3600)
minute = max(0, total_sec//60 - hour * 60)
sec = max(0, (total_sec - (hour * 3600) - (minute * 60)))
return f"{hour}:{minute:0>2}:{sec:0>2}.{ms:0>3}" # 我们抓住「:」冒号后的就是格式设定内容,「0」表示补0,「>」表示靠右,「2(3)」表示总共2(3)位
start.py文件如下:
#!usr/bin/python3
#! -*- coding:utf-8 -*-
# Teamplate
from PyQt5 import QtWidgets
from controller_timer import MainWindow_controller
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow_controller()
window.show()
sys.exit(app.exec_())
对视窗的控制:
只有缩小/关闭(取消放大)
Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint
只有放大/关闭(取消缩小)
Qt.WindowMaximizeButtonHint | Qt.WindowCloseButtonHint
只有关闭(取消放大缩小)
Qt.WindowCloseButtonHint