QT原生是C++,pyqt基于python语言。
安装一个PyUIC,一个Qt Designer
点击Qt Designer可以出来ui配置页面,和qt原生IDE基本一样
上面操作会生成.ui文件,选中此文件,点击PyUIC,会生成对应的py文件,尽量不要修改这个py文件,因为每次使用pyuic都会和cubemx一样覆盖掉之前的修改,可以新建另外一个py文件,在那个里面导入调用,调用方法如下:
import sys
import threading
import time
import schedule
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsOpacityEffect
from ST_UPPER import Ui_SCS_TOOL
from PyQt5 import QtCore, QtGui, QtWidgets, QtTest
from 设备连接测试 import Ui_Dialog as Dev_Conn_Test_ui
class MyMainWindow(QMainWindow, Ui_SCS_TOOL):
def __init__(self):
super(MyMainWindow, self).__init__()
self.setupUi(self)
def UI_Dev_Conn_Test(self, label): #设备连接测试
self.dialog = QtWidgets.QDialog()
ui = Dev_Conn_Test_ui()
ui.setupUi(self.dialog)
# 弹出对话框并等待用户关闭
if self.dialog.exec_() == QtWidgets.QDialog.Accepted:
MAC_text = ui.lineEdit_MAC.text()
print(MAC_text, len(MAC_text))
使用time.sleep()会进行阻塞式延时,整个GUI会被卡住,而且遇到了一些逻辑混乱的问题,可以使用QtTest.QTest.qWait()进行替代,实现类似非阻塞式延时
闪烁用的定时器要有触发口和依附的逻辑,建议使用schedule,使用起来更方便,但是如果当前main不是一个循序逻辑的话(一般这种带ui的不是),还需要开一个线程来运行schedule.run_pending(),想停止的话调用schedule.clear()
在ui上放一个QLabel,在属性的styleSheet中输入border-radius:25px;background-color:yellow\n,就会生成一个黄色颜色的圆,圆的大小是50(geometry中的高度和宽度),这个50和25px必需是2倍关系,否则不圆
槽函数可以直接在ui中添加,点击工具栏的“编辑信号\槽”即可进行拖拽式配置,但是试了半天,不能将某个qlabel对象作为参数传给这个槽函数,所以只能将使用pyuic中生成的槽函数注释,重新绑定,例
删除生成文件中的 self.pushButton_Prog_Config.clicked.connect(SCS_TOOL.UI_Prog_Config)
在个人文件中添加 self.pushButton_Prog_Config.clicked.connect(lambda: self.UI_Prog_Config(self.label_Prog_Config))
上述中的self.label_Prog_Config就是qlabel对象,这样可以将按钮和qlabel绑定了,但是每次调用pyuic都要记得注释,否则会调用两次槽函数
锁定是button.setEnabled(False) 按钮会变灰
解锁是button.setEnabled(True)
如果是配置窗口的全部按钮:
for button in self.findChildren(QtWidgets.QPushButton):
button.setEnabled(False)
注意网上提到的一些方法是原生qt的,好多是C++语法的,不能使用