0

I frequently add changes to my Qt Designer ui file, convert this to python code and work with it. The goal is to use this generated code as a template and to extend it with another python file that has a class that adds things such as click actions.

Basically whenever I update the UI and when it generates the python code from it, I want to keep all the functionalities defined in a different file.

This is my current generated code template_ui.py

# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1085, 907)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.btn_new_patient = QtWidgets.QPushButton(self.centralwidget)
        self.btn_new_patient.setGeometry(QtCore.QRect(950, 60, 71, 22))
        self.btn_new_patient.setObjectName("btn_new_patient")
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setGeometry(QtCore.QRect(690, 280, 381, 51))
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.btn_view_report = QtWidgets.QPushButton(self.centralwidget)
        self.btn_view_report.setGeometry(QtCore.QRect(770, 540, 191, 61))
        font = QtGui.QFont()
        font.setPointSize(18)
        font.setBold(False)
        font.setWeight(50)
        self.btn_go_report.setFont(font)
        self.btn_go_report.setObjectName("btn_go_report")
        self.frame_plax = QtWidgets.QFrame(self.centralwidget)
        self.frame_plax.setGeometry(QtCore.QRect(820, 380, 91, 40))
        self.frame_plax.setAutoFillBackground(True)
        self.frame_plax.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_plax.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.frame_plax.setObjectName("frame_plax")
        self.label_plax = QtWidgets.QLabel(self.frame_plax)
        self.label_plax.setGeometry(QtCore.QRect(10, 0, 71, 41))
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setBold(True)
        font.setWeight(75)
        self.label_plax.setFont(font)
        self.label_plax.setTextFormat(QtCore.Qt.RichText)
        self.label_plax.setObjectName("label_plax")
        self.frame_a4c = QtWidgets.QFrame(self.centralwidget)
        self.frame_a4c.setGeometry(QtCore.QRect(820, 430, 91, 40))
        self.frame_a4c.setAutoFillBackground(True)
        self.frame_a4c.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_a4c.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.frame_a4c.setObjectName("frame_a4c")
        self.label_a4c = QtWidgets.QLabel(self.frame_a4c)
        self.label_a4c.setGeometry(QtCore.QRect(20, 0, 61, 41))
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setBold(True)
        font.setWeight(75)
        self.label_a4c.setFont(font)
        self.label_a4c.setTextFormat(QtCore.Qt.RichText)
        self.label_a4c.setObjectName("label_a4c")
        self.frame_a2c = QtWidgets.QFrame(self.centralwidget)
        self.frame_a2c.setGeometry(QtCore.QRect(820, 480, 91, 40))
        self.frame_a2c.setAutoFillBackground(True)
        self.frame_a2c.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_a2c.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.frame_a2c.setObjectName("frame_a2c")
        self.label_a2c = QtWidgets.QLabel(self.frame_a2c)
        self.label_a2c.setGeometry(QtCore.QRect(20, 0, 61, 41))
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setBold(True)
        font.setWeight(75)
        self.label_a2c.setFont(font)
        self.label_a2c.setTextFormat(QtCore.Qt.RichText)
        self.label_a2c.setObjectName("label_a2c")
        self.input_patientid = QtWidgets.QLineEdit(self.centralwidget)
        self.input_patientid.setGeometry(QtCore.QRect(690, 60, 241, 22))
        self.input_patientid.setObjectName("input_patientid")
        self.label_patientid = QtWidgets.QLabel(self.centralwidget)
        self.label_patientid.setGeometry(QtCore.QRect(690, 20, 331, 31))
        font = QtGui.QFont()
        font.setPointSize(13)
        font.setBold(False)
        font.setWeight(50)
        self.label_patientid.setFont(font)
        self.label_patientid.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_patientid.setAutoFillBackground(False)
        self.label_patientid.setScaledContents(False)
        self.label_patientid.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.label_patientid.setObjectName("label_patientid")
        self.label_instruction = QtWidgets.QLabel(self.centralwidget)
        self.label_instruction.setGeometry(QtCore.QRect(780, 340, 171, 16))
        self.label_instruction.setAutoFillBackground(True)
        self.label_instruction.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.label_instruction.setFrameShadow(QtWidgets.QFrame.Raised)
        self.label_instruction.setTextFormat(QtCore.Qt.AutoText)
        self.label_instruction.setAlignment(QtCore.Qt.AlignCenter)
        self.label_instruction.setObjectName("label_instruction")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1085, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btn_new_patient.setText(_translate("MainWindow", "Add New"))
        self.btn_go_report.setText(_translate("MainWindow", "View Report"))
        self.label_plax.setText(_translate("MainWindow", ""))
        self.label_a4c.setText(_translate("MainWindow", ""))
        self.label_a2c.setText(_translate("MainWindow", ""))
        self.label_patientid.setText(_translate("MainWindow", "ID"))
        self.label_instruction.setText(_translate("MainWindow", "..."))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

I want to add additional functionalities such as click events. Leaving the template_ui.py untouched.

from template_ui import *
import sys


class ExtMainWindow(Ui_MainWindow):
    def __init__(self, MainWindow):
        Ui_MainWindow.setupUi(self, MainWindow) 
        self.btn_view_report.clicked.connect(self.event_btn_view_report)
        self.btn_new_patient.clicked.connect(self.event_btn_new_patient)

    def event_btn_view_report(self):
        print("Button View Report clicked")
        

    def event_btn_new_patient(self, MainWindow):
        print("Button Add New clicked")
        

def init_window():
    app = QtWidgets.QApplication(sys.argv) # PyQT5 default
    MainWindow = QtWidgets.QMainWindow() # PyQT5 default
    ExtMainWindow(MainWindow)
    MainWindow.show() # 
    sys.exit(app.exec_())

if __name__ == "__main__":
    init_window()
Andrie
  • 175
  • 1
  • 12
  • That's exactly what you should do: *NEVER* modify the files generated from pyuic. Just avoid subclassing the UI_* classes, as it's unnecessary and may lead to confusion; I suggest you to read more about [using Qt Designer](https://www.riverbankcomputing.com/static/Docs/PyQt5/designer.html). – musicamante Jul 11 '20 at 15:03
  • @musicamante thanks for the quick reply, reading into the source you provided! – Andrie Jul 11 '20 at 15:06

0 Answers0