使用Python写的WingPro7 Pyside2 和 PyQt5插件

pyside2的

import wingapi
import subprocess

pyside2_uic = "pyside2-uic"
pyside2_qrc = "pyside2-rcc"


def Pyside2_uic():
    count_wait = 0
    count_done = 0
    for i in wingapi.gApplication.GetCurrentFiles():
        if ".ui" in i:
            count_wait += 1
            p = subprocess.Popen([pyside2_uic, i, "-o", i.replace(".ui", "_ui.py"), "-x"])
            p.wait()
            if p.returncode == 0:
                count_done += 1
            else:
                print(i.split("\\")[-1] + "   FAILED")
    print("{0} ui files need to be converted.".format(count_wait))
    print("{0} SUCESSFULLY".format(count_done))


def Pyside2_rcc():
    count_wait = 0
    count_done = 0
    for i in wingapi.gApplication.GetCurrentFiles():
        if ".qrc" in i:
            print(i)
            count_wait += 1
            p = subprocess.Popen([pyside2_qrc, i, "-o", i.replace(".qrc", "_rc.py")])
            p.wait()
            if p.returncode == 0:
                count_done += 1
            else:
                print(i.split("\\")[-1] + "   FAILED")
    print("{0} qrc files need to be converted.".format(count_wait))
    print("{0} SUCESSFULLY".format(count_done))


def Pyside2_pcq():
    def readUi(uiPath):
        import xml.dom.minidom as xmldom
        uiDict = {}
        domObj = xmldom.parse(uiPath)
        elementObj = domObj.documentElement
        windowName = elementObj.getElementsByTagName("widget")
        uiDict["class"] = windowName[0].getAttribute("class")
        uiDict["name"] = "Ui_" + windowName[0].getAttribute("name")
        uiDict["connections"] = []
        connections = elementObj.getElementsByTagName("connection")
        for i in connections:
            connection = {}
            sender = i.getElementsByTagName("sender")
            connection["sender"] = sender[0].firstChild.data
            signal = i.getElementsByTagName("signal")
            connection["signal"] = signal[0].firstChild.data
            receiver = i.getElementsByTagName("receiver")
            connection["receiver"] = "Ui_" + receiver[0].firstChild.data
            slot = i.getElementsByTagName("slot")
            connection["slot"] = slot[0].firstChild.data
            uiDict["connections"].append(connection)
        return uiDict

    def logUi(uiPath, uiDict):
        from datetime import datetime
        with open(uiPath.replace(".ui", ".log"), "w") as f:
            content = []
            content.extend(["Updated Time:" + str(datetime.now()) + "\n\n"])
            content.extend(["class=" + uiDict["class"] + "\n"])
            content.extend(["name =" + uiDict["name"] + "\n"])
            for i in uiDict["connections"]:
                content.extend(["______________________________________\n"])
                content.extend(["sender :" + i["sender"] + "\n"])
                content.extend(["signal :" + i["signal"] + "\n"])
                content.extend(["receiver :" + i["receiver"] + "\n"])
                content.extend(["slot :" + i["slot"] + "\n"])
            f.write("".join(content))

    def generatePy(uiPath, uiDict):

        def importGen():
            from datetime import datetime
            return("# -*- coding: utf-8 -*-\n"
                   "#Generated by [pyside2 pcq]\n"
                   "#Created By Lulu\n"
                   "#Updated Time:{2}\n"
                   "#WARNING! All changes made in this file will be lost!\n"
                   "from PySide2 import QtWidgets\n"
                   "from {0} import {1} as Parent"
                   "\n\n".format(uiPath.split("\\")[-1].replace(".ui", "_ui"), uiDict["name"], datetime.now()))

        def classGen():
            return("class {0}(QtWidgets.{1},Parent):\n"
                   "\n"
                   "    def __init__(self):\n"
                   "        '''Constructor'''\n"
                   "        super().__init__()\n"
                   "        self.setupUi(self)\n"
                   "        \n\n".format(uiDict["name"].replace("Ui_", "Win_"), uiDict["class"]))

        def slotGen():
            slotContent = []
            slots = []
            for i in uiDict["connections"]:
                slots.extend([i["slot"]])
            slots = list(set(slots))
            for i in slots:
                slotContent.extend([
                    "    def {0}(self):\n"
                    "        \n"
                    "        pass\n\n".format(i[:-2])])
            return "".join(slotContent)

        def mainGen():
            return(
                'if __name__ == "__main__": \n'
                '    import sys\n'
                '    app = QtWidgets.QApplication(sys.argv)\n'
                '    {0} = {1}()\n'
                '    {0}.show()\n'
                '    sys.exit(app.exec_())\n'.format(uiDict["name"].replace("Ui_", "Win_").lower(), uiDict["name"].replace("Ui_", "Win_")))
        with open(uiPath.replace(".ui", "_Win.py"), "w") as f:
            f.write(importGen() + classGen() + slotGen() + mainGen())

    for i in wingapi.gApplication.GetCurrentFiles():
        if ".ui" in i:
            uiDict = readUi(i)
            logUi(i, uiDict)
            generatePy(i, uiDict)


Pyside2_uic.contexts = [
  wingapi.kContextProject(),
]
Pyside2_rcc.contexts = [
  wingapi.kContextProject(),
]
Pyside2_pcq.contexts = [
  wingapi.kContextProject(),
]

pyqt5的

import wingapi
import subprocess

pyuic5 = "pyuic5"
pyrcc5 = "pyrcc5"


def PyQt5_uic():
    count_wait = 0
    count_done = 0
    for i in wingapi.gApplication.GetCurrentFiles():
        if ".ui" in i:
            count_wait += 1
            p = subprocess.Popen([pyuic5, i, "-o", i.replace(".ui", "_ui.py"), "-x"])
            p.wait()
            if p.returncode == 0:
                count_done += 1
            else:
                print(i.split("\\")[-1] + "   FAILED")
    print("{0} ui files need to be converted.".format(count_wait))
    print("{0} SUCESSFULLY".format(count_done))


def PyQt5_rcc():
    count_wait = 0
    count_done = 0
    for i in wingapi.gApplication.GetCurrentFiles():
        if ".qrc" in i:
            print(i)
            count_wait += 1
            p = subprocess.Popen([pyrcc5, i, "-o", i.replace(".qrc", "_rc.py")])
            p.wait()
            if p.returncode == 0:
                count_done += 1
            else:
                print(i.split("\\")[-1] + "   FAILED")
    print("{0} qrc files need to be converted.".format(count_wait))
    print("{0} SUCESSFULLY".format(count_done))


def PyQt5_pcq():
    def readUi(uiPath):
        import xml.dom.minidom as xmldom
        uiDict = {}
        domObj = xmldom.parse(uiPath)
        elementObj = domObj.documentElement
        windowName = elementObj.getElementsByTagName("widget")
        uiDict["class"] = windowName[0].getAttribute("class")
        uiDict["name"] = "Ui_" + windowName[0].getAttribute("name")
        uiDict["connections"] = []
        connections = elementObj.getElementsByTagName("connection")
        for i in connections:
            connection = {}
            sender = i.getElementsByTagName("sender")
            connection["sender"] = sender[0].firstChild.data
            signal = i.getElementsByTagName("signal")
            connection["signal"] = signal[0].firstChild.data
            receiver = i.getElementsByTagName("receiver")
            connection["receiver"] = "Ui_" + receiver[0].firstChild.data
            slot = i.getElementsByTagName("slot")
            connection["slot"] = slot[0].firstChild.data
            uiDict["connections"].append(connection)
        return uiDict

    def logUi(uiPath, uiDict):
        from datetime import datetime
        with open(uiPath.replace(".ui", ".log"), "w") as f:
            content = []
            content.extend(["Updated Time:" + str(datetime.now()) + "\n\n"])
            content.extend(["class=" + uiDict["class"] + "\n"])
            content.extend(["name =" + uiDict["name"] + "\n"])
            for i in uiDict["connections"]:
                content.extend(["______________________________________\n"])
                content.extend(["sender :" + i["sender"] + "\n"])
                content.extend(["signal :" + i["signal"] + "\n"])
                content.extend(["receiver :" + i["receiver"] + "\n"])
                content.extend(["slot :" + i["slot"] + "\n"])
            f.write("".join(content))

    def generatePy(uiPath, uiDict):

        def importGen():
            from datetime import datetime
            return("# -*- coding: utf-8 -*-\n"
                   "#Generated by [PyQt5 pcq]\n"
                   "#Created By Lulu\n"
                   "#Updated Time:{2}\n"
                   "#WARNING! All changes made in this file will be lost!\n"
                   "from PyQt5 import QtWidgets\n"
                   "from {0} import {1} as Parent"
                   "\n\n".format(uiPath.split("\\")[-1].replace(".ui", "_ui"), uiDict["name"], datetime.now()))

        def classGen():
            return("class {0}(QtWidgets.{1},Parent):\n"
                   "\n"
                   "    def __init__(self):\n"
                   "        '''Constructor'''\n"
                   "        super().__init__()\n"
                   "        self.setupUi(self)\n"
                   "        \n\n".format(uiDict["name"].replace("Ui_", "Win_"), uiDict["class"]))

        def slotGen():
            slotContent = []
            slots = []
            for i in uiDict["connections"]:
                slots.extend([i["slot"]])
            slots = list(set(slots))
            for i in slots:
                slotContent.extend([
                    "    def {0}(self):\n"
                    "        \n"
                    "        pass\n\n".format(i[:-2])])
            return "".join(slotContent)

        def mainGen():
            return(
                'if __name__ == "__main__": \n'
                '    import sys\n'
                '    app = QtWidgets.QApplication(sys.argv)\n'
                '    {0} = {1}()\n'
                '    {0}.show()\n'
                '    sys.exit(app.exec_())\n'.format(uiDict["name"].replace("Ui_", "Win_").lower(), uiDict["name"].replace("Ui_", "Win_")))
        with open(uiPath.replace(".ui", "_Win.py"), "w") as f:
            f.write(importGen() + classGen() + slotGen() + mainGen())

    for i in wingapi.gApplication.GetCurrentFiles():
        if ".ui" in i:
            uiDict = readUi(i)
            logUi(i, uiDict)
            generatePy(i, uiDict)


PyQt5_uic.contexts = [
  wingapi.kContextProject(),
]
PyQt5_rcc.contexts = [
  wingapi.kContextProject(),
]
PyQt5_pcq.contexts = [
  wingapi.kContextProject(),
]

代码分屏插件

import wingapi


def split_horizontally():
    wingapi.gApplication.ExecuteCommand("split-horizontally")


def split_vertically():
    wingapi.gApplication.ExecuteCommand("split-vertically")


def join_all_split():
    wingapi.gApplication.ExecuteCommand("unsplit")


split_horizontally.contexts = [
  wingapi.kContextEditor(),
]
split_vertically.contexts = [
  wingapi.kContextEditor(),
]
join_all_split.contexts = [
  wingapi.kContextEditor(),
]

你可能感兴趣的:(使用Python写的WingPro7 Pyside2 和 PyQt5插件)