1使用QT Designer绘制界面
1.1 安装和汉化
注意cmd使用管理员运行
pip install PyQt5
pip install PyQt5-tools
进入python3\Lib\site-packages\pyqt5_tools
找到translations目录,将文件拷贝到该目录下
打开designer.exe即可
1.2使用和生成.py
建立一个MainWindow或者QWidget,前者是一个窗体后者是一个页面,前者有菜单状态栏而后者没有。
image.png
输入信息框一般使用Line Edit,输出使用Text Brower,按钮使用Push Button,不可修改的信息显示使用Label,这些组件可以用容器包裹,方便位置摆放和对其。例如
image.png
完成后就导出,生产的格式是at_tool_main.ui,我们需要转化为python
pyuic5 -o at_tool_ui.py at_tool_main.ui
2 编写逻辑部分
下列例子仅仅是打开了生成的窗体,注意修改类参数,增加构造函数
# 窗体相关
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMessageBox,QMainWindow
from PyQt5.QtCore import QTimer
from at_tool_ui import Ui_MainWindow
from at_tool_cfg_ui import Ui_Form
class At_Tool(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super(At_Tool, self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = At_Tool()
win.show()
sys.exit(app.exec_())
按照目前的经验来看,觉得最好是不用修改ui生成的py界面文件,而是新建一个文件来作为他的逻辑部分。不然ui更新会重新生成py的界面文件,将会影响到之前在里面修改的代码。
还有就是不要在自己的界面进程中延时,不然会让界面卡主,应该新建一个进程来执行一些需要延时的功能,例如
# 建立一个线程来逐个发送
_thread.start_new_thread(self.send_cfg, ("send_cfg", 3, ) )
def send_cfg(self,threadName,delay):
send_data = "AT+DEVEUI=" +cfg_win.deveui+'\r\n'
self.ser.write(send_data.encode())
time.sleep(delay)
send_data = "AT+APPEUI=" +cfg_win.appeui+'\r\n'
self.ser.write(send_data.encode())
time.sleep(delay)
send_data = "AT+APPKEY=" +cfg_win.appkey+'\r\n'
self.ser.write(send_data.encode())
- textBrowser
添加显示信息
textBrowser.insertPlainText("lalalal"+"\n\n")
移动到文末
textBrowser.moveCursor(win.textBrowser.textCursor().End)
设置追加文字的颜色和大小
self.textBrowser.append("<font color='red' size=36> 123123 <font>")
- button
绑定按键和函数
class test(QtWidgets.QMainWindow,Ui_mqtt_tool_main):
def __init__(self):
super( test, self).__init__()
self.setupUi(self)
self.init()
def init(self):
# 打开按钮
self.bt_start.clicked.connect(self.mqtt_start_bt)
# 关闭按钮
self.bt_close.clicked.connect(self.mqtt_close_bt)
def mqtt_start_bt(self):
self.bt_start.setEnabled(False)
def mqtt_close_bt(self):
self.textBrowser.setText("")
- lineEdit
获取文本
theme = self.lineEdit_theme.text()
限制输入信息
#设置浮点数限制 范围0~86400,小数点1位
LE2Validator = QDoubleValidator(self)
LE2Validator.setRange(0, 86400)
LE2Validator.setNotation(QDoubleValidator.StandardNotation)
LE2Validator.setDecimals(1)
self.lineEdit_2.setValidator(LE2Validator)
# 限制为数字和字符
reg = QRegExp("[a-zA-Z0-9]+$")
LE1Validator = QRegExpValidator(self)
LE1Validator.setRegExp(reg)
self.lineEdit.setValidator(LE1Validator)
- 退出窗体时关闭所有线程
#重构退出函数
def closeEvent(self,event):
sys.exit(app.exec_())
网友评论