pyqt+python之二进制生肖占卜

目录

一、引言

二、GUI界面设计

1.效果演示

2.相关提示

3.界面设计.py

三、主要程序详解

1.导入相关模块

2.初始化设置

3.组内判断

4.猜测过程

四、总程序代码


一、引言

在数字时代,传统文化与编程语言的碰撞总能迸发奇妙火花。本项目以PyQt+Python为技术载体,将古老的十二生肖文化与二进制算法相结合,打造一款互动占卜工具。用户通过图形化界面判断,系统会将其自动转换为二进制代码并推算生肖。既是对数理思维的现代化诠释,也是对PyQt事件驱动模型与Python数据处理能力的趣味实践。

二、GUI界面设计

使用PyQt5进行界面的搭建,界面如下:

初始界面搭建采用极简风格。用户通过四次选择,在对应四个组别中分别判断是否存在自身属相,从而给出四个存在与否的答案,最终点击“猜!”,即可弹出计算机所预测的属相。

1.效果演示

以属猴为例:第一组和第四组中均存在“猴”,第二组和第三组中不存在“猴”,则由第一组到第四组分别选择“存在”、“不存在”、“不存在”、“存在”,最后程序通过这四次答案给出的结果同样是“猴”,则猜测正确,其他生肖同理。

但当未选择选项时,或存在空白选项时,会有“有空余选项未选择!”的提示;当均选择“存在”或“不存在”时(当然也存在其他情况,后面进行详细解释),也会出现“请按照实际情况进行选择!”的提示(因为按照组别内容,确实不满足条件,肯定是用户有意选错)。

2.相关提示

3.界面设计.py

通过pyuic5产生的GUI界面代码UI_shengxiao.py如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'UI_shengxiao.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.setEnabled(True)Form.resize(600, 420)Form.setMinimumSize(QtCore.QSize(600, 420))Form.setMaximumSize(QtCore.QSize(600, 420))icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap(":/image1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)Form.setWindowIcon(icon)self.label_5 = QtWidgets.QLabel(Form)self.label_5.setGeometry(QtCore.QRect(370, 10, 141, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)self.label_5.setFont(font)self.label_5.setObjectName("label_5")self.label_8 = QtWidgets.QLabel(Form)self.label_8.setGeometry(QtCore.QRect(190, 10, 131, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(18)font.setBold(False)font.setWeight(50)self.label_8.setFont(font)self.label_8.setObjectName("label_8")self.label_10 = QtWidgets.QLabel(Form)self.label_10.setGeometry(QtCore.QRect(450, 0, 71, 51))self.label_10.setText("")self.label_10.setPixmap(QtGui.QPixmap(":/image1.png"))self.label_10.setObjectName("label_10")self.label = QtWidgets.QLabel(Form)self.label.setGeometry(QtCore.QRect(30, 80, 71, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)self.label.setFont(font)self.label.setObjectName("label")self.label_3 = QtWidgets.QLabel(Form)self.label_3.setGeometry(QtCore.QRect(140, 60, 351, 81))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(36)self.label_3.setFont(font)self.label_3.setFrameShadow(QtWidgets.QFrame.Sunken)self.label_3.setObjectName("label_3")self.label_2 = QtWidgets.QLabel(Form)self.label_2.setGeometry(QtCore.QRect(30, 160, 71, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)self.label_2.setFont(font)self.label_2.setObjectName("label_2")self.label_4 = QtWidgets.QLabel(Form)self.label_4.setGeometry(QtCore.QRect(30, 240, 71, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)self.label_4.setFont(font)self.label_4.setObjectName("label_4")self.label_6 = QtWidgets.QLabel(Form)self.label_6.setGeometry(QtCore.QRect(30, 320, 71, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)self.label_6.setFont(font)self.label_6.setObjectName("label_6")self.label_7 = QtWidgets.QLabel(Form)self.label_7.setGeometry(QtCore.QRect(140, 140, 351, 81))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(36)self.label_7.setFont(font)self.label_7.setObjectName("label_7")self.label_9 = QtWidgets.QLabel(Form)self.label_9.setGeometry(QtCore.QRect(140, 220, 351, 81))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(36)self.label_9.setFont(font)self.label_9.setObjectName("label_9")self.label_11 = QtWidgets.QLabel(Form)self.label_11.setGeometry(QtCore.QRect(140, 300, 351, 81))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(36)self.label_11.setFont(font)self.label_11.setObjectName("label_11")self.label_12 = QtWidgets.QLabel(Form)self.label_12.setGeometry(QtCore.QRect(20, 60, 481, 71))self.label_12.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_12.setText("")self.label_12.setObjectName("label_12")self.label_13 = QtWidgets.QLabel(Form)self.label_13.setGeometry(QtCore.QRect(20, 140, 481, 71))self.label_13.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_13.setText("")self.label_13.setObjectName("label_13")self.label_14 = QtWidgets.QLabel(Form)self.label_14.setGeometry(QtCore.QRect(20, 220, 481, 71))self.label_14.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_14.setText("")self.label_14.setObjectName("label_14")self.label_15 = QtWidgets.QLabel(Form)self.label_15.setGeometry(QtCore.QRect(20, 300, 481, 71))self.label_15.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_15.setText("")self.label_15.setObjectName("label_15")self.pushButton = QtWidgets.QPushButton(Form)self.pushButton.setGeometry(QtCore.QRect(140, 380, 331, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(12)self.pushButton.setFont(font)self.pushButton.setObjectName("pushButton")self.radioButton = QtWidgets.QRadioButton(Form)self.radioButton.setGeometry(QtCore.QRect(520, 80, 89, 16))self.radioButton.setAutoExclusive(True)self.radioButton.setObjectName("radioButton")self.radioButton_2 = QtWidgets.QRadioButton(Form)self.radioButton_2.setGeometry(QtCore.QRect(520, 100, 89, 16))self.radioButton_2.setAutoExclusive(True)self.radioButton_2.setObjectName("radioButton_2")self.radioButton_3 = QtWidgets.QRadioButton(Form)self.radioButton_3.setGeometry(QtCore.QRect(520, 160, 89, 16))self.radioButton_3.setAutoExclusive(True)self.radioButton_3.setObjectName("radioButton_3")self.radioButton_4 = QtWidgets.QRadioButton(Form)self.radioButton_4.setGeometry(QtCore.QRect(520, 180, 89, 16))self.radioButton_4.setAutoExclusive(True)self.radioButton_4.setObjectName("radioButton_4")self.radioButton_5 = QtWidgets.QRadioButton(Form)self.radioButton_5.setGeometry(QtCore.QRect(520, 240, 89, 16))self.radioButton_5.setAutoExclusive(True)self.radioButton_5.setObjectName("radioButton_5")self.radioButton_6 = QtWidgets.QRadioButton(Form)self.radioButton_6.setGeometry(QtCore.QRect(520, 260, 89, 16))self.radioButton_6.setAutoExclusive(True)self.radioButton_6.setObjectName("radioButton_6")self.radioButton_7 = QtWidgets.QRadioButton(Form)self.radioButton_7.setGeometry(QtCore.QRect(520, 320, 89, 16))self.radioButton_7.setAutoExclusive(True)self.radioButton_7.setObjectName("radioButton_7")self.radioButton_8 = QtWidgets.QRadioButton(Form)self.radioButton_8.setGeometry(QtCore.QRect(520, 340, 89, 16))self.radioButton_8.setAutoExclusive(True)self.radioButton_8.setObjectName("radioButton_8")self.label_15.raise_()self.label_14.raise_()self.label_13.raise_()self.label_12.raise_()self.label_5.raise_()self.label_8.raise_()self.label_10.raise_()self.label.raise_()self.label_3.raise_()self.label_2.raise_()self.label_4.raise_()self.label_6.raise_()self.label_7.raise_()self.label_9.raise_()self.label_11.raise_()self.pushButton.raise_()self.radioButton.raise_()self.radioButton_2.raise_()self.radioButton_3.raise_()self.radioButton_4.raise_()self.radioButton_5.raise_()self.radioButton_6.raise_()self.radioButton_7.raise_()self.radioButton_8.raise_()self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Cai_shengxiao"))self.label_5.setText(_translate("Form", "Designed By"))self.label_8.setText(_translate("Form", "生肖猜猜看"))self.label.setText(_translate("Form", "第一组"))self.label_3.setText(_translate("Form", "狗 羊 猴 鸡 猪 狗"))self.label_2.setText(_translate("Form", "第二组"))self.label_4.setText(_translate("Form", "第三组"))self.label_6.setText(_translate("Form", "第四组"))self.label_7.setText(_translate("Form", "龙 蛇 兔 猪 马 龙"))self.label_9.setText(_translate("Form", "牛 虎 狗 马 蛇 鸡"))self.label_11.setText(_translate("Form", "马 狗 猴 虎 鼠 龙"))self.pushButton.setText(_translate("Form", "猜!"))self.radioButton.setText(_translate("Form", "存在"))self.radioButton_2.setText(_translate("Form", "不存在"))self.radioButton_3.setText(_translate("Form", "存在"))self.radioButton_4.setText(_translate("Form", "不存在"))self.radioButton_5.setText(_translate("Form", "存在"))self.radioButton_6.setText(_translate("Form", "不存在"))self.radioButton_7.setText(_translate("Form", "存在"))self.radioButton_8.setText(_translate("Form", "不存在"))
import ziyuan_rc

三、主要程序详解

1.导入相关模块

import sys
from UI_shengxiao import *
from PyQt5.QtWidgets import QApplication, QWidget, QButtonGroup# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

导入前端页面设计文件:UI_shengxiao.py;不懂为啥需要导入Qtcore的,请看一键曝光:Python+PyQt实现的文件目录透视镜

2.初始化设置

    def __init__(self):super(QWidget, self).__init__()self.setupUi(self)self.radioButton.clicked.connect(self.yizu)self.radioButton_2.clicked.connect(self.yizu)self.radioButton_3.clicked.connect(self.erzu)self.radioButton_4.clicked.connect(self.erzu)self.radioButton_5.clicked.connect(self.sanzu)self.radioButton_6.clicked.connect(self.sanzu)self.radioButton_7.clicked.connect(self.sizu)self.radioButton_8.clicked.connect(self.sizu)self.pushButton.clicked.connect(self.cai)self.group1 = QButtonGroup()self.group1.addButton(self.radioButton)self.group1.addButton(self.radioButton_2)self.group2 = QButtonGroup()self.group2.addButton(self.radioButton_3)self.group2.addButton(self.radioButton_4)self.group3 = QButtonGroup()self.group3.addButton(self.radioButton_5)self.group3.addButton(self.radioButton_6)self.group4 = QButtonGroup()self.group4.addButton(self.radioButton_7)self.group4.addButton(self.radioButton_8)self.result_1 = '2'self.result_2 = '2'self.result_3 = '2'self.result_4 = '2'self.jieguo  = ['0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100']self.shengxiao = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪']

首先将radio button按组绑定于不同的函数;因所有radio button在默认情况下是互斥的,即只能单选,不能显示多选效果,所以建立button分组体系将8个radio button分为四组,在每一组中的两两radio button均是互斥的,可以单选;接着定义4个变量结果的初始值为2(不是0和1均可,为后续方便操作,这里使用str类型,而不是int整型);最后建立映射列表jieguo和shengxiao,两者根据索引是一一对应的关系(当然也可以使用字典)。

3.组内判断

    def yizu(self):if (self.radioButton.isChecked() == True) and (self.radioButton_2.isChecked() == False):self.result_1 = '1'if (self.radioButton.isChecked() == False) and (self.radioButton_2.isChecked() == True):self.result_1 = '0'def erzu(self):if (self.radioButton_3.isChecked() == True) and (self.radioButton_4.isChecked() == False):self.result_2 = '1'if (self.radioButton_3.isChecked() == False) and (self.radioButton_4.isChecked() == True):self.result_2 = '0'def sanzu(self):if (self.radioButton_5.isChecked() == True) and (self.radioButton_6.isChecked() == False):self.result_3 = '1'if (self.radioButton_5.isChecked() == False) and (self.radioButton_6.isChecked() == True):self.result_3 = '0'def sizu(self):if (self.radioButton_7.isChecked() == True) and (self.radioButton_8.isChecked() == False):self.result_4 = '1'if (self.radioButton_7.isChecked() == False) and (self.radioButton_8.isChecked() == True):self.result_4 = '0'

四个组判断结构一致,对属于各自的两个radio button选择状态分别进行判断:如果选择第一个radio button,不选后一个radio button,则为“存在”,更新result值为“1”,表示用户属相在对应组别中“存在”;否则更新result值为“0”,表示用户属相在对应组别中“不存在”。

4.猜测过程

    def cai(self):if (self.result_1 == '2') or (self.result_2 == '2') or (self.result_1 == '3') or (self.result_4 == '2'):QtWidgets.QMessageBox.critical(self, "提示", "有空余选项未选择!")else:zongjieguo = self.result_1+self.result_2+self.result_3+self.result_4# print(zongjieguo)if zongjieguo in self.jieguo:shengxiao = self.shengxiao[self.jieguo.index(zongjieguo)]QtWidgets.QMessageBox.information(self, "成功", "你的生肖是" +shengxiao)else:QtWidgets.QMessageBox.critical(self, "提示", "请按照实际情况进行选择!")

result值一旦有一个为初始值2的话,即证明用户未对某个组别进行判断选择,因此提示用户“有空余选项未选择!”;否则,将4个result值进行拼接,得到4位二进制数(只不过是用字符串形式表示);因4位二进制数能够表示的结果有16种,而生肖只有12种,所以在此还需要判断这四位二进制数是否在jieguo中,从而剔除0000,1101,1110,1111这四种结果;最后根据jieguo索引对应生肖,并成功输出。

四、总程序代码

import sys
from UI_shengxiao import *
from PyQt5.QtWidgets import QApplication, QWidget, QButtonGroup# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)class login_interface(QWidget, Ui_Form):def __init__(self):super(QWidget, self).__init__()self.setupUi(self)self.radioButton.clicked.connect(self.yizu)self.radioButton_2.clicked.connect(self.yizu)self.radioButton_3.clicked.connect(self.erzu)self.radioButton_4.clicked.connect(self.erzu)self.radioButton_5.clicked.connect(self.sanzu)self.radioButton_6.clicked.connect(self.sanzu)self.radioButton_7.clicked.connect(self.sizu)self.radioButton_8.clicked.connect(self.sizu)self.pushButton.clicked.connect(self.cai)self.group1 = QButtonGroup()self.group1.addButton(self.radioButton)self.group1.addButton(self.radioButton_2)self.group2 = QButtonGroup()self.group2.addButton(self.radioButton_3)self.group2.addButton(self.radioButton_4)self.group3 = QButtonGroup()self.group3.addButton(self.radioButton_5)self.group3.addButton(self.radioButton_6)self.group4 = QButtonGroup()self.group4.addButton(self.radioButton_7)self.group4.addButton(self.radioButton_8)self.result_1 = '2'self.result_2 = '2'self.result_3 = '2'self.result_4 = '2'self.jieguo  = ['0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100']self.shengxiao = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪']def yizu(self):if (self.radioButton.isChecked() == True) and (self.radioButton_2.isChecked() == False):self.result_1 = '1'if (self.radioButton.isChecked() == False) and (self.radioButton_2.isChecked() == True):self.result_1 = '0'def erzu(self):if (self.radioButton_3.isChecked() == True) and (self.radioButton_4.isChecked() == False):self.result_2 = '1'if (self.radioButton_3.isChecked() == False) and (self.radioButton_4.isChecked() == True):self.result_2 = '0'def sanzu(self):if (self.radioButton_5.isChecked() == True) and (self.radioButton_6.isChecked() == False):self.result_3 = '1'if (self.radioButton_5.isChecked() == False) and (self.radioButton_6.isChecked() == True):self.result_3 = '0'def sizu(self):if (self.radioButton_7.isChecked() == True) and (self.radioButton_8.isChecked() == False):self.result_4 = '1'if (self.radioButton_7.isChecked() == False) and (self.radioButton_8.isChecked() == True):self.result_4 = '0'def cai(self):if (self.result_1 == '2') or (self.result_2 == '2') or (self.result_1 == '3') or (self.result_4 == '2'):QtWidgets.QMessageBox.critical(self, "提示", "有空余选项未选择!")else:zongjieguo = self.result_1+self.result_2+self.result_3+self.result_4# print(zongjieguo)if zongjieguo in self.jieguo:shengxiao = self.shengxiao[self.jieguo.index(zongjieguo)]QtWidgets.QMessageBox.information(self, "成功", "你的生肖是" +shengxiao)else:QtWidgets.QMessageBox.critical(self, "提示", "请按照实际情况进行选择!")if __name__ == '__main__':app = QApplication(sys.argv)w = login_interface()w.show()sys.exit(app.exec_())

欢迎留言沟通交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921798.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能-python-深度学习-经典网络模型-LeNets5

文章目录LeNet-5(详解)—— 从原理到 PyTorch 实现(含训练示例)简介LeNet-5 的核心思想LeNet-5 逐层结构详解逐层计算举例📌 输入层📌 C1 卷积层📌 S2 池化层📌 C3 卷积层&#x1f4…

机器视觉的手机柔性屏贴合应用

在智能手机制造领域,柔性屏逐渐成为智能手机的主流选择,柔性屏因其轻便、易于弯曲的特性,已成为现代电子设备的重要组成部分,但同时也带来了前所未有的制造挑战。柔性屏与传统刚性玻璃屏有本质区别,它容易形变&#xf…

贪心算法应用:数字孪生同步问题详解

Java中的贪心算法应用:数字孪生同步问题详解 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。下面我将全面详细地讲解贪心算法在数字孪生同步问题中的应用。…

UOS20系统安装与 SSH/XRDP 远程访问功能配置指南

UOS20系统安装与 SSH/XRDP 远程访问功能配置指南 一、UOS 20 系统安装​ ​1. 下载系统镜像​ 访问统信官网下载 UOS 20 专业版镜像(推荐适配当前硬件的版本): https://www.chinauos.com/resource/download-professional 2. 系统安装与硬件配…

【Python】S1 基础篇 P5 字典模块指南

目录字典的本质与底层实现基础语法结构使用字典访问字典中的值添加键值对修改字典中的值删除键值对使用 get() 来访问值遍历字典遍历所有键值对遍历字典中的所有键遍历字典中的所有值嵌套字典列表在字典中存储列表字典(Dictionary)是Python中灵活且强大的…

计算机视觉之多模板匹配

简介 计算机视觉第一课opencv(四)保姆级教学 之前说过模糊匹配只是对于单个目标进行匹配,今天我们就来学习一下如何对多个目标进行匹配 一、多目标匹配 对于这个图片我们要匹配下面那个箭头,我们可以发现图中是有两个位置相同的…

封装日期选择器组件,带有上周,下周按钮

ui图组件代码如下&#xff1a; <template><div><el-date-pickerv-model"dateRange"type"daterange"align"right"size"mini":editable"false"unlink-panelsrange-separator"至"start-placeholder&q…

基于SpringBoot+MYSQL开发的AI智能大数据医疗诊断平台

角色&#xff1a; 管理员、医生、居民 技术&#xff1a; SpringBoot、MyBatis、MySQL、Shiro、Beetl、Swagger、jQuery、Bootstrap 核心功能&#xff1a; 这是一个基于SpringBoot的社区医疗管理平台&#xff0c;旨在为管理员提供用户、角色、部门、菜单、日志等系统管理功能&am…

【MFC 小白日记】对话框编辑器里“原型图像”到底要不要勾?3 分钟看懂!

摘要&#xff1a;本文解析了MFC中Picture Control的"原型图像(Prototype Image)"属性的真实作用。该属性仅在设计时提供可视化的占位图预览&#xff0c;方便UI布局&#xff0c;运行时不会影响程序表现。文章通过对比实验验证&#xff0c;勾选后会在对话框编辑器中显示…

微信开放平台第三方平台,可以管理多个微信小程序

大家好&#xff0c;我是小悟。 这个系统可以帮助服务商更好地管理多个商家小程序&#xff0c;无需管理多个商家小程序的账号密码或者appId和secret&#xff0c;大大提升效率。 不需要频繁登录小程序后台就能完成上传代码、认证、备案、提交代码审核、发布小程序等操作。 这里录…

Java全栈学习笔记32

-- drop table t_stu;-- unique 唯一约束的列允许为null-- 如果在之后的操作中。需要某列必须为key&#xff0c;才能做一些操作的情况下。也可以使用唯一约束代替主键约束-- create table t_stu(-- studId int,-- tel varchar(11) unique,-- sex varchar(1),-- addr va…

linux升级系统,重启出现Minimal BASH-like line editingis supported

文章目录一.问题背景二.解决步骤2.1确认系统分区2.2手动引导2.3 重建grub引导2.4 还原软件包 一.问题背景 闲来无事&#xff0c;把ubuntu25.04通过sudo do-release-upgrade命令升级到了ubuntu25.10.在升级的过程会出现以下问题 1.自动替换flatpak程序为snap2.请求是否清除旧依赖…

type(类型别名)和 interface的区别和最佳实践

核心结论在大多数情况下&#xff0c;它们可以互换使用&#xff0c;都能描述对象的结构。它们的区别更多在于设计和扩展能力上。主要区别总结表特性interface (接口)type (类型别名)扩展方式使用 extends 继承interface A extends B {}使用 & 交叉类型type A B & C合并…

vscode中使用git、githup的基操

一、git提交 配置账户密码 查看用户信息 git config --global user.name # 查看用户名 git config --global user.email # 查看邮箱账户配置 # 设置全局用户名和邮箱 git config --global user.name "你的用户名" git config --global user.email "你的邮箱&q…

jsBridge接入流程

import deviceInfo from ./deviceInfo import { setRefreshToken } from ./token// 设备判断 const u navigator.userAgent export const isAndroid u.indexOf(Android) > -1 || u.indexOf(Adr) > -1 export const isIOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/)…

【C++】19. 封装红⿊树实现set和map

文章目录一、源码及框架分析二、模拟实现map和set1、insert的实现2、iterator的实现3、map⽀持[ ]4、模拟实现的完整源代码1&#xff09;RBTree.h2&#xff09;Myset.h3&#xff09;Mymap.h4&#xff09;Test.cpp一、源码及框架分析 SGI-STL30版本源代码&#xff0c;map和set的…

面试不会问题

1. 什么是表锁&#xff1f;什么是行锁&#xff1f;什么情况下会使用表锁&#xff1f;InnoDB引擎通过“索引”实现行锁&#xff08;锁定满足条件的行&#xff09;&#xff0c;但如果操作无法通过索引定位行&#xff0c;会导致行锁失效&#xff0c;进而升级为表锁。常见的表现为&…

达梦数据库-用户,权限,角色

达梦数据库-用户,权限,角色 在达梦数据库(DM8)中,用户(User)、权限(Privilege)和角色(Role) 是数据库安全体系的核心组成部分,用于控制谁可以访问数据库、能访问哪些对象以及能执行哪些操作。 下面为你提供一份全面、详细、结构化的说明,帮助你深入理解达梦数据…

uniapp原生插件 TCP Socket 使用文档

uniapp原生插件 TCP Socket 使用文档 试了插件市场几个TCP Socket插件都不能实现监听服务器主动断开&#xff0c;于是闲来无事就开发了一款&#xff0c;本插件是一个基于 Netty 实现的 TCP 通信模块&#xff0c;用于在 UniApp 插件中提供 TCP 连接、数据发送和连接管理功能。以…

VM中CentOS 7密码重置

重启虚拟机点击e进入内核处理向下划找到UTF-8在后面输入rd.breakctrl X进入单用户模式mount -o remount,rw/sysroot进行挂盘 chroot /sysroot访问系统&#xff0c;并使用passwd修改root密码 出现乱码 输入LANGen touch /.autorelabel 保存配置 exit exit退出等待系统重新打开&…