Hello everyone. I've created another User Interface to Python converter (you can find the first one here, though I don't recommend it, it's ugly), this one's more simple and comfortable. Literally all you have to do is drag the *.ui file and drop it in the square, the *.py file will be generated in the directory that you choose (Desktop by default). I've attached the icon, even thought it's not necessary, and also, the program will create a "settings.txt" file, which contains the path where the generated file should be saved.
Here's the code:
Thanks and enjoy!
Edit:
For some reason, the code is not indented, here's a gist.
Here's the code:
from PyQt5 import QtCore, QtGui, QtWidgets
from pathlib import Path
import os
savePath = ""
settingsFilePath = Path("settings.txt")
if not settingsFilePath.is_file():
f = open("settings.txt", "w")
savePath = os.environ["HOMEPATH"] + "\\Desktop\\"
f.write(savePath)
f.close()
else:
f = open("settings.txt", "r")
savePath = f.readline()
f.close()
def convertToPy(target):
os.system('pyuic5 -o "' + savePath + '/convertedfile.py" "' + target + '"')
class Label(QtWidgets.QLabel):
def __init__(self):
super(Label, self).__init__()
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat("text/uri-list"):
e.accept()
else:
e.ignore()
def dropEvent(self, e):
convertToPy(e.mimeData().text()[8:])
class MainWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.windowTitle = "Converter: User Interface to Python"
self.windowSize = (438, 348)
self.setupUi(self)
def setupUi(self, Form):
Form.setObjectName("Form")
Form.setWindowTitle(self.windowTitle)
Form.resize(self.windowSize[0], self.windowSize[1])
self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.frame = QtWidgets.QFrame(Form)
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.labelIcon = QtWidgets.QLabel(self.frame)
self.labelIcon.setMaximumSize(QtCore.QSize(50, 50))
self.labelIcon.setText("")
self.labelIcon.setPixmap(QtGui.QPixmap("info.png"))
self.labelIcon.setScaledContents(True)
self.labelIcon.setObjectName("labelIcon")
self.horizontalLayout.addWidget(self.labelIcon)
self.labelInfo = QtWidgets.QLabel(self.frame)
self.labelInfo.setWordWrap(True)
self.labelInfo.setObjectName("labelInfo")
self.labelInfo.setText("Before converting, please make sure that you have PyQt5 installed. To install PyQt5, you can visit <a href='https://sourceforge.net/projects/pyqt/'>this link</a> to download it, or run the following command in <b>cmd</b>: <font face='Consolas'>pip3 install PyQt5</font>")
self.labelInfo.setOpenExternalLinks(True)
self.horizontalLayout.addWidget(self.labelInfo)
self.horizontalLayout_2.addLayout(self.horizontalLayout)
self.verticalLayout.addWidget(self.frame)
self.frame_2 = QtWidgets.QFrame(Form)
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setObjectName("verticalLayout_5")
#self.labelTarget = QtWidgets.QLabel(self.frame_2) -> removed, as I'm going to use a custom Label
self.labelTarget = Label()
font = QtGui.QFont()
font.setFamily("Myanmar Text")
self.labelTarget.setFont(font)
self.labelTarget.setAlignment(QtCore.Qt.AlignCenter)
self.labelTarget.setObjectName("labelTarget")
self.labelTarget.setText("Drag and drop the <b>user interface</b> (<b>*.ui</b>) file here")
self.labelTarget.setStyleSheet("QLabel { border: 1px dotted black; }")
self.labelTarget.setMinimumHeight(150)
self.labelTarget.setAcceptDrops(True)
self.verticalLayout_5.addWidget(self.labelTarget)
self.horizontalLayout_3.addLayout(self.verticalLayout_5)
self.verticalLayout.addWidget(self.frame_2)
self.frame_3 = QtWidgets.QFrame(Form)
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_3.setObjectName("frame_3")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.frame_3)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.labelQuestion = QtWidgets.QLabel(self.frame_3)
self.labelQuestion.setObjectName("labelQuestion")
self.labelQuestion.setText("Where should the <b>python</b> file be saved at?")
self.verticalLayout_3.addWidget(self.labelQuestion)
self.frame_4 = QtWidgets.QFrame(self.frame_3)
self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_4.setObjectName("frame_4")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.frame_4)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.inputDirectory = QtWidgets.QLineEdit(self.frame_4)
self.inputDirectory.setObjectName("inputDirectory")
self.inputDirectory.setText(savePath)
self.inputDirectory.setStyleSheet("QLineEdit { padding-bottom: 2px; padding-left: 2px; }")
self.horizontalLayout_5.addWidget(self.inputDirectory)
self.buttonBrowse = QtWidgets.QPushButton(self.frame_4)
self.buttonBrowse.setObjectName("buttonBrowse")
self.buttonBrowse.setText("Browse")
self.horizontalLayout_5.addWidget(self.buttonBrowse)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.horizontalLayout_5.addLayout(self.horizontalLayout_4)
self.verticalLayout_3.addWidget(self.frame_4)
self.verticalLayout_4.addLayout(self.verticalLayout_3)
self.verticalLayout.addWidget(self.frame_3)
self.verticalLayout_2.addLayout(self.verticalLayout)
QtCore.QMetaObject.connectSlotsByName(Form)
self.buttonBrowse.clicked.connect(self.browsePath)
def browsePath(self):
savePath = str(QtWidgets.QFileDialog.getExistingDirectory(self, "Select directory"))
self.inputDirectory.setText(savePath)
with open(settingsFilePath, "w") as f:
f.write(savePath)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
hGUI = QtWidgets.QWidget()
ui = MainWindow()
ui.setupUi(hGUI)
hGUI.show()
sys.exit(app.exec_())As always, I want to hear your opinion, did I do a good job? Please do comment on my code.Thanks and enjoy!

Edit:
For some reason, the code is not indented, here's a gist.
