对加载到主窗体视中的所有坐标点的显示方式、计算地形三角网方式作了一个关联ini文件的设置子窗体,其中对设置各三维显示对象的显示颜色的设置采用的的色块拖放方式来设置,即将要设置的颜色方块拖入要设置的当前颜色方块中即可完成设置。可供选择的色块为全部PYTHON支持的颜色字串,PYTHON支持的色块英文对应色块样式如下图,本程序实现了对下面全部色块的直接选用的代码。
设置子窗体打开后的界面样式如下
对应此设置窗体关联的设置ini文件set.ini的内容如下:
TEST='"abc",123,1.234,True,False,"def","HIJ"'
APPNAME='平基土石方三角网三维计算软件【基于Python】'
APPVER='V0.0.1.0'
SHOW_GRID=True
SHOW_POINT=True
SHOW_LINE=True
SHOW_POINTTXT=False
SHOW_PLAN=True
SHOW_WTLINE=False
SHOW_TRIANGEIDTXT=False
SHOW_POINTR=0.01
SHOW_ZSCALE=0.96
TRD_USE=True
TRD_MAXTRDNUM=100
TRD_ONETRDNUM=200
COL_ORGPOINT='darkseagreen'
COL_ORGLINE='forestgreen'
COL_ORGPLANE='darkgreen'
COL_ORGPOINTTXT='lightseagreen'
COL_ORGTRIANGELTXT='red'
COL_ENDPOINT='darkorange'
COL_ENDLINE='indigo'
COL_ENDPLANE='burlywood'
COL_ENDPOINTTXT='gold'
COL_ENDTRIANGELTXT='blue'
COL_WLINE='orange'
COL_WPLANE='orangered'
COL_WTXT='magenta'
COL_TLINE='turquoise'
COL_TPLANE='teal'
COL_TTXT='aqua'
调用设置子窗体的示例主窗体mainWindow.py代码如下:
import sys,time
import PySide6
from PySide6 import *
from PySide6 import QtCore
from PySide6.QtWidgets import *
from PySide6.QtCore import *
#from PySide6.QtGui import * # #如果运行时没有任何界面调出,也不报错,请屏蔽此行,
from DlgSet import DlgSet #导入系统设置窗体模块
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setGeometry(300,300,500,400)
self.btnTest= QPushButton(self)
self.btnTest.setText("打开设置子对话框窗体")
self.btnTest.setGeometry(100,100,200,50)
self.btnTest.clicked.connect(self.openDlgSet)
def openDlgSet(self):
self.dlgSet=DlgSet(self)
self.dlgSet.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec())
设置子对话框模块文件dlgSet.py的代码如下:
import sys,os,time,math,copy,random
import PySide6
from PySide6 import *
from PySide6 import QtWidgets
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import (QCursor,QIcon,QImage,QPicture,QDesktopServices, QGuiApplication,
QKeySequence, QShortcut, QStandardItem,QStandardItemModel)
from PySide6.QtGui import (QPen,QBrush,QColor,QFont,QPalette,QPainter,QGradient,QMatrix4x4,
QPlatformSurfaceEvent, QSurface, QWindow,QSurfaceFormat)
from PySide6.QtGui import (QRhi, QRhiBuffer,QPixmap,QAction,QWheelEvent,
QRhiDepthStencilClearValue,
QRhiGraphicsPipeline, QRhiNullInitParams,
QRhiGles2InitParams, QRhiRenderBuffer,
QRhiSampler, QRhiShaderResourceBinding,
QRhiShaderStage, QRhiTexture,QMovie,
QRhiVertexInputAttribute, QRhiVertexInputBinding,
QRhiVertexInputLayout, QRhiViewport, QShader)
from PySide6.QtCore import Qt, QEvent
from g import * #导入自定义的一些全局变更和函数
from QLabelEx import * #导入自定义的彩色标签库
#from PySide6.uic import loadUi #修复UI类自动补全,同时要修改defaultSettings.json文件中的内容,将此文件保存到vscode的安装根目录下即可解决
#PySide6-uic './ui/DlgSet.ui' -o './Ui_DlgSet.py' ui设计的窗体编绎成PY代码
#需要将采用QLabelEx类的控件,要将扩号内的参数self.verticalLayoutWidget改为(650, 20, 290, 761)
from Ui_DlgSet import Ui_DlgSet #导入上面命令生成的显示挖填方工程量窗体模块
from setIniReg import *
#定义子窗口类(继承自QDialog和设计器生成的Ui_DlgSet)
class DlgSet(Ui_DlgSet,QDialog):
signal_clicked = Signal(str) #自定信号,即主窗体被单击时发出(传回参数为xxx)
signal_LeftDropRelease= Signal(str)
def __init__(self,parent=None):
super(DlgSet,self).__init__(parent)
self.parent=parent
self.setupUi(self) # 传递自己
#loadUi('./ui/DlgSet.ui', self) #修复UI类自动补全
self.colLabels=[] #定义全部标签列表集合
self.setWindowTitle('系统设置')
self.ini = setIni() #读取ini的对象
self.readIniFile('set.ini')
self.init_UI()
#self.setWindowFlags(Qt.WindowStaysOnTopHint|Qt.WindowCloseButtonHint)
self.chkShowGrid.setChecked(self.ini.getIniSetValue('SHOW_GRID'))
self.chkShowPoint.setChecked(self.ini.getIniSetValue('SHOW_POINT'))
self.chkShowLine.setChecked(self.ini.getIniSetValue('SHOW_LINE'))
self.chkShowPointTxt.setChecked(self.ini.getIniSetValue('SHOW_POINTTXT'))
self.chkPlane.setChecked(self.ini.getIniSetValue('SHOW_PLAN'))
self.chkWTLine.setChecked(self.ini.getIniSetValue('SHOW_WTLINE'))
self.chkShowTrangleIDTxt.setChecked(self.ini.getIniSetValue('SHOW_TRIANGEIDTXT'))
self.spinPointR.setValue(self.ini.getIniSetValue('SHOW_POINTR'))
self.spinZscale.setValue(self.ini.getIniSetValue('SHOW_ZSCALE'))
self.chkMaxTrdNum.setChecked(self.ini.getIniSetValue('TRD_USE'))
self.spinMaxTrdNum.setValue(self.ini.getIniSetValue('TRD_MAXTRDNUM'))
self.spinOneTrdNum.setValue(self.ini.getIniSetValue('TRD_ONETRDNUM'))
self.btnOK.clicked.connect(self.onOK)
self.btnCancle.clicked.connect(self.onCancle)
#初始化界面的其他非在UI设计器的的控件
def init_UI(self):
x0=4+531
y0=40
lstAllCol=gf_getColList()
id=0
for row in range(17):
for col in range(8):
x=x0+col*40
y=y0+row*40
#obj =QLabelEx(self.groupBox,'',x,y,32,32) #参数传入只传递要建对象的id号,别名,类形,等级,全局字典数组,将创建A组0号对象,主窗口只负责两个参数ID和name,对象类负责完成字典中的其他值
obj =QLabelEx(self,'',x,y,32,32)
obj.setFrameShape(QtWidgets.QFrame.Box)
obj.colText=lstAllCol[id][0]
obj.setBkCol(QColor(lstAllCol[id][0]))
obj.setToolTip(gf_getChineseColInfo(lstAllCol[id][0]))
obj.setGeometry(x,y,32,32)
obj.move_Flag=True
obj.bColType=True
self.colLabels.append(obj)
self.colLabels[id].signal_Leftclicked.connect(self.labObjClick) #将自定义的对象标签类信号绑定主窗体槽函数
self.colLabels[id].signal_LeftDropRelease.connect(self.labLeftDropRelease)
id+=1
self.orgColRect=[[440,20,85,45],[440,60,85,45],[440,100,85,45],[440,140,85,45],[440,180,85,45]]
#=['darkseagreen','forestgreen','darkgreen','lightseagreen','red']
orgColListTxt=['darkseagreen','forestgreen','darkgreen','lightseagreen','red']
orgColListTxt[0]=self.ini.getIniSetValue('COL_ORGPOINT')
orgColListTxt[1]=self.ini.getIniSetValue('COL_ORGLINE')
orgColListTxt[2]=self.ini.getIniSetValue('COL_ORGPLANE')
orgColListTxt[3]=self.ini.getIniSetValue('COL_ORGPOINTTXT')
orgColListTxt[4]=self.ini.getIniSetValue('COL_ORGTRIANGELTXT')
self.endColRect=[[440,290,85,42],[440,330,85,42],[440,370,85,42],[440,410,85,42],[440,450,85,42]]
#=['darkorange','indigo','burlywood','gold','blue']
endColListTxt=['darkorange','indigo','burlywood','gold','blue']
endColListTxt[0]=self.ini.getIniSetValue('COL_ENDPOINT')
endColListTxt[1]=self.ini.getIniSetValue('COL_ENDLINE')
endColListTxt[2]=self.ini.getIniSetValue('COL_ENDPLANE')
endColListTxt[3]=self.ini.getIniSetValue('COL_ENDPOINTTXT')
endColListTxt[4]=self.ini.getIniSetValue('COL_ENDTRIANGELTXT')
self.lab_orgPointCol=QLabelEx(self.verticalLayoutWidget_3,'',1,1,85,42)
self.lab_orgPointCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_orgPointCol.setBkCol(QColor(orgColListTxt[0]))
self.lab_orgPointCol.colText=orgColListTxt[0]
self.lab_orgPointCol.setToolTip(gf_getChineseColInfo(orgColListTxt[0]))
self.verticalLayout_3.addWidget(self.lab_orgPointCol)
self.lab_orgLineCol=QLabelEx(self.verticalLayoutWidget_3,'',1,41,85,42)
self.lab_orgLineCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_orgLineCol.colText=orgColListTxt[1]
self.lab_orgLineCol.setBkCol(QColor(orgColListTxt[1]))
self.lab_orgLineCol.setToolTip(gf_getChineseColInfo(orgColListTxt[1]))
self.verticalLayout_3.addWidget(self.lab_orgLineCol)
self.lab_orgPlaneCol=QLabelEx(self.verticalLayoutWidget_3,'',1,81,85,42)
self.lab_orgPlaneCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_orgPlaneCol.colText=orgColListTxt[2]
self.lab_orgPlaneCol.setBkCol(QColor(orgColListTxt[2]))
self.lab_orgPlaneCol.setToolTip(gf_getChineseColInfo(orgColListTxt[2]))
self.verticalLayout_3.addWidget(self.lab_orgPlaneCol)
self.lab_orgPointIDCol=QLabelEx(self.verticalLayoutWidget_3,'',1,121,85,42)
self.lab_orgPointIDCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_orgPointIDCol.colText=orgColListTxt[3]
self.lab_orgPointIDCol.setBkCol(QColor(orgColListTxt[3]))
self.lab_orgPointIDCol.setToolTip(gf_getChineseColInfo(orgColListTxt[3]))
self.verticalLayout_3.addWidget(self.lab_orgPointIDCol)
self.lab_orgTrinagIDCol=QLabelEx(self.verticalLayoutWidget_3,'',1,161,85,42)
self.lab_orgTrinagIDCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_orgTrinagIDCol.colText=orgColListTxt[4]
self.lab_orgTrinagIDCol.setBkCol(QColor(orgColListTxt[4]))
self.lab_orgTrinagIDCol.setToolTip(gf_getChineseColInfo(orgColListTxt[4]))
self.verticalLayout_3.addWidget(self.lab_orgTrinagIDCol)
self.lab_endPointCol=QLabelEx(self.verticalLayoutWidget_5,'',1,1,85,42)
self.lab_endPointCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_endPointCol.colText=endColListTxt[0]
self.lab_endPointCol.setBkCol(QColor(endColListTxt[0]))
self.lab_endPointCol.setToolTip(gf_getChineseColInfo(endColListTxt[0]))
self.verticalLayout_5.addWidget(self.lab_endPointCol)
self.lab_endLineCol=QLabelEx(self.verticalLayoutWidget_5,'',1,41,85,42)
self.lab_endLineCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_endLineCol.colText=endColListTxt[1]
self.lab_endLineCol.setBkCol(QColor(endColListTxt[1]))
self.lab_endLineCol.setToolTip(gf_getChineseColInfo(endColListTxt[1]))
self.verticalLayout_5.addWidget(self.lab_endLineCol)
self.lab_endPlaneCol=QLabelEx(self.verticalLayoutWidget_5,'',1,81,85,42)
self.lab_endPlaneCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_endPlaneCol.colText=endColListTxt[2]
self.lab_endPlaneCol.setBkCol(QColor(endColListTxt[2]))
self.lab_endPlaneCol.setToolTip(gf_getChineseColInfo(endColListTxt[2]))
self.verticalLayout_5.addWidget(self.lab_endPlaneCol)
self.lab_endPointIDCol=QLabelEx(self.verticalLayoutWidget_5,'',1,121,85,42)
self.lab_endPointIDCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_endPointIDCol.colText=endColListTxt[3]
self.lab_endPointIDCol.setBkCol(QColor(endColListTxt[3]))
self.lab_endPointIDCol.setToolTip(gf_getChineseColInfo(endColListTxt[3]))
self.verticalLayout_5.addWidget(self.lab_endPointIDCol)
self.lab_endTrinagIDCol=QLabelEx(self.verticalLayoutWidget_5,'',1,161,85,42)
self.lab_endTrinagIDCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_endTrinagIDCol.colText=endColListTxt[4]
self.lab_endTrinagIDCol.setBkCol(QColor(endColListTxt[4]))
self.lab_endTrinagIDCol.setToolTip(gf_getChineseColInfo(endColListTxt[4]))
self.verticalLayout_5.addWidget(self.lab_endTrinagIDCol)
self.wColRect=[[170,540,85,45],[170,600,85,45],[170,660,85,45]]
#=['orange','orangered','magenta']
wColListTxt=['orange','orangered','magenta']
wColListTxt[0]=self.ini.getIniSetValue('COL_WLINE')
wColListTxt[1]=self.ini.getIniSetValue('COL_WPLANE')
wColListTxt[2]=self.ini.getIniSetValue('COL_WTXT')
self.lab_wLineCol=QLabelEx(self.verticalLayoutWidget_9,'',1,10,85,45)
self.lab_wLineCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_wLineCol.setBkCol(QColor(wColListTxt[0]))
self.lab_wLineCol.colText=wColListTxt[0]
self.lab_wLineCol.setToolTip(gf_getChineseColInfo(wColListTxt[0]))
self.verticalLayout_9.addWidget(self.lab_wLineCol)
self.lab_wPlaneCol=QLabelEx(self.verticalLayoutWidget_9,'',1,70,85,45)
self.lab_wPlaneCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_wPlaneCol.setBkCol(QColor(wColListTxt[1]))
self.lab_wPlaneCol.colText=wColListTxt[1]
self.lab_wPlaneCol.setToolTip(gf_getChineseColInfo(wColListTxt[1]))
self.verticalLayout_9.addWidget(self.lab_wPlaneCol)
self.lab_wTxtCol=QLabelEx(self.verticalLayoutWidget_9,'',1,130,85,45)
self.lab_wTxtCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_wTxtCol.setBkCol(QColor(wColListTxt[2]))
self.lab_wTxtCol.colText=wColListTxt[2]
self.lab_wTxtCol.setToolTip(gf_getChineseColInfo(wColListTxt[2]))
self.verticalLayout_9.addWidget(self.lab_wTxtCol)
self.tColRect=[[440,540,85,45],[440,600,85,45],[440,660,85,45]]
#=['turquoise','teal','aqua']
tColListTxt=['turquoise','teal','aqua']
tColListTxt[0]=self.ini.getIniSetValue('COL_TLINE')
tColListTxt[1]=self.ini.getIniSetValue('COL_TPLANE')
tColListTxt[2]=self.ini.getIniSetValue('COL_TTXT')
self.lab_tLineCol=QLabelEx(self.verticalLayoutWidget_7,'',1,10,85,45)
self.lab_tLineCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_tLineCol.setBkCol(QColor(tColListTxt[0]))
self.lab_tLineCol.colText=tColListTxt[0]
self.lab_tLineCol.setToolTip(gf_getChineseColInfo(tColListTxt[0]))
self.verticalLayout_7.addWidget(self.lab_tLineCol)
self.lab_tPlaneCol=QLabelEx(self.verticalLayoutWidget_7,'',1,70,85,45)
self.lab_tPlaneCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_tPlaneCol.setBkCol(QColor(tColListTxt[1]))
self.lab_tPlaneCol.colText=tColListTxt[1]
self.lab_tPlaneCol.setToolTip(gf_getChineseColInfo(tColListTxt[1]))
self.verticalLayout_7.addWidget(self.lab_tPlaneCol)
self.lab_tTxtCol=QLabelEx(self.verticalLayoutWidget_7,'',1,130,85,45)
self.lab_tTxtCol.setFrameShape(QtWidgets.QFrame.Box)
self.lab_tTxtCol.setBkCol(QColor(tColListTxt[2]))
self.lab_tTxtCol.colText=tColListTxt[2]
self.lab_tTxtCol.setToolTip(gf_getChineseColInfo(tColListTxt[2]))
self.verticalLayout_7.addWidget(self.lab_tTxtCol)
#读取ini设置文件
def readIniFile(self,iniFile):
self.ini.readIniFile(iniFile)
def labObjClick(self):
print('dlgset窗口def labObjClick(self):')
#接收到颜色框控件件鼠标左键释放信号
def labLeftDropRelease(self,obj):
moverect=obj.geometry()
type,ID=self.pointInColID(moverect)
bkcol=obj.colText
if(type==0):
if(ID==0):
self.lab_orgPointCol.colText=bkcol
self.lab_orgPointCol.setBkCol(QColor(bkcol))
self.lab_orgPointCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==1):
self.lab_orgLineCol.colText=bkcol
self.lab_orgLineCol.setBkCol(QColor(bkcol))
self.lab_orgLineCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==2):
self.lab_orgPlaneCol.colText=bkcol
self.lab_orgPlaneCol.setBkCol(QColor(bkcol))
self.lab_orgPlaneCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==3):
self.lab_orgPointIDCol.colText=bkcol
self.lab_orgPointIDCol.setBkCol(QColor(bkcol))
self.lab_orgPointIDCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==4):
self.lab_orgTrinagIDCol.colText=bkcol
self.lab_orgTrinagIDCol.setBkCol(QColor(bkcol))
self.lab_orgTrinagIDCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(type==1):
if(ID==0):
self.lab_endPointCol.colText=bkcol
self.lab_endPointCol.setBkCol(QColor(bkcol))
self.lab_endPointCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==1):
self.lab_endLineCol.colText=bkcol
self.lab_endLineCol.setBkCol(QColor(bkcol))
self.lab_endLineCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==2):
self.lab_endPlaneCol.colText=bkcol
self.lab_endPlaneCol.setBkCol(QColor(bkcol))
self.lab_endPlaneCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==3):
self.lab_endPointIDCol.colText=bkcol
self.lab_endPointIDCol.setBkCol(QColor(bkcol))
self.lab_endPointIDCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==4):
self.lab_endTrinagIDCol.colText=bkcol
self.lab_endTrinagIDCol.setBkCol(QColor(bkcol))
self.lab_endTrinagIDCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(type==2):
if(ID==0):
self.lab_wLineCol.colText=bkcol
self.lab_wLineCol.setBkCol(QColor(bkcol))
self.lab_wLineCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==1):
self.lab_wPlaneCol.colText=bkcol
self.lab_wPlaneCol.setBkCol(QColor(bkcol))
self.lab_wPlaneCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==2):
self.lab_wTxtCol.colText=bkcol
self.lab_wTxtCol.setBkCol(QColor(bkcol))
self.lab_wTxtCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(type==3):
if(ID==0):
self.lab_tLineCol.colText=bkcol
self.lab_tLineCol.setBkCol(QColor(bkcol))
self.lab_tLineCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==1):
self.lab_tPlaneCol.colText=bkcol
self.lab_tPlaneCol.setBkCol(QColor(bkcol))
self.lab_tPlaneCol.setToolTip(gf_getChineseColInfo(bkcol))
elif(ID==2):
self.lab_tTxtCol.colText=bkcol
self.lab_tTxtCol.setBkCol(QColor(bkcol))
self.lab_tTxtCol.setToolTip(gf_getChineseColInfo(bkcol))
else:
print('设置颜色时有例外?')
#判断移动的Rect四个点是否在10个颜色控件框内
def pointInColID(self,moveRect):
p1=QPoint(moveRect.x(),moveRect.y())
p2=QPoint(moveRect.x()+moveRect.width(),moveRect.y())
p3=QPoint(moveRect.x()+moveRect.width(),moveRect.y()+moveRect.height())
p4=QPoint(moveRect.x(),moveRect.y()+moveRect.height())
orgID=0
for rect in self.orgColRect: #self.orgColRect=[[440,40,59,50],[440,98,59,50],[440,155,59,50],[440,213,59,50],[440,270,59,50]]
bP1=bP2=bP3=bP4=0
colrect=QRect(rect[0],rect[1],rect[2],rect[3])
if(colrect.contains(p1)): bP1=1
elif(colrect.contains(p2)): bP2=1
elif(colrect.contains(p3)): bP3=1
elif(colrect.contains(p4)): bP4=1
if((bP1+bP2+bP3+bP4)==1):
print(f'找到原貌控件orgID={orgID}')
return 0,orgID
orgID+=1
endID=0
for rect in self.endColRect:
bP1=bP2=bP3=bP4=0
colrect=QRect(rect[0],rect[1],rect[2],rect[3])
if(colrect.contains(p1)): bP1=1
elif(colrect.contains(p2)): bP2=1
elif(colrect.contains(p3)): bP3=1
elif(colrect.contains(p4)): bP4=1
if((bP1+bP2+bP3+bP4)==1):
print(f'找到成形貌控件endID={endID}')
return 1,endID
endID+=1
wID=0
for rect in self.wColRect:
bP1=bP2=bP3=bP4=0
colrect=QRect(rect[0],rect[1],rect[2],rect[3])
if(colrect.contains(p1)): bP1=1
elif(colrect.contains(p2)): bP2=1
elif(colrect.contains(p3)): bP3=1
elif(colrect.contains(p4)): bP4=1
if((bP1+bP2+bP3+bP4)==1):
print(f'找到挖方颜色控件wID={wID}')
return 2,wID
wID+=1
tID=0
for rect in self.tColRect:
bP1=bP2=bP3=bP4=0
colrect=QRect(rect[0],rect[1],rect[2],rect[3])
if(colrect.contains(p1)): bP1=1
elif(colrect.contains(p2)): bP2=1
elif(colrect.contains(p3)): bP3=1
elif(colrect.contains(p4)): bP4=1
if((bP1+bP2+bP3+bP4)==1):
print(f'找到填方颜色控件wID={tID}')
return 3,tID
tID+=1
return -1,-1
#按【确定】按确定保存设置值
def onOK(self):
self.ini.setIniSetValue('TEST','"abc",123,1.234,True,False,"def","HIJ"')
self.ini.setIniSetValue('SHOW_GRID',self.chkShowGrid.isChecked())
self.ini.setIniSetValue('SHOW_POINT',self.chkShowPoint.isChecked())
self.ini.setIniSetValue('SHOW_LINE',self.chkShowLine.isChecked())
self.ini.setIniSetValue('SHOW_POINTTXT',self.chkShowPointTxt.isChecked())
self.ini.setIniSetValue('SHOW_PLAN',self.chkPlane.isChecked())
self.ini.setIniSetValue('SHOW_WTLINE',self.chkWTLine.isChecked())
self.ini.setIniSetValue('SHOW_TRIANGEIDTXT',self.chkShowTrangleIDTxt.isChecked())
self.ini.setIniSetValue('SHOW_POINTR',self.spinPointR.value())
self.ini.setIniSetValue('SHOW_ZSCALE',self.spinZscale.value())
self.ini.setIniSetValue('TRD_USE',self.chkMaxTrdNum.isChecked())
self.ini.setIniSetValue('TRD_MAXTRDNUM',self.spinMaxTrdNum.value())
self.ini.setIniSetValue('TRD_ONETRDNUM',self.spinOneTrdNum.value())
self.ini.setIniSetValue('COL_ORGPOINT',self.lab_orgPointCol.colText)
self.ini.setIniSetValue('COL_ORGLINE',self.lab_orgLineCol.colText)
self.ini.setIniSetValue('COL_ORGPLANE',self.lab_orgPlaneCol.colText)
self.ini.setIniSetValue('COL_ORGPOINTTXT',self.lab_orgPointIDCol.colText)
self.ini.setIniSetValue('COL_ORGTRIANGELTXT',self.lab_orgTrinagIDCol.colText)
self.ini.setIniSetValue('COL_ENDPOINT',self.lab_endPointCol.colText)
self.ini.setIniSetValue('COL_ENDLINE',self.lab_endLineCol.colText)
self.ini.setIniSetValue('COL_ENDPLANE',self.lab_endPlaneCol.colText)
self.ini.setIniSetValue('COL_ENDPOINTTXT',self.lab_endPointIDCol.colText)
self.ini.setIniSetValue('COL_ENDTRIANGELTXT',self.lab_endTrinagIDCol.colText)
self.ini.setIniSetValue('COL_WLINE',self.lab_wLineCol.colText)
self.ini.setIniSetValue('COL_WPLANE',self.lab_wPlaneCol.colText)
self.ini.setIniSetValue('COL_WTXT',self.lab_wTxtCol.colText)
self.ini.setIniSetValue('COL_TLINE',self.lab_tLineCol.colText)
self.ini.setIniSetValue('COL_TPLANE',self.lab_tPlaneCol.colText)
self.ini.setIniSetValue('COL_TTXT',self.lab_tTxtCol.colText)
self.ini.writeIniFile('set.ini',self.ini.dicSetIni)
self.parent.refreshViewIniSet() #调用主窗体重新刷新显示
self.close()
#按【取消】按取消保存设置值
def onCancle(self):
self.close()
子窗体是采用PySide6设计器设计的,ui文件经uic编绎后生成的Ui_DlgSet.py文件代码
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'DlgSet.ui'
##
## Created by: Qt User Interface Compiler version 6.8.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QCheckBox, QDialog, QDoubleSpinBox,
QGridLayout, QGroupBox, QLabel, QPushButton,
QSizePolicy, QSpinBox, QVBoxLayout, QWidget)
class Ui_DlgSet(object):
def setupUi(self, DlgSet):
if not DlgSet.objectName():
DlgSet.setObjectName(u"DlgSet")
DlgSet.setWindowModality(Qt.WindowModality.WindowModal)
DlgSet.resize(866, 758)
self.groupBox_Show = QGroupBox(DlgSet)
self.groupBox_Show.setObjectName(u"groupBox_Show")
self.groupBox_Show.setGeometry(QRect(10, 20, 250, 240))
self.verticalLayoutWidget = QWidget(self.groupBox_Show)
self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
self.verticalLayoutWidget.setGeometry(QRect(10, 20, 211, 211))
self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setObjectName(u"verticalLayout")
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.chkShowGrid = QCheckBox(self.verticalLayoutWidget)
self.chkShowGrid.setObjectName(u"chkShowGrid")
self.verticalLayout.addWidget(self.chkShowGrid)
self.chkShowPoint = QCheckBox(self.verticalLayoutWidget)
self.chkShowPoint.setObjectName(u"chkShowPoint")
self.verticalLayout.addWidget(self.chkShowPoint)
self.chkShowLine = QCheckBox(self.verticalLayoutWidget)
self.chkShowLine.setObjectName(u"chkShowLine")
self.verticalLayout.addWidget(self.chkShowLine)
self.chkShowPointTxt = QCheckBox(self.verticalLayoutWidget)
self.chkShowPointTxt.setObjectName(u"chkShowPointTxt")
self.verticalLayout.addWidget(self.chkShowPointTxt)
self.chkPlane = QCheckBox(self.verticalLayoutWidget)
self.chkPlane.setObjectName(u"chkPlane")
self.verticalLayout.addWidget(self.chkPlane)
self.chkWTLine = QCheckBox(self.verticalLayoutWidget)
self.chkWTLine.setObjectName(u"chkWTLine")
self.verticalLayout.addWidget(self.chkWTLine)
self.chkShowTrangleIDTxt = QCheckBox(self.verticalLayoutWidget)
self.chkShowTrangleIDTxt.setObjectName(u"chkShowTrangleIDTxt")
self.verticalLayout.addWidget(self.chkShowTrangleIDTxt)
self.groupBox_Col = QGroupBox(DlgSet)
self.groupBox_Col.setObjectName(u"groupBox_Col")
self.groupBox_Col.setGeometry(QRect(270, 20, 260, 240))
self.verticalLayoutWidget_2 = QWidget(self.groupBox_Col)
self.verticalLayoutWidget_2.setObjectName(u"verticalLayoutWidget_2")
self.verticalLayoutWidget_2.setGeometry(QRect(10, 19, 161, 211))
self.verticalLayout_2 = QVBoxLayout(self.verticalLayoutWidget_2)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.label_3 = QLabel(self.verticalLayoutWidget_2)
self.label_3.setObjectName(u"label_3")
self.verticalLayout_2.addWidget(self.label_3)
self.label_2 = QLabel(self.verticalLayoutWidget_2)
self.label_2.setObjectName(u"label_2")
self.verticalLayout_2.addWidget(self.label_2)
self.label = QLabel(self.verticalLayoutWidget_2)
self.label.setObjectName(u"label")
self.verticalLayout_2.addWidget(self.label)
self.label_4 = QLabel(self.verticalLayoutWidget_2)
self.label_4.setObjectName(u"label_4")
self.verticalLayout_2.addWidget(self.label_4)
self.label_5 = QLabel(self.verticalLayoutWidget_2)
self.label_5.setObjectName(u"label_5")
self.verticalLayout_2.addWidget(self.label_5)
self.verticalLayoutWidget_3 = QWidget(self.groupBox_Col)
self.verticalLayoutWidget_3.setObjectName(u"verticalLayoutWidget_3")
self.verticalLayoutWidget_3.setGeometry(QRect(176, 20, 77, 211))
self.verticalLayout_3 = QVBoxLayout(self.verticalLayoutWidget_3)
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.groupBox_Col_2 = QGroupBox(DlgSet)
self.groupBox_Col_2.setObjectName(u"groupBox_Col_2")
self.groupBox_Col_2.setGeometry(QRect(270, 270, 260, 240))
self.verticalLayoutWidget_4 = QWidget(self.groupBox_Col_2)
self.verticalLayoutWidget_4.setObjectName(u"verticalLayoutWidget_4")
self.verticalLayoutWidget_4.setGeometry(QRect(10, 20, 161, 211))
self.verticalLayout_4 = QVBoxLayout(self.verticalLayoutWidget_4)
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.label_6 = QLabel(self.verticalLayoutWidget_4)
self.label_6.setObjectName(u"label_6")
self.verticalLayout_4.addWidget(self.label_6)
self.label_7 = QLabel(self.verticalLayoutWidget_4)
self.label_7.setObjectName(u"label_7")
self.verticalLayout_4.addWidget(self.label_7)
self.label_8 = QLabel(self.verticalLayoutWidget_4)
self.label_8.setObjectName(u"label_8")
self.verticalLayout_4.addWidget(self.label_8)
self.label_9 = QLabel(self.verticalLayoutWidget_4)
self.label_9.setObjectName(u"label_9")
self.verticalLayout_4.addWidget(self.label_9)
self.label_10 = QLabel(self.verticalLayoutWidget_4)
self.label_10.setObjectName(u"label_10")
self.verticalLayout_4.addWidget(self.label_10)
self.verticalLayoutWidget_5 = QWidget(self.groupBox_Col_2)
self.verticalLayoutWidget_5.setObjectName(u"verticalLayoutWidget_5")
self.verticalLayoutWidget_5.setGeometry(QRect(173, 20, 81, 211))
self.verticalLayout_5 = QVBoxLayout(self.verticalLayoutWidget_5)
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
self.groupBox = QGroupBox(DlgSet)
self.groupBox.setObjectName(u"groupBox")
self.groupBox.setGeometry(QRect(530, 20, 320, 701))
self.groupBox_Show_2 = QGroupBox(DlgSet)
self.groupBox_Show_2.setObjectName(u"groupBox_Show_2")
self.groupBox_Show_2.setGeometry(QRect(10, 270, 251, 241))
self.gridLayoutWidget = QWidget(self.groupBox_Show_2)
self.gridLayoutWidget.setObjectName(u"gridLayoutWidget")
self.gridLayoutWidget.setGeometry(QRect(9, 10, 237, 221))
self.gridLayout = QGridLayout(self.gridLayoutWidget)
self.gridLayout.setObjectName(u"gridLayout")
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.label_11 = QLabel(self.gridLayoutWidget)
self.label_11.setObjectName(u"label_11")
self.gridLayout.addWidget(self.label_11, 5, 0, 1, 1)
self.label_19 = QLabel(self.gridLayoutWidget)
self.label_19.setObjectName(u"label_19")
self.gridLayout.addWidget(self.label_19, 0, 0, 1, 1)
self.label_13 = QLabel(self.gridLayoutWidget)
self.label_13.setObjectName(u"label_13")
self.gridLayout.addWidget(self.label_13, 1, 0, 1, 1)
self.spinOneTrdNum = QSpinBox(self.gridLayoutWidget)
self.spinOneTrdNum.setObjectName(u"spinOneTrdNum")
self.spinOneTrdNum.setMinimum(200)
self.spinOneTrdNum.setMaximum(2000)
self.gridLayout.addWidget(self.spinOneTrdNum, 5, 1, 1, 1)
self.spinPointR = QDoubleSpinBox(self.gridLayoutWidget)
self.spinPointR.setObjectName(u"spinPointR")
self.spinPointR.setMinimum(0.010000000000000)
self.spinPointR.setMaximum(100.000000000000000)
self.spinPointR.setValue(0.200000000000000)
self.gridLayout.addWidget(self.spinPointR, 0, 1, 1, 1)
self.spinZscale = QDoubleSpinBox(self.gridLayoutWidget)
self.spinZscale.setObjectName(u"spinZscale")
self.spinZscale.setMinimum(0.100000000000000)
self.spinZscale.setMaximum(10.000000000000000)
self.spinZscale.setSingleStep(0.010000000000000)
self.spinZscale.setValue(1.000000000000000)
self.gridLayout.addWidget(self.spinZscale, 1, 1, 1, 1)
self.spinMaxTrdNum = QSpinBox(self.gridLayoutWidget)
self.spinMaxTrdNum.setObjectName(u"spinMaxTrdNum")
self.spinMaxTrdNum.setMinimum(1)
self.spinMaxTrdNum.setMaximum(100)
self.spinMaxTrdNum.setValue(100)
self.gridLayout.addWidget(self.spinMaxTrdNum, 2, 1, 1, 1)
self.chkMaxTrdNum = QCheckBox(self.gridLayoutWidget)
self.chkMaxTrdNum.setObjectName(u"chkMaxTrdNum")
self.chkMaxTrdNum.setChecked(True)
self.gridLayout.addWidget(self.chkMaxTrdNum, 2, 0, 1, 1)
self.btnOK = QPushButton(DlgSet)
self.btnOK.setObjectName(u"btnOK")
self.btnOK.setGeometry(QRect(380, 730, 93, 28))
self.btnCancle = QPushButton(DlgSet)
self.btnCancle.setObjectName(u"btnCancle")
self.btnCancle.setGeometry(QRect(590, 730, 93, 28))
self.groupBox_Col_3 = QGroupBox(DlgSet)
self.groupBox_Col_3.setObjectName(u"groupBox_Col_3")
self.groupBox_Col_3.setGeometry(QRect(270, 530, 261, 191))
self.verticalLayoutWidget_6 = QWidget(self.groupBox_Col_3)
self.verticalLayoutWidget_6.setObjectName(u"verticalLayoutWidget_6")
self.verticalLayoutWidget_6.setGeometry(QRect(10, 20, 161, 161))
self.verticalLayout_6 = QVBoxLayout(self.verticalLayoutWidget_6)
self.verticalLayout_6.setObjectName(u"verticalLayout_6")
self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
self.label_16 = QLabel(self.verticalLayoutWidget_6)
self.label_16.setObjectName(u"label_16")
self.verticalLayout_6.addWidget(self.label_16)
self.label_17 = QLabel(self.verticalLayoutWidget_6)
self.label_17.setObjectName(u"label_17")
self.verticalLayout_6.addWidget(self.label_17)
self.label_18 = QLabel(self.verticalLayoutWidget_6)
self.label_18.setObjectName(u"label_18")
self.verticalLayout_6.addWidget(self.label_18)
self.verticalLayoutWidget_7 = QWidget(self.groupBox_Col_3)
self.verticalLayoutWidget_7.setObjectName(u"verticalLayoutWidget_7")
self.verticalLayoutWidget_7.setGeometry(QRect(170, 20, 91, 161))
self.verticalLayout_7 = QVBoxLayout(self.verticalLayoutWidget_7)
self.verticalLayout_7.setObjectName(u"verticalLayout_7")
self.verticalLayout_7.setContentsMargins(0, 0, 0, 0)
self.groupBox_Col_4 = QGroupBox(DlgSet)
self.groupBox_Col_4.setObjectName(u"groupBox_Col_4")
self.groupBox_Col_4.setGeometry(QRect(10, 530, 251, 191))
self.verticalLayoutWidget_8 = QWidget(self.groupBox_Col_4)
self.verticalLayoutWidget_8.setObjectName(u"verticalLayoutWidget_8")
self.verticalLayoutWidget_8.setGeometry(QRect(10, 20, 141, 161))
self.verticalLayout_8 = QVBoxLayout(self.verticalLayoutWidget_8)
self.verticalLayout_8.setObjectName(u"verticalLayout_8")
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
self.label_20 = QLabel(self.verticalLayoutWidget_8)
self.label_20.setObjectName(u"label_20")
self.verticalLayout_8.addWidget(self.label_20)
self.label_21 = QLabel(self.verticalLayoutWidget_8)
self.label_21.setObjectName(u"label_21")
self.verticalLayout_8.addWidget(self.label_21)
self.label_22 = QLabel(self.verticalLayoutWidget_8)
self.label_22.setObjectName(u"label_22")
self.verticalLayout_8.addWidget(self.label_22)
self.verticalLayoutWidget_9 = QWidget(self.groupBox_Col_4)
self.verticalLayoutWidget_9.setObjectName(u"verticalLayoutWidget_9")
self.verticalLayoutWidget_9.setGeometry(QRect(153, 20, 91, 161))
self.verticalLayout_9 = QVBoxLayout(self.verticalLayoutWidget_9)
self.verticalLayout_9.setObjectName(u"verticalLayout_9")
self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
self.groupBox.raise_()
self.groupBox_Show.raise_()
self.groupBox_Col.raise_()
self.groupBox_Col_2.raise_()
self.groupBox_Show_2.raise_()
self.btnOK.raise_()
self.btnCancle.raise_()
self.groupBox_Col_3.raise_()
self.groupBox_Col_4.raise_()
self.retranslateUi(DlgSet)
QMetaObject.connectSlotsByName(DlgSet)
# setupUi
def retranslateUi(self, DlgSet):
DlgSet.setWindowTitle(QCoreApplication.translate("DlgSet", u"\u8bbe\u7f6e", None))
self.groupBox_Show.setTitle(QCoreApplication.translate("DlgSet", u"\u4e09\u7ef4\u663e\u793a\u8bbe\u7f6e", None))
#if QT_CONFIG(tooltip)
self.chkShowGrid.setToolTip("")
#endif // QT_CONFIG(tooltip)
self.chkShowGrid.setText(QCoreApplication.translate("DlgSet", u"\u663e\u793a\u7f51\u683c\u7ebf", None))
self.chkShowPoint.setText(QCoreApplication.translate("DlgSet", u"\u663e\u793a\u5750\u6807\u70b9(\u7403\u6a21\u5f0f)", None))
self.chkShowLine.setText(QCoreApplication.translate("DlgSet", u"\u663e\u793a\u4e09\u89d2\u5f62\u8fb9\u7ebf", None))
self.chkShowPointTxt.setText(QCoreApplication.translate("DlgSet", u"\u663e\u793a\u5750\u6807\u70b9\u7f16\u53f7", None))
self.chkPlane.setText(QCoreApplication.translate("DlgSet", u"\u663e\u793a\u4e09\u89d2\u7f51\u9762\u57df", None))
self.chkWTLine.setText(QCoreApplication.translate("DlgSet", u"\u663e\u793a\u6316\u586b\u4ea4\u754c\u7ebf", None))
self.chkShowTrangleIDTxt.setText(QCoreApplication.translate("DlgSet", u"\u663e\u793a\u4e09\u89d2\u5f62\u7f16\u53f7", None))
self.groupBox_Col.setTitle(QCoreApplication.translate("DlgSet", u"\u539f\u59cb\u5730\u8c8c\u4e09\u7ef4\u663e\u793a\u8bbe\u7f6e", None))
self.label_3.setText(QCoreApplication.translate("DlgSet", u"\u539f\u8c8c\u5730\u5f62\u70b9\u989c\u8272\uff1a", None))
self.label_2.setText(QCoreApplication.translate("DlgSet", u"\u539f\u8c8c\u5730\u5f62\u7ebf\u989c\u8272\uff1a", None))
self.label.setText(QCoreApplication.translate("DlgSet", u"\u539f\u8c8c\u5730\u5f62\u9762\u989c\u8272\uff1a", None))
self.label_4.setText(QCoreApplication.translate("DlgSet", u"\u539f\u8c8c\u5730\u5f62\u70b9\u7f16\u53f7\u989c\u8272\uff1a", None))
self.label_5.setText(QCoreApplication.translate("DlgSet", u"\u539f\u8c8c\u4e09\u89d2\u5f62\u7f16\u53f7\u989c\u8272\uff1a", None))
self.groupBox_Col_2.setTitle(QCoreApplication.translate("DlgSet", u"\u6210\u5f62\u5730\u8c8c\u4e09\u7ef4\u663e\u793a\u8bbe\u7f6e", None))
self.label_6.setText(QCoreApplication.translate("DlgSet", u"\u6210\u5f62\u5730\u8c8c\u5730\u5f62\u70b9\u989c\u8272\uff1a", None))
self.label_7.setText(QCoreApplication.translate("DlgSet", u"\u6210\u5f62\u5730\u8c8c\u5730\u5f62\u7ebf\u989c\u8272\uff1a", None))
self.label_8.setText(QCoreApplication.translate("DlgSet", u"\u6210\u5f62\u5730\u8c8c\u5730\u5f62\u9762\u989c\u8272\uff1a", None))
self.label_9.setText(QCoreApplication.translate("DlgSet", u"\u6210\u5f62\u5730\u8c8c\u70b9\u7f16\u53f7\u989c\u8272\uff1a", None))
self.label_10.setText(QCoreApplication.translate("DlgSet", u"\u6210\u5f62\u8c8c\u4e09\u89d2\u5f62\u7f16\u53f7\n"
"\u989c\u8272\uff1a", None))
self.groupBox.setTitle(QCoreApplication.translate("DlgSet", u"\u989c\u8272\u9009\u53d6\u6846(\u6309\u4f4f\u62d6\u52a8\u8272\u5757\u5230\u8bbe\u7f6e\u5904)", None))
self.groupBox_Show_2.setTitle(QCoreApplication.translate("DlgSet", u"\u5176\u5b83\u8bbe\u7f6e", None))
self.label_11.setText(QCoreApplication.translate("DlgSet", u"\u591a\u7ebf\u7a0b\u8ba1\u7b97\u65f6\u6bcf\u7ebf\n"
"\u7a0b\u6700\u5927\u8ba1\u7b97\u6570\u91cf", None))
self.label_19.setText(QCoreApplication.translate("DlgSet", u"\u753b\u70b9\u7684\u9ed8\u8ba4\u534a\u5f84", None))
self.label_13.setText(QCoreApplication.translate("DlgSet", u"Z\u5411\u9644\u52a0\u663e\u793a\u500d\u7387", None))
#if QT_CONFIG(tooltip)
self.spinOneTrdNum.setToolTip(QCoreApplication.translate("DlgSet", u"\u8bbe\u7f6e\u6bcf\u4e00\u4e2a\u7ebf\u7a0b\u8ba1\u7b97\u88ab\u5206\u914d\u7684\u4e09\u89d2\u7f51\u6570\u91cf(\u4e00\u822c\u5e94\u5927\u4e8e100\uff0c\u5426\u5219\u53ef\u80fd\u51fa\u73b0\u8ba1\u7b97\u4e0d\u6210\u529f)", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(tooltip)
self.spinPointR.setToolTip(QCoreApplication.translate("DlgSet", u"\u4e09\u7ef4\u56fe\u4e2d\u6240\u6765\u5730\u5f62\u5750\u6807\u70b9\u7684\u7403\u4f53\u534a\u5f84\u503c", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(tooltip)
self.spinZscale.setToolTip(QCoreApplication.translate("DlgSet", u"\u672c\u53c2\u6570\u4e3a\u663e\u793a\u53c2\u6570\uff0c\u7528\u4e8e\u5c06\u5730\u5f62\u7684Z\u5750\u6807\u503c\u518d\u9644\u52a0\u8bbe\u7f6e\u4e00\u500d\u7387\uff0c\u4ee5\u4f7f\u5730\u5f62\u663e\u793a\u65f6\u66f4\u9661\u6216\u66f4\u7f13\uff0c\u8bbe\u7f6e\u503c\u4e3a1\u65f6\u8868\u793a\u4e3a\u771f\u5b9eZ\u503c", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(tooltip)
self.spinMaxTrdNum.setToolTip(QCoreApplication.translate("DlgSet", u"\u8bbe\u7f6e\u4e09\u89d2\u7f51\u8ba1\u7b97\u65f6\u6700\u5927\u53ef\u5f00\u7684\u591a\u7ebf\u7a0b\u603b\u6570\uff0c\u5efa\u8bae\u8bbe\u7f6e\u6210100\u4ee5\u4e0b", None))
#endif // QT_CONFIG(tooltip)
self.chkMaxTrdNum.setText(QCoreApplication.translate("DlgSet", u"\u6700\u5927\u591a\u7ebf\u7a0b\u6570", None))
self.btnOK.setText(QCoreApplication.translate("DlgSet", u"\u786e\u5b9a", None))
self.btnCancle.setText(QCoreApplication.translate("DlgSet", u"\u53d6\u6d88", None))
self.groupBox_Col_3.setTitle(QCoreApplication.translate("DlgSet", u"\u586b\u65b9\u533a\u8ba1\u7b97\u7ed3\u679c\u4e09\u7ef4\u663e\u793a\u8bbe\u7f6e", None))
self.label_16.setText(QCoreApplication.translate("DlgSet", u"\u8ba1\u7b97\u7ed3\u679c\u586b\u65b9\u7ebf\u989c\u8272\uff1a", None))
self.label_17.setText(QCoreApplication.translate("DlgSet", u"\u8ba1\u7b97\u7ed3\u679c\u586b\u65b9\u9762\u989c\u8272\uff1a", None))
self.label_18.setText(QCoreApplication.translate("DlgSet", u"\u8ba1\u7b97\u7ed3\u679c\u586b\u65b9\u6807\u8bb0\u989c\u8272\uff1a", None))
self.groupBox_Col_4.setTitle(QCoreApplication.translate("DlgSet", u"\u6316\u65b9\u533a\u8ba1\u7b97\u7ed3\u679c\u4e09\u7ef4\u663e\u793a\u8bbe\u7f6e", None))
self.label_20.setText(QCoreApplication.translate("DlgSet", u"\u8ba1\u7b97\u7ed3\u679c\u6316\u65b9\u7ebf\u989c\u8272\uff1a", None))
self.label_21.setText(QCoreApplication.translate("DlgSet", u"\u8ba1\u7b97\u7ed3\u679c\u6316\u65b9\u9762\u989c\u8272\uff1a", None))
self.label_22.setText(QCoreApplication.translate("DlgSet", u"\u8ba1\u7b97\u7ed3\u679c\u6316\u65b9\u6807\u8bb0\u989c\u8272\uff1a", None))
# retranslateUi
读写保存设置到ini文件的自定义类模块文件setIniReg.py代码如下:
#setIniReg.py:定义读写ini设置文件setInt和注册表读取类setReg
import os,sys #导入系统模块
import time
import math
from g import *
#*********************************************************************************
#ini设置类型文件读写类
class setIni():
def __init__(self):
self.iniFile='' #当前设置文件
self.dicSetIni={} #Ini设置文件在此字典变量中保存
#得到ini文件中的全部设置值到变量self.dicSetInt
def readIniFile(self,iniFile):
self.iniFile=iniFile
if(os.path.exists(iniFile)):
self.dicSetIni.clear()
rf = open(iniFile,'r',encoding='utf-8')
lindS=''
lstRowData=[]
for lineS in rf.readlines():
lstRowData.clear()
s=lineS.strip()
s=s.replace("\n","") #将从文件中读出的\n删除,此语句可能会报异常
s=s.replace("\r","") #将从文件中读出的\r删除,此语句可能会报异常
if(s==''):continue #去空行
equPos=s.find('=') #每行数据以=为界先分成两部分
leftS=s[0:equPos].upper() #转成全大写
rightS=s[equPos+1:len(s)]
#对等号右边允许为以逗号分隔的一串数字组成列表
lstValue=[]
if ',' in rightS: #值中有逗号时是一列表值
lstValue.clear()
lstRowData = rightS.split(',')
for oneValueS in lstRowData:
#对每个数据进行判断,是整数/浮点/bool/字符串四种类型存储,
oneValueS=oneValueS.strip()
count=len(oneValueS)
vtype=gf_strType(oneValueS)
if(vtype==0) : #是整数
lstValue.append(int(oneValueS))
elif(vtype==1) : #是浮点数
lstValue.append(float(oneValueS))
elif(vtype==2) : #是True
lstValue.append(True)
elif(vtype==3) : #是False
lstValue.append(False)
else: #是字符串
if((oneValueS[0]=='"' or oneValueS[0]=='\'') and (oneValueS[count-1]=='"' or oneValueS[count-1]=='\'')):
oneValueS=oneValueS[1:count-1]
lstValue.append(oneValueS)
self.dicSetIni[leftS]=lstValue
else: #是一单值
rightS=rightS.strip()
count=len(rightS)
vtype=gf_strType(rightS)
if(vtype==0) : #是整数
self.dicSetIni[leftS]=int(rightS)
elif(vtype==1) : #是浮点数
self.dicSetIni[leftS]=float(rightS)
elif(vtype==2) : #是True
self.dicSetIni[leftS]=True
elif(vtype==3) : #是False
self.dicSetIni[leftS]=False
else: #是字符串
if((rightS[0]=='"' or rightS[0]=='\'') and (rightS[count-1]=='"' or rightS[count-1]=='\'')):
rightS=rightS[1:count-1]
self.dicSetIni[leftS]=rightS
rf.close()
return self.dicSetIni
#全部设置值保存在ini文件中
def writeIniFile(self,iniFile,dicVal):
self.iniFile=iniFile
if(len(dicVal)>0):
if(os.path.exists(iniFile)):
print('文件已存在,将删除和覆盖')
os.remove(iniFile)
wf = open(iniFile,'w',encoding='utf-8')
lindS=''
lstRowData=[]
for key in dicVal:
rightS=dicVal[key]
wRs=''
if(isinstance(rightS, list)): #是列表类型
for lst in rightS:
wRs=wRs+str(lst)+','
wRs=wRs[0:len(wRs)-1] #去除最后多加的一个,
elif(isinstance(rightS, bool)): #是布尔类型
if(rightS):wRs='True'
else:wRs='False'
elif(isinstance(rightS, int) or isinstance(rightS, float)): #是数字
wRs=str(rightS)
else:wRs='\''+rightS+'\'' #是字符
lineS=key+'='+wRs+'\n'
wf.write(lineS)
wf.close()
#得到指定设置项的值
def getIniSetValue(self,keyStr,defValue=None):
return self.dicSetIni.get(keyStr,defValue) #注意,返回的值可能是int float str True Flase list类型,应保证接收端是明确的
#更改当前类中字典设置项的值为一新值
def setIniSetValue(self,keyStr,newValue):
self.dicSetIni[keyStr]=newValue #注意,设置的值可能是int float str True Flase list类型,应明确同原值类型是匹配的
#****************************************************************************************
#定义操作注册表的类:还未编制....
class setReg():
def __init__(self):
self.dicSetReg={} #Reg设置全部内容此字典变量中保存
#得到注册表的键值
def getRegKey(self,keyID,keystr):
pass
自定义的标签类模块文件QLabelEx.py代码如下:
#模块名:QLabelEx.py:将QT5/6的标签、编辑框、按纽等常规控件类再扩展对应的子类,更方便快速使用
#包含类名: QLabelEx: 继承QtLable类的扩展类:支持低代码显示图片,动画等功能
# QLabelExLstImg: 继承QLabelEx类的扩展类,用于可以定时显示指定的图象列表
# QLabelExBtn: 继承QLabelEx类的扩展类,用于模仿图象按纽,移入移出单击控件时可以用不同的透明图象显示
# QLabelExBtnCheck: 继承QLabelEx类的扩展类,用于模仿check多选图象按纽
# QLabelExBtnRadio: 继承QLabelEx类的扩展类,用于模仿Radio单选图象按纽
# :
import os,sys,time,math,copy,random
import PySide6
from PySide6 import *
from PySide6 import QtCore
from PySide6.QtWidgets import *
from PySide6.QtCore import *
#from PySide6.QtGui import *
from PySide6.QtGui import (QCursor,QIcon,QImage,QPicture,QDesktopServices, QGuiApplication,
QKeySequence, QShortcut, QStandardItem,QStandardItemModel)
from PySide6.QtGui import (QPen,QBrush,QColor,QFont,QPalette,QPainter,QGradient,QMatrix4x4,
QPlatformSurfaceEvent, QSurface, QWindow,QSurfaceFormat)
from PySide6.QtGui import (QRhi, QRhiBuffer,QPixmap,QAction,QWheelEvent,
QRhiDepthStencilClearValue,
QRhiGraphicsPipeline, QRhiNullInitParams,
QRhiGles2InitParams, QRhiRenderBuffer,
QRhiSampler, QRhiShaderResourceBinding,
QRhiShaderStage, QRhiTexture,QMovie,
QRhiVertexInputAttribute, QRhiVertexInputBinding,
QRhiVertexInputLayout, QRhiViewport, QShader)
lst_ImgExName=['BMP','JPG','JPEG','PNG','TIF','TIFF','TGA','WMF','SVG','HEIF','RAW','WEBP']
lst_MovExName=['GIF','AVI','MPEG','MP4','MOV','MKV','WMV','FLV','RMVB','RM','RAM']
lst_AlignType=['TL','TC','TR','CL','CC','CR','DL','DC','DR']
#########################################################################################################################
#重载标签类,标签可透明显示图像,用于在窗体上加载小分部图像
class QLabelEx(QLabel):
objcount=0 #
signal_Leftclicked = Signal(object) #自定信号,标签被左键单击,传回参数:控件对象本身
signal_Rightclicked = Signal(object) #自定信号,标签被右键单击,传回参数:控件对象本身
signal_Midclicked = Signal(object) #自定信号,标签被中键单击,传回参数:控件对象本身
signal_LeftDropRelease = Signal(object) #自定信号,标签被左键拖动后释放,传回参数:控件对象本身
#初始化对角需传递的参数为 父类,内容, 创建矩形, 控件透明度 字体 字体颜色 背景颜色
def __init__(self,parent=None,text='',x=0,y=0,w=50,h=15,transt=1.0,font=QFont('宋体', 11),fcolor=QColor(0,0,0)):
super(QLabelEx, self).__init__(parent)
self.type='TXT' #标签控件的类型,'TXT'=纯文本标签,‘IMG'=可显示图片标签 'MOV':可播放动画标签
if(x==0 and y==0 and w==50 and h==15):
self.setGeometry(x,y,w,h)
self.oldSize=QRect(x,y,w,h) #记录最初创建的位置及尺寸
self.ctlRect=QRect(x,y,w,h) #控件的矩形区域
self.imgRect=QRect() #如果控件加载了图象或视频自身尺寸的矩形区域
self.bDrawRect = False #是否在标签控件外边画出矩形框
self.rectCol=QColor(255,0,0) #画矩形边框的颜色
self.rectPenWidth=2 #画矩形边框的线宽度
self.bChgCtlRect=False #如果self.ctlRect不能满足文字、图象的矩形区域时,是否允许控件变化其矩形来适应文字或图象要求的矩形区域
self.move_Flag = False #标签控件是否可以主窗体上拖动:对窗体元素,应设置为False
self.bZoomImgSize=True #控件的矩形区同图象的矩形区不相符时,是否允许图象或视频自动缩放以适应控件矩形区
self.setScaledContents(self.bZoomImgSize) # 设置标签的图片,设置True时图片自适应控件,为False时,只显示控件范围图片
self.setAutoFillBackground(False) #不允许自动填充背景底色
self.text=text #标签是文本类型时显示的内容
self.drawText=text #标签是图片或视频类型时显示的内容
self.alignFlags=Qt.AlignTop | Qt.AlignLeft #对齐方式
self.bDrawTxt = False #显示图片的同时,是否将self.drawText画到图象上
self.fontCol=fcolor #字体颜色
self.bkCol=QColor(255,255,255) #如设置不透明时的标签背景颜色
self.setFont(font)
palette = QPalette()
palette.setColor(QPalette.ColorRole.WindowText, self.fontCol) #设置字体颜色
self.setPalette(palette)
self.SetTransparent(transt) #设置控件的透明度,1=不透明,0=完全透明
self.setText(text)
self.global_X=self.gobal_Y=0 #标签相对屏幕左上点(0,0)的坐标
self.startPoint=QPoint() #鼠标在标签控件上压下开始的坐标点
self.endPoint=QPoint() #鼠标在标签控件上压下结束时的坐标点
self.mouse_X=self.mouse_Y=0 #鼠标在标签控件上相对标签控件范围的坐标
self.origin_x=self.origin_y=0
self.globalmouse_X=self.globalmouse_Y=0 #鼠标在标签控件上相对屏幕左上点(0,0)的坐标
self.oldPos=QPoint() #移动前标签控件的位置
self.curImgfilename=''
self.curMovFileName=''
self.curData=None #当标签是加载的图片或动画时,将文件同容加载到内存中再显示,避免频繁读写文件
self.image=QImage()
self.curRotAngle=0.0 #图片当前旋转角度(角度,非弧度,顺时针为正)
self.gifSpeed=200 #当前要播放的GIF动画的速度
self.drawtxtX=self.drawtxtY=0
self.bColType=False #是颜色块时,支持拖放函数
self.colText='' #本标签当前保存的颜色字串
self.setAcceptDrops(True) #设置标签控件支持接收:无用
#如要要不透明的标签,设置标签背景色
def setBkCol(self,bkcol=QColor(255,255,255)):
self.bkCol=bkcol
palette = QPalette()
self.setAutoFillBackground(True)
palette.setColor(QPalette.ColorRole.Window, self.bkCol)
self.setPalette(palette)
#设置标签中的文字/图片/GIF动画对齐方式Qt.AlignLeft:左对齐Qt.AlignRight:右对齐 Qt.AlignTop:顶部对齐Qt.AlignBottom:底部对齐Qt.AlignHCenter:水平居中Qt.AlignVCenter:垂直居中Qt.AlignCenter:同时水平和垂直居中
def SetAlign(self,at='TL'): #
at=at.upper()
self.alignFlags=Qt.AlignTop | Qt.AlignLeft
if(at=='TL'): self.alignFlags=Qt.AlignTop | Qt.AlignLeft
elif(at=='TC'): self.alignFlags=Qt.AlignTop | Qt.AlignHCenter
elif(at=='TR'): self.alignFlags=Qt.AlignTop | Qt.AlignRight
elif(at=='CL'): self.alignFlags=Qt.AlignVCenter | Qt.AlignLeft
elif(at=='CC'): self.alignFlags=Qt.AlignVCenter | Qt.AlignHCenter
elif(at=='CR'): self.alignFlags=Qt.AlignVCenter | Qt.AlignRight
elif(at=='DL'): self.alignFlags=Qt.AlignBottom | Qt.AlignLeft
elif(at=='DC'): self.alignFlags=Qt.AlignBottom | Qt.AlignHCenter
elif(at=='DR'): self.alignFlags=Qt.AlignBottom | Qt.AlignRight
else:self.alignFlags=Qt.AlignVCenter | Qt.AlignLeft
self.setAlignment(self.alignFlags)
self.setText(self.text) #有时并没有出现对齐效果,只能采用先清除再重加载的方式
#旋转控件中的图片一指定的角度:角度为正东向,向顺时针旋转的角度为正,反之为负(非弧度)
def RotateImg(self,angle):
if(self.type=='IMG' and self.curData!=None):
transform = QTransform()
transform.rotate(angle)
self.image=self.image.transformed(transform);
self.setPixmap(QPixmap.fromImage(self.image)) # 显示图片到Qlabel控件
if(self.bChgCtlRect): #为真时,旋转后同时调整控件大小
self.resize(self.image.width(),self.image.height())
#设置标签控件在加载图片时,控件尺寸同图片尺寸不符时,是否允许控件调整自身的矩形区域,以适应1:1的图象显示
def ObjToImgSize(self):
self.setScaledContents(self.bZoomImgSize) #不允许自适应控件,只1:1显示到控件中,同时调整控件大小
if(self.bChgCtlRect): #只有先设置此属性为真时,才允许变化控件尺寸
if(self.curData!=None):
image= QImage.fromData(self.curData)
self.resize(image.width(),image.height()) #用下行后用设置参数中的矩形,用本行就是图片本身的尺寸
self.ctlRect=QRect(self.x(),self.y(),self.width(),self.height())
#设置标签加载的文件名称,可以是图片也可以是动画GIF或视频
def LoadFile(self,filename=''):
if(os.path.exists(filename)):
file_extension = str(filename.split(".")[-1]).upper()
bOK=False
for exname in lst_ImgExName:
if file_extension == exname:
self.type='IMG'
bOK=True
break
for exname in lst_MovExName:
if file_extension == exname:
self.type='MOV'
bOK=True
break
if (bOK):
with open(filename, 'rb') as f:
self.curData = f.read()
self.image= QImage.fromData(self.curData)
self.curMovFileName=filename
self.RefreshLable()
else:
print(f'没有找到对应扩展名: {file_extension} 的分类')
self.type='TXT'
self.ReshowText(self.text)
self.ObjToImgSize()
else:
self.type='TXT'
self.ReshowText(self.text)
#清除图象,重新显示标签的文本
def ReshowText(self,txt):
self.text=txt
self.clear()
self.type='TXT'
self.setText(txt)
#设置显示图片的同时,画到标签控件上的文本,传入文本为空时,同标签控件初始化时的字符串一致,图形模式下,不调用此函数,默认不会绘出文本
def setDrawText(self,txt,x=0,y=0):
self.bDrawTxt=True
if(len(txt)==0):
self.drawText=self.text
else:
self.drawText=txt
self.drawtxtX=x
self.drawtxtY=y
#重新显示标签(在用了LoadFile后)
def RefreshLable(self): #如果图片被调整乱了,且不想要控件尺寸同图片尺寸
self.setScaledContents(self.bZoomImgSize) #不允许自适应控件,只1:1显示到控件中,同时调整控件大小
if(self.type=='IMG'):
self.image= QImage.fromData(self.curData)
self.setPixmap(QPixmap.fromImage(self.image)) # 显示图片到Qlabel控件
self.imgRect=QRect(self.x(),self.y(),self.image.width(),self.image.height())
if(self.bChgCtlRect):
self.resize(self.image.width(),self.image.height()) #用下行后用设置参数中的矩形,用本行就是图片本身的尺寸
elif(self.type=='MOV'):
"""
#用内存文件来播放GIF没成功??
#从bytes创建一个QBuffer对象
buffer=QBuffer()
buffer.open(QBuffer.ReadOnly)
buffer.write(self.curData)
#self.movie = QMovie(self)
#self.movie.setDevice(QByteArray(self.curData))
# 使用QMovie来播放GIF
#self.movie = QMovie(buffer)
#self.movie.setSpeed(10)
# 将movie应用到label上
self.setMovie(self.movie)
self.total_frame = self.movie.frameCount()
self.gifSpeed=self.movie.speed()
print(f'当前GIF文件=’{self.curMovFileName}‘,总帧数={self.total_frame},默认正常播放速度={self.gifSpeed}')
self.set_GifSpeed(2.0) #设置播放动画GIF的整速度:方法接受的是每1000毫秒播放的帧数比例,如是1:表示,一秒显示全部帧数,0.5表示一秒显示半数的帧数。
self.movie.start()
#self.setLabelLayer(True)
"""
self.movie = QMovie(self.curMovFileName)
# 将movie应用到label上
self.setMovie(self.movie)
self.total_frame = self.movie.frameCount()
self.gifSpeed=self.movie.speed()
#print(f'当前GIF文件=’{self.curMovFileName}‘,总帧数={self.total_frame},默认正常播放速度={self.gifSpeed}')
self.set_GifSpeed(self.gifSpeed) #设置播放动画GIF的整速度:方法接受的是每1000毫秒播放的帧数比例,如是1:表示,一秒显示全部帧数,0.5表示一秒显示半数的帧数。
self.movie.start()
#"""
else: #self.type=='TXT'
pass
#设置播放GIF动画的速度: interval值哦本准备播放GIF的默认播放速度的倍数,如当前GIF默认播放速度为100
def set_GifSpeed(self,interval=100.0):
self.gifSpeed=interval
if(self.type=='MOV' and self.movie!=None):
self.movie.setSpeed(interval) # 设置播放速度
#设置标签控件的透明程度:对文字及图片均有效
def SetTransparent(self,trans):
if trans>1:trans=1
elif trans<0:trans=0
self.Transparent=trans
opacity_effect = QGraphicsOpacityEffect(parent=self)
opacity_effect.setOpacity(trans) # 设置透明度
self.setGraphicsEffect(opacity_effect) # 将透明度效果应用到标签上
#self.setWindowOpacity(self.Transparent)
#设置本标签对象是在最上方还是在最下方
def setLabelLayer(self,bTop=True):
if(bTop):self.raise_()
else:self.lower()
#设置标签显示的文本的字体
def setTextFont(self,fontname='宋体',fontsize=11,bBold=False,bItalic=False,bUnderline=False):
font = QFont()
font.setFamily(fontname) # 设置字体名称
font.setPointSize(fontsize) # 设置字体大小
font.setBold(bBold) # 设置字体加粗
font.setItalic(False)
font.setUnderline(False)
self.setFont(font)
#设置标签显示的文本的字体
def setTextCol(self,fcol=QColor(0,0,0)):
self.setStyleSheet(f"QLabel {{ color: {fcol.name()}; }}")
#设置标签显示的文本的字体
def setTextBkCol(self,bkcol=QColor(255,255,255)):
if( not self.bTransparent): #对非透明模式才支持设置标签背景颜色
self.setAutoFillBackground(True) # 确保背景自动填充
palette = self.palette()
palette.setColor(QPalette.ColorRole.Window, bkcol)
self.setPalette(palette)
#得到标签矩形中心位置
def getObjRect(self):
size = self.geometry()
self.centerX=size.x()+size.width()/2
self.centerY=size.y()+size.height()/2
return size.x(),size.y(),size.width(),size.height()
#鼠标按下事件重载
def mousePressEvent(self, event):
self.startPoint=event.pos()
self.oldPos=QPoint(event.globalX(),event.globalY())
# 核心部分: 当鼠标点击是左键 并且 在top控件内点击时候触发
if (event.button() == Qt.LeftButton and self.move_Flag): #and self.top.underMouse():
self.setCursor(Qt.OpenHandCursor) #移动时设置成手型光标
# 但判断条件满足时候, 把拖动标识位设定为真
#self.move_Flag = True
self.globalmouse_X = event.globalX()
self.globalmouse_Y = event.globalY()
# 获取窗体当前坐标
self.origin_x = self.x()
self.origin_y = self.y()
#鼠标移动事件重载
def mouseMoveEvent(self, event):
# 拖动标识位设定为真时, 进入移动事件
if self.move_Flag:
# 计算鼠标移动的x,y位移
move_x = event.globalX() - self.globalmouse_X
move_y = event.globalY() - self.globalmouse_Y
# 计算窗体更新后的坐标:更新后的坐标 = 原本的坐标 + 鼠标的位移
dest_x = self.origin_x + move_x
dest_y = self.origin_y + move_y
# 移动本标签控件
size = self.geometry()
self.move(dest_x, dest_y)
self.ctlRect=QRect(self.x(),self.y(),self.width(),self.height())
self.setLabelLayer(True) #拖动的标签控件角色在最顶端显示
#print(self.ctlRect)
# 鼠标左键释放
def mouseReleaseEvent(self, event):
self.endPoint=event.pos()
newPos=QPoint(event.globalX(),event.globalY())
if (event.button() == Qt.LeftButton and self.move_Flag):
self.setCursor(Qt.ArrowCursor) # 设定鼠标为普通状态: 箭头
if(self.move_Flag==False): #非对象拖动状态,鼠标在控件区域移动一位置
if(abs(self.endPoint.x()-self.startPoint.x())<2 and abs(self.endPoint.y()-self.startPoint.y())<2 ): #判断是否单击
if(event.button() == Qt.LeftButton):
print('非拖动状态下:是左键单击不是拖动')
self.signal_Leftclicked.emit(self)
elif(event.button() == Qt.RightButton):
print('非拖动状态下:是右键单击不是拖动')
self.signal_Rightclicked.emit(self)
elif(event.button() == Qt.MidButton):
print('非拖动状态下:是中键单击不是拖动')
self.signal_Midclicked.emit(self)
else:
print('非拖动状态下,鼠标在控件上移动了一位置')
else: #拖动对象状态,除非一点也没拖动,否则不对对象处理
if(abs(self.oldPos.x()-newPos.x())<2 and abs(self.oldPos.y()-newPos.y())<2 ):
print('虽是拖动状态但是并没拖动对象')
if(event.button() == Qt.LeftButton):
print('拖动状态下:是左键单击不是拖动')
self.signal_Leftclicked.emit(self)
elif(event.button() == Qt.RightButton):
print('拖动状态下:是右键单击不是拖动')
self.signal_Rightclicked.emit(self)
elif(event.button() == Qt.MidButton):
print('拖动状态下:是中键单击不是拖动')
self.signal_Midclicked.emit(self)
else: #拖动对象移动了位置
print('拖动状态下:左键拖动控件移动了位置')
self.signal_LeftDropRelease.emit(self) #发送信号给父窗体,将当前控件的矩self传回,供其判断是否在控件的矩形区内
if(self.bColType): #加的,是颜色块时,回原最初位置
self.setGeometry(self.oldSize) #回原位置
#重载绘图函数:
def paintEvent(self, event):
if (self.bDrawRect): #标签控件是否绘制边框架
self.DrawObjRect(self.rectCol,self.rectPenWidth) #为控件画出外边框
if(self.bDrawTxt): #是否在标签控件上画出文本
pen = QPen() # 创建画笔对象
painter = QPainter(self) # 此QPainter只能在paintEvent中定义,不能定义成类的self成员对象,也不能在其地方(如其他窗口,线程中)定义,否则没有绘画功能显示
#绘制
pen.setColor(self.fontCol)
painter.drawText(self.drawtxtX,self.drawtxtY,self.width(),self.height(),self.alignFlags,self.drawText)
return super().paintEvent(event) #调用主窗口的重绘事件,不用不会加载动画只显示第一帖,用了动画加载正常,但又多了一静态图第一帖
#画出当前控件的矩形框(用于对象被选择时)
def DrawObjRect(self,pencol,penwidth):
self.rectCol=pencol
self.rectPenWidth=penwidth
if(self.bDrawRect):
pen = QPen() # 创建画笔对象
brush = QBrush() # 创建画刷对象
painter = QPainter(self) # 此QPainter只能在paintEvent中定义,不能定义成类的self成员对象,也不能在其地方(如其他窗口,线程中)定义,否则没有绘画功能显示
#绘制
pen.setColor(pencol)
pen.setStyle(Qt.SolidLine)
pen.setWidth(penwidth) # 设置画笔宽度
painter.setPen(pen) # 设置画笔
self.pixmap = QPixmap.fromImage(self.image)
#painter.drawPixmap(0, 0, self.pixmap)
painter.drawRect(0,0,self.width(),self.height())
#:无效:拖拽进入事件处理方法
def dragEnterEvent(self, e):
print(f'def dragEnterEvent(self, e):{e}')
if e.mimeData().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
#:无效:放下事件处理方法,将拖拽操作中的文本添加到下拉列表中
def dropEvent(self, e):
print(f'def dropEvent(self, e):{e}')
#self.setText(e.mimeData().text())
#:窗体拖放移动事件
def dragMoveEvent(self,event):
print('标签拖放移动事件')
#无效:窗体获得焦点事件无效:
def focusInEvent(self,event):
print('标签获得焦点事件')
#定义可用计时器播放连续图片以形成动画的标签扩展类
class QLabelExLstImg(QLabelEx):
def __init__(self, parent,x,y,w,h,text='',transt=1.0,font=QFont('宋体', 11),fcolor=QColor(0,0,0)):
super().__init__(parent,x,y,w,h,text,transt,font,fcolor)
self.type='IMG'
self.memImgFile=[]
self.curtimespeed=100
self.curindex = 0
self.curPlayCount=0
self.imgPlayCount = 0 #图象列表播放遍数,0=循环播放,大于0时为播放的遍数后,自动停止到最后一帖位置
self.bStop=False #指定遍数放完后,此开关为True
# 创建计时器,设置时间间隔为100毫秒(1秒)
self.timer = QTimer()
# 计时器信号连接到timeout_slot槽函数
self.timer.timeout.connect(self.time_objmove_slot)
self.timer.start(self.curtimespeed) # 开始计时器:
#设置要播放的图片列表,及图象列表间播放的间隔
def setLstImg(self,lstfilename,timesleep=50,playcount=0):
self.bStop=False
self.curPlayCount=0
self.lstImgFile=lstfilename
self.curtimespeed=timesleep
self.imgPlayCount = playcount
self.makeMemFile()
#创建图片的内存文件
def makeMemFile(self):
self.memImgFile.clear()
for imgFilename in self.lstImgFile:
# 打开图片
if(os.path.exists(imgFilename)):
with open(imgFilename, 'rb') as f:
img = f.read()
self.memImgFile.append(img)
#得到对象的文件内存数据:序号
def getImgData(self,index):
count=len(self.memImgFile)
if(count>0 and index>=0 and index<count):
return self.memImgFile[index]
else:
print(f'返回一空图象{index},{count}')
return None
#显示内存文件数据:序号
def showMemImg(self,index):
if(self.getImgData(index)!=None):
self.curData = self.getImgData(index)
self.RefreshLable()
#在标签控件中播放下一帧
def next_frame(self):
count=len(self.memImgFile)
if(count==0 or self.bStop):return
if(self.curindex>=(count-1)): #已循环一遍
if(self.imgPlayCount>=0):
self.curPlayCount+=1
if(self.imgPlayCount>0 and self.curPlayCount>=self.imgPlayCount):
self.curPlayCount = self.imgPlayCount+1
self.curData = self.getImgData(count-1)
self.bStop=True
return
self.curData = self.getImgData(self.curindex)
self.curindex=0
else:
self.curData = self.getImgData(self.curindex)
self.curindex = (self.curindex + 1) % count
self.timer.setInterval(self.curtimespeed)
#对象计时器来显示动画效果
def time_objmove_slot(self):
self.next_frame() #得到下一帖图象
#移动前对图象进行方向进行处理
if (self.curData==None): # 没图片,则不执行任何操作
return
size = self.geometry()
fx = size.x()+size.width()/2 #对象矩形中心的坐标
fy = size.y()+size.height()/2
if(self.type=='IMG'): #对GIF,计时器会会造成播放过快无法控制
self.RefreshLable()
#定义标签类按纽扩展类
class QLabelExBtn(QLabelEx):
def __init__(self, parent,x,y,w,h,text='',transt=1.0,font=QFont('宋体', 11),fcolor=QColor(0,0,0)):
super().__init__(parent,x,y,w,h,text,transt,font,fcolor)
self.type='IMG'
self.memImgFile=[]
self.bEnable=True
#设置要图片列表:0=按纽常规状态下的图片,1=鼠标移入控件时的图片,2=鼠标点击按纽时的图片,3=按纽失效时的图片
def setBtnImg(self,lstfilename):
self.lstImgFile=lstfilename
self.makeMemFile()
#创建图片的内存文件
def makeMemFile(self):
self.memImgFile.clear()
for imgFilename in self.lstImgFile:
# 打开图片
if(os.path.exists(imgFilename)):
with open(imgFilename, 'rb') as f:
img = f.read()
self.memImgFile.append(img)
#得到对象的文件内存数据:序号
def getImgData(self,index):
count=len(self.memImgFile)
if(count>0 and index>=0 and index<count):
return self.memImgFile[index]
else:
print(f'返回一空图象{index},{count}')
return None
#显示内存文件数据:序号
def showMemImg(self,index):
if(self.getImgData(index)!=None):
self.curData = self.getImgData(index)
self.RefreshLable()
#移入控件事件
def enterEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
self.showMemImg(1)
#移出控件事件
def leaveEvent(self,event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
self.showMemImg(0)
#鼠标按下事件重载
def mousePressEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
if (event.button() == Qt.LeftButton):
self.showMemImg(2)
return super().mousePressEvent(event)
#鼠标移动事件重载
def mouseMoveEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
return super().mouseMoveEvent(event)
# 鼠标左键释放
def mouseReleaseEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
return super().mouseReleaseEvent(event)
def setBtnEnable(self,enable):
self.bEnable = enable
print(f'self.bEnable={self.bEnable}')
if(enable):self.showMemImg(0)
else:self.showMemImg(3)
#定义标签CHECK类按纽扩展类
class QLabelExBtnCheck(QLabelEx):
def __init__(self, parent,x,y,w,h,text='',transt=1.0,font=QFont('宋体', 11),fcolor=QColor(0,0,0)):
super().__init__(parent,x,y,w,h,text,transt,font,fcolor)
self.type='IMG'
self.groupID=0 #check按纽所属组数
self.move_Flag=False #控件不可在主窗体上被拖动
self.memImgFile=[]
self.bEnable=True #是否可用
self.bChecked=False #是否被选中
#设置按纽所属组
def setBtnGroup(self,group):
self.groupID=group
#设置要图片列表:0=按纽未被选中时的图片,1=按纽被选中时的图片,2=按纽未被选中失效时的图片,3=按纽被选中失效时的图片
def setBtnImg(self,lstfilename):
self.lstImgFile=lstfilename
self.makeMemFile()
#创建图片的内存文件
def makeMemFile(self):
self.memImgFile.clear()
for imgFilename in self.lstImgFile:
# 打开图片
if(os.path.exists(imgFilename)):
with open(imgFilename, 'rb') as f:
img = f.read()
self.memImgFile.append(img)
#得到对象的文件内存数据:序号
def getImgData(self,index):
count=len(self.memImgFile)
if(count>0 and index>=0 and index<count):
return self.memImgFile[index]
else:
print(f'返回一空图象{index},{count}')
return None
#显示内存文件数据:序号
def showMemImg(self,index):
if(self.getImgData(index)!=None):
self.curData = self.getImgData(index)
self.RefreshLable()
#鼠标按下事件重载
def mousePressEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
if (event.button() == Qt.LeftButton):
self.bChecked=not self.bChecked
if(self.bChecked):
self.showMemImg(1)
else:
self.showMemImg(0)
return super().mousePressEvent(event)
#鼠标移动事件重载
def mouseMoveEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
return super().mouseMoveEvent(event)
# 鼠标左键释放
def mouseReleaseEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
return super().mouseReleaseEvent(event)
def setBtnEnable(self,enable):
self.bEnable = enable
if(enable):
if(self.bChecked):
self.showMemImg(1)
else:
self.showMemImg(0)
else:
if(self.bChecked):
self.showMemImg(2)
else:
self.showMemImg(3)
#定义标签Radio类按纽扩展类
class QLabelExBtnRadio(QLabelEx):
lst_btnRadio=[] #定义到类构造外,的有类成员共用,每增加一个类成员实例化对象,同时加到此列表中以处理类似radio单选按纽的效果
signal_RadioBntSelected = Signal(int,object) #自定信号,radio类按纽被单击时,通知主窗口,所有本组中的其他同类radio按结全部去除被选择状态,传回参数:所属组号
def __init__(self, parent,x,y,w,h,text='',transt=1.0,font=QFont('宋体', 11),fcolor=QColor(0,0,0)):
super().__init__(parent,x,y,w,h,text,transt,font,fcolor)
self.type='IMG'
self.groupID=0 #check按纽所属组数
self.ID=0
self.move_Flag=False #控件不可在主窗体上被拖动
self.memImgFile=[]
self.bEnable=True #是否可用
self.bChecked=False #是否被选中
QLabelExBtnRadio.lst_btnRadio.append(self) #单选按纽本身加入公用列表
#设置按纽所属组和在组中的编号ID
def setBtnGroup(self,group,ID):
self.groupID=group
self.ID=ID
#设置要图片列表:0=按纽未被选中时的图片,1=按纽被选中时的图片,2=按纽未被选中失效时的图片,3=按纽被选中失效时的图片
def setBtnImg(self,lstfilename):
self.lstImgFile=lstfilename
self.makeMemFile()
#创建图片的内存文件
def makeMemFile(self):
self.memImgFile.clear()
for imgFilename in self.lstImgFile:
# 打开图片
if(os.path.exists(imgFilename)):
with open(imgFilename, 'rb') as f:
img = f.read()
self.memImgFile.append(img)
#得到对象的文件内存数据:序号
def getImgData(self,index):
count=len(self.memImgFile)
if(count>0 and index>=0 and index<count):
return self.memImgFile[index]
else:
print(f'返回一空图象{index},{count}')
return None
#显示内存文件数据:序号
def showMemImg(self,index):
if(self.getImgData(index)!=None):
self.curData = self.getImgData(index)
self.RefreshLable()
#鼠标按下事件重载
def mousePressEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
if (event.button() == Qt.LeftButton):
self.setBtnChecked(True) #本对象被选中,同组内的其他成员去除选中状态,一组成员中只能有一个被选中
for obj in QLabelExBtnRadio.lst_btnRadio:
if(self.groupID==obj.groupID and self.ID!=obj.ID): #是同一组其他对象
obj.setBtnChecked(False)
self.signal_RadioBntSelected.emit(self.groupID,self)
return super().mousePressEvent(event) #不调用父类的按下事件
#鼠标移动事件重载
def mouseMoveEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
return super().mouseMoveEvent(event)
# 鼠标左键释放
def mouseReleaseEvent(self, event):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
return super().mouseReleaseEvent(event)
def setBtnEnable(self,enable):
self.bEnable = enable
if(enable):
if(self.bChecked):
self.showMemImg(1)
else:
self.showMemImg(0)
else:
if(self.bChecked):
self.showMemImg(2)
else:
self.showMemImg(3)
#设置Radio按纽的显示状态
def setBtnChecked(self,checked):
if(not self.bEnable): return #当按纽状记为不可用时,不接受鼠标事件
self.bChecked = checked
if(self.bChecked):
self.showMemImg(1)
else:
self.showMemImg(0)
自定义一些全局变量和全局公用函数的模块代码文件g.py
#g.py:全局变量及全局函数模块,将常用的一个通用变量,全局变量,通用函数在此模块中定义,可直接使用,如报错可使用g.变量或g.模块名也行。
#定义一全局模块,定整个应用程序用的全局变量和全局函数
import os,sys #导入系统模块
import time
import math
from math import *
import copy
import numpy as np
import scipy as sp
from scipy.spatial import KDTree
import random
import re
##########################################################################
#定义全局变更
g_appPath=sys.path[0] #应用程序主程序目录,要在所有模块使用
g_dicSet={} #得到当前的系统设置值(字典)
g_MAX_ID=10000 #定义最大ID号的合局变量,此变更在外部引用此变量并设置别名时,初使值会同它一样,但实际各是各的值了,互不关联,除非直接引用
#在其他模块要使用此全局变量,用 模块名.变量名 #在本模块中的函数及类中要使用此变量,需加上语句:global 变量名,否则函数体内的同名变量只是函数中的一私有变量
g_startTime=0.0
#PYTHONT或PYQT5/6支持的可用文字表示的颜色列表
dic_Cols={"lightpink":[[255,192,193],0xFFB6C1,"浅粉红色"],
"pink":[[255,192,203],0xFFC0CB,"粉红色"],
"crimson":[[220,20,60],0xDC143C,"猩红色"],
"lavenderblush":[[255,240,245],0xFFF0F5,"脸红的淡紫色"],
"palevioletred":[[219,112,147],0xDB7093,"苍白的紫罗兰红色"],
"hotpink":[[255,105,180],0xFF69B4,"热情的粉红"],
"deeppink":[[255,20,147],0xFF1493,"深粉色"],
"mediumvioletred":[[199,21,133],0xC71585,"适中的紫罗兰红色"],
"orchid":[[218,112,214],0xDA70D6,"兰花的紫色"],
"thistle":[[216,191,216],0xD8BFD8,"蓟色"],
"plum":[[221,160,221],0xDDA0DD,"李子色"],
"violet":[[238,130,238],0xEE82EE,"紫罗兰色"],
"magenta":[[255,0,255],0xFF00FF,"洋红色"],
"fuchsia":[[255,0,255],0xFF00FF,"灯笼海棠(紫红色)"],
"darkmagenta":[[139,0,139],0x8B008B,"深洋红色"],
"purple":[[128,0,128],0x800080,"紫色"],
"mediumorchid":[[186,85,211],0xBA55D3,"适中的兰花紫色"],
"darkviolet":[[148,0,211],0x9400D3,"深紫罗兰色"],
"darkorchid":[[153,50,204],0x9932CC,"深兰花紫"],
"indigo":[[75,0,130],0x4B0082,"靛青色"],
"blueviolet":[[138,43,226],0x8A2BE2,"深紫罗兰的蓝色"],
"mediumpurple":[[147,112,219],0x9370DB,"适中的紫色"],
"mediumslateblue":[[123,104,238],0x7B68EE,"适中的板岩暗蓝灰色"],
"slateblue":[[106,90,205],0x6A5ACD,"板岩暗蓝灰色"],
"darkslateblue":[[72,61,139],0x483D8B,"深岩暗蓝灰色"],
"lavender":[[230,230,250],0xE6E6FA,"熏衣草花的淡紫色"],
"ghostwhite":[[248,248,255],0xF8F8FF,"幽灵的白色"],
"blue":[[0,0,255],0x0000FF,"纯蓝色"],
"mediumblue":[[0,0,205],0x0000CD,"适中的蓝色"],
"midnightblue":[[25,25,112],0x191970,"午夜的蓝色"],
"darkblue":[[0,0,139],0x00008B,"深蓝色"],
"navy":[[0,0,128],0x000080,"海军蓝色"],
"royalblue":[[65,105,225],0x4169E1,"皇军蓝色"],
"cornflowerblue":[[100,149,237],0x6495ED,"矢车菊的蓝色"],
"lightsteelblue":[[176,196,222],0xB0C4DE,"淡钢蓝色"],
"lightslategray":[[119,136,153],0x778899,"浅石板灰色"],
"slategray":[[112,128,144],0x708090,"石板灰色"],
"dodgerblue":[[30,144,255],0x1E90FF,"道奇蓝色"],
"aliceblue":[[240,248,255],0xF0F8FF,"爱丽丝蓝"],
"steelblue":[[70,130,180],0x4682B4,"钢蓝"],
"lightskyblue":[[135,206,250],0x87CEFA,"淡蓝色"],
"skyblue":[[135,206,235],0x87CEEB,"天蓝色"],
"deepskyblue":[[0,191,255],0x00BFFF,"深天蓝"],
"lightblue":[[173,216,230],0xADD8E6,"淡蓝"],
"powderblue":[[176,224,230],0xB0E0E6,"火药蓝"],
"cadetblue":[[95,158,160],0x5F9EA0,"军校蓝"],
"azure":[[240,255,255],0xF0FFFF,"蔚蓝色"],
"lightcyan":[[225,255,255],0xE1FFFF,"淡青色"],
"paleturquoise":[[175,238,238],0xAFEEEE,"苍白的绿宝石"],
"cyan":[[0,255,255],0x00FFFF,"青色"],
"aqua":[[0,255,255],0x00FFFF,"水绿色"],
"darkturquoise":[[0,206,209],0x00CED1,"深绿宝石色"],
"darkslategray":[[47,79,79],0x2F4F4F,"深石板灰色"],
"darkcyan":[[0,139,139],0x008B8B,"深青色"],
"teal":[[0,128,128],0x008080,"水鸭色"],
"mediumturquoise":[[72,209,204],0x48D1CC,"适中的绿宝石色"],
"lightseagreen":[[32,178,170],0x20B2AA,"浅海洋绿色"],
"turquoise":[[64,224,208],0x40E0D0,"绿宝石色"],
"aquamarine":[[127,255,170],0x7FFFAA,"绿玉、碧绿色"],
"mediumaquamarine":[[0,250,154],0x00FA9A,"适中的碧绿色"],
"mediumspringgreen":[[245,255,250],0xF5FFFA,"适中的春天绿色"],
"mintcream":[[0,255,127],0x00FF7F,"薄荷奶油色"],
"springgreen":[[60,179,113],0x3CB371,"春天的绿色"],
"seagreen":[[46,139,87],0x2E8B57,"海洋绿色"],
"honeydew":[[240,255,240],0xF0FFF0,"蜂蜜色"],
"lightgreen":[[144,238,144],0x90EE90,"淡绿色"],
"palegreen":[[152,251,152],0x98FB98,"苍白的绿色"],
"darkseagreen":[[143,188,143],0x8FBC8F,"深海洋绿"],
"limegreen":[[50,205,50],0x32CD32,"酸橙绿"],
"lime":[[0,255,0],0x00FF00,"酸橙色"],
"forestgreen":[[34,139,34],0x228B22,"森林绿"],
"green":[[0,128,0],0x008000,"纯绿"],
"darkgreen":[[0,100,0],0x006400,"深绿色"],
"chartreuse":[[127,255,0],0x7FFF00,"查特酒绿"],
"lawngreen":[[124,252,0],0x7CFC00,"草坪绿"],
"greenyellow":[[173,255,47],0xADFF2F,"绿黄色"],
"olivedrab":[[85,107,47],0x556B2F,"橄榄土褐色"],
"beige":[[107,142,35],0x6B8E23,"米色(浅褐色)"],
"lightgoldenrodyellow":[[250,250,210],0xFAFAD2,"浅秋麒麟黄"],
"ivory":[[255,255,240],0xFFFFF0,"象牙色"],
"lightyellow":[[255,255,224],0xFFFFE0,"浅黄色"],
"yellow":[[255,255,0],0xFFFF00,"纯黄"],
"olive":[[128,128,0],0x808000,"橄榄色"],
"darkkhaki":[[189,183,107],0xBDB76B,"深卡其布色"],
"lemonchiffon":[[255,250,205],0xFFFACD,"柠檬薄纱色"],
"palegoldenrod":[[238,232,170],0xEEE8AA,"灰秋麒麟色"],
"khaki":[[240,230,140],0xF0E68C,"卡其布色"],
"gold":[[255,215,0],0xFFD700,"金色"],
"cornsilk":[[255,248,220],0xFFF8DC,"玉米色"],
"goldenrod":[[218,165,32],0xDAA520,"秋麒麟色"],
"floralwhite":[[255,250,240],0xFFFAF0,"花的白色"],
"oldlace":[[253,245,230],0xFDF5E6,"老饰带色"],
"wheat":[[245,222,179],0xF5DEB3,"小麦色色"],
"moccasin":[[255,228,181],0xFFE4B5,"鹿皮鞋色"],
"orange":[[255,165,0],0xFFA500,"橙色"],
"papayawhip":[[255,239,213],0xFFEFD5,"番木瓜色"],
"blanchedalmond":[[255,235,205],0xFFEBCD,"漂白的杏仁色"],
"navajowhite":[[255,222,173],0xFFDEAD,"纳瓦尔白色"],
"antiquewhite":[[250,235,215],0xFAEBD7,"古代的白色"],
"tan":[[210,180,140],0xD2B48C,"晒黑色"],
"burlywood":[[222,184,135],0xDEB887,"结实的树色"],
"bisque":[[255,228,196],0xFFE4C4,"(浓汤)乳脂,番茄色"],
"darkorange":[[255,140,0],0xFF8C00,"深橙色"],
"linen":[[250,240,230],0xFAF0E6,"亚麻布色"],
"peru":[[205,133,63],0xCD853F,"秘鲁色"],
"peachpuff":[[255,218,185],0xFFDAB9,"桃色"],
"sandybrown":[[244,164,96],0xF4A460,"沙棕色"],
"chocolate":[[210,105,30],0xD2691E,"巧克力色"],
"saddlebrown":[[139,69,19],0x8B4513,"马鞍棕色"],
"seashell":[[255,245,238],0xFFF5EE,"海贝壳色"],
"sienna":[[160,82,45],0xA0522D,"黄土赭色"],
"lightsalmon":[[255,160,122],0xFFA07A,"浅鲜肉(鲑鱼)色"],
"coral":[[255,127,80],0xFF7F50,"珊瑚色"],
"orangered":[[255,69,0],0xFF4500,"橙红色"],
"darksalmon":[[233,150,122],0xE9967A,"深鲜肉(鲑鱼)色"],
"tomato":[[255,99,71],0xFF6347,"番茄色"],
"mistyrose":[[255,228,225],0xFFE4E1,"薄雾玫瑰色"],
"salmon":[[250,128,114],0xFA8072,"鲜肉(鲑鱼)色"],
"snow":[[255,250,250],0xFFFAFA,"白雪色"],
"lightcoral":[[240,128,128],0xF08080,"淡珊瑚色"],
"rosybrown":[[188,143,143],0xBC8F8F,"玫瑰棕色"],
"indianred":[[205,92,92],0xCD5C5C,"印度红色"],
"red":[[255,0,0],0xFF0000,"纯红色"],
"brown":[[165,42,42],0xA52A2A,"棕色"],
"firebrick":[[178,34,34],0xB22222,"耐火砖色"],
"darkred":[[139,0,0],0x8B0000,"深红色"],
"maroon":[[128,0,0],0x800000,"栗色"],
"white":[[255,255,255],0xFFFFFF,"纯白色"],
"whitesmoke":[[245,245,245],0xF5F5F5,"白烟色"],
"gainsboro":[[220,220,220],0xDCDCDC,"亮灰色"],
"lightgrey":[[211,211,211],0xD3D3D3,"浅灰色"],
"silver":[[192,192,192],0xC0C0C0,"银白色"],
"darkgray":[[169,169,169],0xA9A9A9,"深灰色"],
"gray":[[128,128,128],0x808080,"灰色"],
"dimgray":[[105,105,105],0x696969,"暗淡灰"],
"black":[[0,0,0],0x000000,"纯黑色"]
}
#得到PYTHON字符串转换成颜色对象的RGB255列表值,默认返回0-1的值,同vtk要求的值一致
def gf_getColRgb(colstr,deflstcol=[[211,211,211],0xD3D3D3,"浅灰色"],b255=False):
colstr=str.lower(colstr)
lst_col = dic_Cols.get(colstr,deflstcol) #用get函数来得到对应字典key的值,如果没有,得到默认值,防报错
if(not b255):
newCol=[lst_col[0][0]/255.,lst_col[0][1]/255.,lst_col[0][2]/255.]
return newCol
return lst_col[0] #返回lst_col[1]结果一样
#将上面的字典转换成列表['英文色',[R,G,B],'中文色']
def gf_getColList():
lstAllCol=[[]]
lstAllCol.clear()
#遍历字典得到数据值
for key in dic_Cols:
lstDic=dic_Cols[key]
# 'black' [0,0,0] '纯黑'
oneCol=[key,lstDic[0],lstDic[2]]
lstAllCol.append(oneCol)
return lstAllCol
#根据英文,得到色彩的中文名
def gf_getChineseColInfo(colstr):
if(colstr==None):return ''
colstr=str.lower(colstr)
lst_col = dic_Cols.get(colstr,None)
if(lst_col != None):
colstr=f'{lst_col[2]}(r={lst_col[0][0]},g={lst_col[0][1]},b={lst_col[0][2]})'
return colstr
else:
return '未知颜色'
#############################################################################################################
def gf_isNumber(string):
pattern = re.compile(r'^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$')
return bool(pattern.match(string))
#判断当前字符串的类型:0=整数,1=浮点数,2=True,3=False -1=字符串
def gf_strType(string):
if(gf_isNumber(string)):
if '.' in string: return 1 #是浮点数
else: return 0 #是整数
else:
string=string.upper().strip()
if(string=='TRUE'): return 2
if(string=='FALSE'): return 3
else:return -1
#########################################################################################
将上面的全部文件保存在一个目录中,运行示例主窗体即可