效果
QSS
QWidget#widget {
background-color : #eef0f6;
border-left : 0.5px solid lightgray;
border-right : 0.5px solid lightgray;
border-top : 0.5px solid lightgray;
border-bottom : 0.5px solid #e5e5e5;
border-top-left-radius : 5px;
border-top-right-radius : 5px;
}
QWidget#widget_2 {
background-color : #ffffff;
border-left : 0.5px solid lightgray;
border-right : 0.5px solid lightgray;
border-bottom : 0.5px solid #e5e5e5;
border-bottom-left-radius : 5px;
border-bottom-right-radius : 5px;
padding : 5px 5px 5px 5px
}
QPushButton#pushButton
{
font-family : "Webdings" ;
text-align : top;
background : #6DDF6D; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton:hover { background : green; }
QPushButton#pushButton_2
{
font-family : "Webdings" ;
background : #F7D674; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton_2:hover { background : yellow; }
QPushButton#pushButton_3
{
font-family : "Webdings" ;
background : #F76677; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton_3:hover { background : red; }
QPushButton#pushButton_5
{
font-family : "Webdings" ;
background : #A9B4EA; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton_5:hover { background : blue; }
QPushButton#pushButton_6
{
font-family : "Webdings" ;
background : #EFE9B5; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton_6:hover { background : #E5D654; }
QPushButton#pushButton_7
{
font-family : "Webdings" ;
background : #F8F6E4; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton_7:hover { background : #F2EAA7; }
QPushButton#pushButton_8
{
font-family : "Webdings" ;
background : #F8F6E4; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton_8:hover { background : #F2EAA7; }
QPushButton#pushButton_9
{
font-family : "Webdings" ;
background : #F98F8F; border-radius : 5px;
border : none;
font-size : 13px;
}
QPushButton#pushButton_9:hover { background : #F82222; }
pyqt designer设计
designer ui文件
<?xml version="1.0" encoding="UTF-8"?>
< ui version = " 4.0" >
< class> Form</ class>
< widget class = " QWidget" name = " Form" >
< property name = " geometry" >
< rect>
< x> 0</ x>
< y> 0</ y>
< width> 644</ width>
< height> 415</ height>
</ rect>
</ property>
< property name = " windowTitle" >
< string> Form</ string>
</ property>
< widget class = " QWidget" name = " widget" native = " true" >
< property name = " geometry" >
< rect>
< x> 0</ x>
< y> 0</ y>
< width> 641</ width>
< height> 41</ height>
</ rect>
</ property>
< widget class = " QLabel" name = " icon" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 5</ y>
< width> 31</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> TextLabel</ string>
</ property>
</ widget>
< widget class = " QLabel" name = " title" >
< property name = " geometry" >
< rect>
< x> 60</ x>
< y> 5</ y>
< width> 131</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> TextLabel</ string>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton" >
< property name = " geometry" >
< rect>
< x> 560</ x>
< y> 5</ y>
< width> 31</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " font" >
< font>
< family> Webdings</ family>
</ font>
</ property>
< property name = " text" >
< string> 0</ string>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_3" >
< property name = " geometry" >
< rect>
< x> 600</ x>
< y> 5</ y>
< width> 31</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " font" >
< font>
< family> Webdings</ family>
</ font>
</ property>
< property name = " text" >
< string> r</ string>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_5" >
< property name = " geometry" >
< rect>
< x> 520</ x>
< y> 5</ y>
< width> 31</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " font" >
< font>
< family> Webdings</ family>
</ font>
</ property>
< property name = " text" >
< string> s</ string>
</ property>
</ widget>
</ widget>
< widget class = " QWidget" name = " widget_2" native = " true" >
< property name = " geometry" >
< rect>
< x> 0</ x>
< y> 41</ y>
< width> 641</ width>
< height> 361</ height>
</ rect>
</ property>
< widget class = " QGroupBox" name = " groupBox" >
< property name = " geometry" >
< rect>
< x> 9</ x>
< y> 9</ y>
< width> 301</ width>
< height> 171</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" > border-color: rgb(156, 156, 156);
border-width: 2px;
margin-top: 0.5ex;
border-style: solid;
border-radius:8px;
font-family:" Consolas" ;</ string>
</ property>
< property name = " title" >
< string> Load</ string>
</ property>
< property name = " flat" >
< bool> false</ bool>
</ property>
< property name = " checkable" >
< bool> false</ bool>
</ property>
< widget class = " QTextEdit" name = " textEdit" >
< property name = " geometry" >
< rect>
< x> 2</ x>
< y> 20</ y>
< width> 251</ width>
< height> 31</ height>
</ rect>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_2" >
< property name = " geometry" >
< rect>
< x> 255</ x>
< y> 20</ y>
< width> 41</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> OPEN</ string>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 60</ y>
< width> 61</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" />
</ property>
< property name = " text" >
< string> 递归</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_2" >
< property name = " geometry" >
< rect>
< x> 80</ x>
< y> 60</ y>
< width> 61</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" />
</ property>
< property name = " text" >
< string> SVG</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
< property name = " tristate" >
< bool> false</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_3" >
< property name = " geometry" >
< rect>
< x> 150</ x>
< y> 60</ y>
< width> 61</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" />
</ property>
< property name = " text" >
< string> Xml</ string>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_4" >
< property name = " geometry" >
< rect>
< x> 220</ x>
< y> 60</ y>
< width> 61</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" />
</ property>
< property name = " text" >
< string> Log</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_5" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 100</ y>
< width> 61</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" />
</ property>
< property name = " text" >
< string> 并发</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_6" >
< property name = " geometry" >
< rect>
< x> 234</ x>
< y> 135</ y>
< width> 61</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Apply</ string>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_7" >
< property name = " geometry" >
< rect>
< x> 169</ x>
< y> 135</ y>
< width> 61</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Reload</ string>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_8" >
< property name = " geometry" >
< rect>
< x> 114</ x>
< y> 135</ y>
< width> 51</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Recall</ string>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_9" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 135</ y>
< width> 101</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Clean Cache</ string>
</ property>
</ widget>
</ widget>
< widget class = " QGroupBox" name = " groupBox_2" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 180</ y>
< width> 301</ width>
< height> 181</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" > border-color: rgb(156, 156, 156);
border-width: 2px;
margin-top: 0.5ex;
border-style: solid;
border-radius:8px;
font-family:" Consolas" ;</ string>
</ property>
< property name = " title" >
< string> Build</ string>
</ property>
< widget class = " QCheckBox" name = " checkBox_6" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 20</ y>
< width> 281</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Open Convert Svg to Xml</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_7" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 50</ y>
< width> 281</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Enable Image read/write permissions</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_8" >
< property name = " enabled" >
< bool> true</ bool>
</ property>
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 80</ y>
< width> 281</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Set Texture Format RGBA8</ string>
</ property>
< property name = " checked" >
< bool> false</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_9" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 110</ y>
< width> 281</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Check dependency image is missing</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_10" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 140</ y>
< width> 281</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> Check Image pixel bound box</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
</ widget>
< widget class = " QGroupBox" name = " groupBox_3" >
< property name = " geometry" >
< rect>
< x> 319</ x>
< y> 9</ y>
< width> 316</ width>
< height> 91</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" > border-color: rgb(156, 156, 156);
border-width: 2px;
margin-top: 0.5ex;
border-style: solid;
border-radius:8px;
font-family:" Consolas" ;</ string>
</ property>
< property name = " title" >
< string> SVG Verify</ string>
</ property>
< widget class = " QCheckBox" name = " checkBox_11" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 20</ y>
< width> 71</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> 图层重叠</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_12" >
< property name = " geometry" >
< rect>
< x> 90</ x>
< y> 20</ y>
< width> 71</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> 命名错误</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_13" >
< property name = " geometry" >
< rect>
< x> 170</ x>
< y> 20</ y>
< width> 141</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> 左右图层数量不对称</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_14" >
< property name = " geometry" >
< rect>
< x> 10</ x>
< y> 50</ y>
< width> 71</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> 眼影特性</ string>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_15" >
< property name = " geometry" >
< rect>
< x> 90</ x>
< y> 50</ y>
< width> 71</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> 模型特性</ string>
</ property>
</ widget>
< widget class = " QCheckBox" name = " checkBox_16" >
< property name = " geometry" >
< rect>
< x> 170</ x>
< y> 50</ y>
< width> 141</ width>
< height> 31</ height>
</ rect>
</ property>
< property name = " text" >
< string> 图层ID重复</ string>
</ property>
< property name = " checked" >
< bool> true</ bool>
</ property>
</ widget>
</ widget>
< widget class = " QLineEdit" name = " lineEdit" >
< property name = " geometry" >
< rect>
< x> 322</ x>
< y> 340</ y>
< width> 261</ width>
< height> 20</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" > border-color: rgb(156, 156, 156);
border-width: 2px;
margin-top: 0.5ex;
border-style: solid;
border-radius:2px;
font-family:" Consolas" ;</ string>
</ property>
</ widget>
< widget class = " QPushButton" name = " pushButton_4" >
< property name = " geometry" >
< rect>
< x> 589</ x>
< y> 340</ y>
< width> 51</ width>
< height> 20</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" > border-color: rgb(156, 156, 156);
border-width: 2px;
margin-top: 0.5ex;
border-style: solid;
border-radius:2px;
font-family:" Consolas" ;</ string>
</ property>
< property name = " text" >
< string> 筛选</ string>
</ property>
</ widget>
< widget class = " QTextEdit" name = " textEdit_2" >
< property name = " geometry" >
< rect>
< x> 323</ x>
< y> 110</ y>
< width> 316</ width>
< height> 221</ height>
</ rect>
</ property>
< property name = " styleSheet" >
< string notr = " true" > border-color: rgb(156, 156, 156);
border-width: 2px;
margin-top: 0.5ex;
border-style: solid;
border-radius:2px;
font-family:" Consolas" ;</ string>
</ property>
< property name = " textInteractionFlags" >
< set> Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</ set>
</ property>
</ widget>
</ widget>
</ widget>
< resources/>
< connections/>
</ ui>
源码
class MyWindow ( QWidget, Ui_Form) :
def __init__ ( self, parent= None ) :
super ( MyWindow, self) . __init__( parent)
self. setupUi( self)
self. _init_main_window( )
self. _initDrag( )
self. setMouseTracking( True )
print ( self. width( ) , self. height( ) )
self. my_Qss( )
self. widget. installEventFilter( self)
self. widget_2. installEventFilter( self)
def _init_main_window ( self) :
self. setWindowFlags( Qt. FramelessWindowHint)
self. setAttribute( Qt. WA_TranslucentBackground)
w = self. icon. width( )
h = self. icon. height( )
self. pix = QPixmap( r"splash.png" )
self. icon. setPixmap( self. pix)
self. icon. setScaledContents( True )
self. title. setText( 'SVG Tool' )
self. title. setStyleSheet( '''
font-family:"High-Gear";
font-size:17px;
color:rgb(164,166,175,250);
''' )
def _initDrag ( self) :
self. _move_drag = False
self. _corner_drag = False
self. _bottom_drag = False
self. _right_drag = False
@pyqtSlot ( )
def on_pushButton_clicked ( self) :
self. showMinimized( )
@pyqtSlot ( )
def on_pushButton_2_clicked ( self) :
path = QFileDialog. getExistingDirectory( self, "选取指定文件夹" , "C:/" )
if path != None and os. path. exists( path) :
self. textEdit. setText( path)
@pyqtSlot ( )
def on_pushButton_6_clicked ( self) :
path = self. textEdit. toPlainText( )
folder = [ ]
svgs = [ ]
if None != path and path != "" :
files = path. split( )
for file in files:
url = file . replace( "file:///" , "" )
if url. endswith( '.svg' ) :
svgs. append( url)
elif os. path. isdir( url) :
folder. append( url)
if self. checkBox. isChecked( ) :
print ( "正在递归搜索..." )
for f in folder:
find( f, '.svg' , svgs)
if len ( svgs) == 0 :
QMessageBox. warning(
self, "IO Error" , "你传入的所有 文件/文件夹 中没有找到SVG文件" , QMessageBox. Yes)
else :
if self. checkBox_5. isChecked( ) :
self. dealSVGFilesConcurrenc( svgs)
else :
self. dealSVGFiles( svgs)
@pyqtSlot ( )
def on_pushButton_7_clicked ( self) :
result = QMessageBox. warning(
self, "危险操作" , "是否强制执行重新加载" , QMessageBox. Yes | QMessageBox. No)
if result == QMessageBox. Yes:
self. logLine( "Script" , "强制执行重新加载" )
self. textEdit_2. clear( )
if 'svgs' in local_data. getData( ) . keys( ) :
svgs = local_data. getData( ) [ 'svgs' ]
if None != svgs and len ( svgs) > 0 :
if self. checkBox_5. isChecked( ) :
self. dealSVGFilesConcurrenc( svgs)
else :
self. dealSVGFiles( svgs)
else :
self. logLine( "Script" , "取消强制执行重新加载" )
@pyqtSlot ( )
def on_pushButton_8_clicked ( self) :
result = QMessageBox. warning(
self, "危险操作" , "是否强制回滚所有操作" , QMessageBox. Yes | QMessageBox. No)
if result == QMessageBox. Yes:
self. logLine( "Script" , "强制回滚所有操作" )
else :
self. logLine( "Script" , "妈呀~ 手滑了..." )
return
svgs = None
if 'svgs' in local_data. getData( ) . keys( ) :
svgs = local_data. getData( ) [ 'svgs' ]
local_data. getData( ) . pop( "svgs" )
if svgs == None :
return
self. logLine( "Script" , "正在删除生成的Xml文件" )
for svg in svgs:
( path, filename) = os. path. split( svg)
( name, _) = os. path. splitext( filename)
newname = os. path. join( path, name+ '.xml' )
if os. path. exists( newname) :
os. remove( newname)
self. logLine( "Script" , f"回滚成功: { svg} " )
self. logLine( "Script" , "正在恢复图片的Read/Write Enabled权限" )
self. logLine( "Script" , "正在恢复图片的格式 设置为初代格式" )
try :
for item in cacheDict. keys( ) :
img_url = item[ 0 ]
img_info = item[ 1 ]
e = img_info[ 'read_write_enabled' ] [ 0 ]
f = img_info[ 'texture_format' ] [ 0 ]
UnityTextureImporter. SetTextureReadWriteEnabled( img_url, e)
UnityTextureImporter. SetTextureFormat( img_url, f)
except :
msg = traceback. format_exc( )
self. logLine( "traceback" , msg)
@pyqtSlot ( )
def on_pushButton_9_clicked ( self) :
result = QMessageBox. warning(
self, "危险操作" , "是否清理缓存" , QMessageBox. Yes | QMessageBox. No)
if result == QMessageBox. Yes:
if os. path. exists( getCacheFilePath( ) ) :
os. remove( getCacheFilePath( ) )
self. logLine( "Script" , "清理缓存成功" )
else :
self. logLine( "Script" , "啊呀,手又滑了呢~" )
return
def logLine ( self, tag, content) :
timestr = time. strftime( "%H:%M:%S" , time. localtime( ) )
lineContent = f" { timestr} [ { tag} ] { content} \n"
self. textEdit_2. append( lineContent)
print ( lineContent)
def dealSVGFilesConcurrenc ( self, svgs) :
self. logLine( "Script" , "并发处理SVG文件" )
threads = [ ]
limgs = [ ]
b_overlap = self. checkBox_11. isChecked( )
b_name = self. checkBox_12. isChecked( )
b_layerCount = self. checkBox_13. isChecked( )
b_eye = self. checkBox_14. isChecked( )
b_model = self. checkBox_15. isChecked( )
b_id = self. checkBox_16. isChecked( )
b_imgMiss = self. checkBox_9. isChecked( )
b_enableReadWrite = self. checkBox_7. isChecked( )
b_compressedAtc = self. checkBox_8. isChecked( )
b_checkImg_pixelBoundBox = self. checkBox_10. isChecked( )
b_convet2xml = self. checkBox_6. isChecked( )
depend_img_info = [ ]
for svg in svgs:
t1 = threading. Thread( target= loadSVG, args= (
svg,
self. logLine,
limgs,
b_overlap,
b_name,
b_layerCount,
b_eye,
b_model,
b_id,
b_imgMiss,
b_enableReadWrite,
b_compressedAtc,
depend_img_info,
) )
threads. append( t1)
t1. start( )
for t in threads:
t. join( )
if b_checkImg_pixelBoundBox:
for pair in limgs:
result = dissymmetry( getBoundingBox(
pair[ 0 ] ) , getBoundingBox( pair[ 1 ] ) )
if result != 0 :
getErrorstr = ""
if result == 1 :
getErrorstr = "图片像素检测 - 左边翻转后与右边像素不完全重叠"
elif result == 2 :
getErrorstr = "图片像素检测中心坐标 - 垂直坐标中心不对称"
elif result == 3 :
getErrorstr = "图片像素检测包围盒 - 大小不同"
folder, _ = os. path. split( pair[ 0 ] )
self. logLine( "image-bound-box" ,
f' { getErrorstr} : { folder} \n { _} ' )
if b_convet2xml and len ( svgs) > 0 :
self. logLine( "Script" , "----------转换程序正在运行----------" )
start_time = time. time( )
for svg in svgs:
( path, filename) = os. path. split( svg)
( name, _) = os. path. splitext( filename)
if 'Models' in path:
name = 'svg'
newname = os. path. join( path, name+ '.xml' )
if os. path. exists( newname) :
os. remove( newname)
self. logLine( "Script" , f"覆盖成功 { newname} " )
else :
self. logLine( "Script" , f"生成 { newname} " )
shutil. copyfile( svg, newname)
self. logLine( "Script" , "----------转换程序结束运行----------" )
self. logLine( "Script" , f"运行用时: { time. time( ) - start_time} 秒" )
local_data. getData( ) [ 'svgs' ] = svgs
local_data. save( )
if len ( depend_img_info) > 0 :
global cacheDict
for info in depend_img_info:
if info[ 0 ] not in cacheDict. keys( ) :
item = cacheDict[ info[ 0 ] ] = { }
item[ 'read_write_enabled' ] = [ info[ 2 ] ]
item[ 'texture_format' ] = [ info[ 1 ] ]
else :
item = cacheDict[ info[ 0 ] ]
item[ 'read_write_enabled' ] . append( info[ 2 ] )
item[ 'texture_format' ] . append( info[ 1 ] )
cacheData( )
local_data. getData( ) [ 'log' ] = self. textEdit_2. toPlainText( )
def dealSVGFiles ( self, svgs) :
self. logLine( "Script" , "低开销模式处理SVG文件" )
limgs = [ ]
b_overlap = self. checkBox_11. isChecked( )
b_name = self. checkBox_12. isChecked( )
b_layerCount = self. checkBox_13. isChecked( )
b_eye = self. checkBox_14. isChecked( )
b_model = self. checkBox_15. isChecked( )
b_id = self. checkBox_16. isChecked( )
b_imgMiss = self. checkBox_9. isChecked( )
b_enableReadWrite = self. checkBox_7. isChecked( )
b_compressedAtc = self. checkBox_8. isChecked( )
b_checkImg_pixelBoundBox = self. checkBox_10. isChecked( )
b_convet2xml = self. checkBox_6. isChecked( )
depend_img_info = [ ]
for svg in svgs:
loadSVG(
svg,
self. logLine,
limgs,
b_overlap,
b_name,
b_layerCount,
b_eye,
b_model,
b_id,
b_imgMiss,
b_enableReadWrite,
b_compressedAtc,
depend_img_info
)
if b_checkImg_pixelBoundBox:
for pair in limgs:
result = dissymmetry( getBoundingBox(
pair[ 0 ] ) , getBoundingBox( pair[ 1 ] ) )
if result != 0 :
getErrorstr = ""
if result == 1 :
getErrorstr = "图片像素检测 - 左边翻转后与右边像素不完全重叠"
elif result == 2 :
getErrorstr = "图片像素检测中心坐标 - 垂直坐标中心不对称"
elif result == 3 :
getErrorstr = "图片像素检测包围盒 - 大小不同"
folder, _ = os. path. split( pair[ 0 ] )
self. logLine( "image-bound-box" ,
f' { getErrorstr} : { folder} \n { _} ' )
if b_convet2xml and len ( svgs) > 0 :
self. logLine( "Script" , "----------转换程序正在运行----------" )
start_time = time. time( )
for svg in svgs:
( path, filename) = os. path. split( svg)
( name, _) = os. path. splitext( filename)
if 'Models' in path:
name = 'svg'
newname = os. path. join( path, name+ '.xml' )
if os. path. exists( newname) :
os. remove( newname)
self. logLine( "Script" , f"覆盖成功 { newname} " )
else :
self. logLine( "Script" , f"生成 { newname} " )
shutil. copyfile( svg, newname)
self. logLine( "Script" , "----------转换程序结束运行----------" )
self. logLine( "Script" , f"运行用时: { time. time( ) - start_time} 秒" )
local_data. getData( ) [ 'svgs' ] = svgs
local_data. save( )
if len ( depend_img_info) > 0 :
global cacheDict
for info in depend_img_info:
if info[ 0 ] not in cacheDict. keys( ) :
item = cacheDict[ info[ 0 ] ] = { }
item[ 'read_write_enabled' ] = [ info[ 2 ] ]
item[ 'texture_format' ] = [ info[ 1 ] ]
else :
item = cacheDict[ info[ 0 ] ]
item[ 'read_write_enabled' ] . append( info[ 2 ] )
item[ 'texture_format' ] . append( info[ 1 ] )
cacheData( )
local_data. getData( ) [ 'log' ] = self. textEdit_2. toPlainText( )
@pyqtSlot ( )
def on_pushButton_3_clicked ( self) :
self. close( )
@pyqtSlot ( )
def on_pushButton_4_clicked ( self) :
command = self. lineEdit. text( )
if 'log' in local_data. getData( ) . keys( ) :
content = local_data. getData( ) [ 'log' ]
if command == "" :
self. textEdit_2. setPlainText( content)
else :
result_list = re. findall( f'.* { command} .*\n' , content)
self. textEdit_2. setPlainText( '\n' . join( result_list) )
@pyqtSlot ( )
def on_pushButton_5_clicked ( self) :
print ( "click 5" )
popen( "start tencent://message/?uin=331565861&Site=&Menu=yes" )
def eventFilter ( self, obj, event) :
if isinstance ( event, QEnterEvent) :
self. setCursor( Qt. ArrowCursor)
return super ( MyWindow, self) . eventFilter( obj, event)
def resizeEvent ( self, QResizeEvent) :
self. _right_rect = [ QPoint( x, y) for x in range ( self. width( ) - 5 , self. width( ) + 5 )
for y in range ( self. widget. height( ) + 20 , self. height( ) - 5 ) ]
self. _bottom_rect = [ QPoint( x, y) for x in range ( 1 , self. width( ) - 5 )
for y in range ( self. height( ) - 5 , self. height( ) + 1 ) ]
self. _corner_rect = [ QPoint( x, y) for x in range ( self. width( ) - 5 , self. width( ) + 1 )
for y in range ( self. height( ) - 5 , self. height( ) + 1 ) ]
def mousePressEvent ( self, event) :
if ( event. button( ) == Qt. LeftButton) and ( event. pos( ) in self. _corner_rect) :
self. _corner_drag = True
event. accept( )
elif ( event. button( ) == Qt. LeftButton) and ( event. pos( ) in self. _right_rect) :
self. _right_drag = True
event. accept( )
elif ( event. button( ) == Qt. LeftButton) and ( event. pos( ) in self. _bottom_rect) :
self. _bottom_drag = True
event. accept( )
elif ( event. button( ) == Qt. LeftButton) and ( event. y( ) < self. widget. height( ) ) :
self. _move_drag = True
self. move_DragPosition = event. globalPos( ) - self. pos( )
event. accept( )
def mouseMoveEvent ( self, QMouseEvent) :
if QMouseEvent. pos( ) in self. _corner_rect:
self. setCursor( Qt. SizeFDiagCursor)
elif QMouseEvent. pos( ) in self. _bottom_rect:
self. setCursor( Qt. SizeVerCursor)
elif QMouseEvent. pos( ) in self. _right_rect:
self. setCursor( Qt. SizeHorCursor)
if Qt. LeftButton and self. _right_drag:
self. resize( QMouseEvent. pos( ) . x( ) , self. height( ) )
QMouseEvent. accept( )
elif Qt. LeftButton and self. _bottom_drag:
self. resize( self. width( ) , QMouseEvent. pos( ) . y( ) )
QMouseEvent. accept( )
elif Qt. LeftButton and self. _corner_drag:
self. resize( QMouseEvent. pos( ) . x( ) , QMouseEvent. pos( ) . y( ) )
QMouseEvent. accept( )
elif Qt. LeftButton and self. _move_drag:
self. move( QMouseEvent. globalPos( ) - self. move_DragPosition)
QMouseEvent. accept( )
def mouseReleaseEvent ( self, QMouseEvent) :
self. _move_drag = False
self. _corner_drag = False
self. _bottom_drag = False
self. _right_drag = False
def my_Qss ( self) :
qssStyle = '''
QWidget#widget{
background-color:#eef0f6;
border-left:0.5px solid lightgray;
border-right:0.5px solid lightgray;
border-top:0.5px solid lightgray;
border-bottom:0.5px solid #e5e5e5;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
QWidget#widget_2{
background-color:#ffffff;
border-left:0.5px solid lightgray;
border-right:0.5px solid lightgray;
border-bottom:0.5px solid #e5e5e5;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
padding:5px 5px 5px 5px
}
QPushButton#pushButton
{
font-family:"Webdings";
text-align:top;
background:#6DDF6D;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton:hover{background:green;}
QPushButton#pushButton_2
{
font-family:"Webdings";
background:#F7D674;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton_2:hover{background:yellow;}
QPushButton#pushButton_3
{
font-family:"Webdings";
background:#F76677;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton_3:hover{background:red;}
QPushButton#pushButton_5
{
font-family:"Webdings";
background:#A9B4EA;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton_5:hover{background:blue;}
QPushButton#pushButton_6
{
font-family:"Webdings";
background:#EFE9B5;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton_6:hover{background:#E5D654;}
QPushButton#pushButton_7
{
font-family:"Webdings";
background:#F8F6E4;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton_7:hover{background:#F2EAA7;}
QPushButton#pushButton_8
{
font-family:"Webdings";
background:#F8F6E4;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton_8:hover{background:#F2EAA7;}
QPushButton#pushButton_9
{
font-family:"Webdings";
background:#F98F8F;border-radius:5px;
border:none;
font-size:13px;
}
QPushButton#pushButton_9:hover{background:#F82222;}
'''
self. setStyleSheet( qssStyle)
def closeEvent ( self, e) :
cacheData( )
local_data. save( )
if __name__ == "__main__" :
initApp( )
QtCore. QCoreApplication. setAttribute( QtCore. Qt. AA_EnableHighDpiScaling)
app = QApplication( sys. argv)
QFontDatabase. addApplicationFont( "bin/fontFiles/High-Gear.ttf" )
QFontDatabase. addApplicationFont( "bin/fontFiles/Dreamy.otf" )
myWin = MyWindow( )
myWin. show( )
sys. exit( app. exec_( ) )