I'm trying to make an interface and I want to insert Qlabel and Qbutton inside qlabel while keeping the resize feature as QVBoxLayout and QHBoxLayout do.
This is what I want to accomplish but with the change in size as QVBoxLayout and QHBoxLayout do.
My code :
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(604, 460)
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
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.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 9)
self.verticalLayout_2.setSpacing(0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label = QtWidgets.QLabel(self.frame)
self.label.setStyleSheet("QLabel {\n"
"background-color: #09102a;\n"
" }")
self.label.setText("")
self.label.setObjectName("label")
self.verticalLayout_2.addWidget(self.label)
self.frame_2 = QtWidgets.QFrame(self.frame)
self.frame_2.setMaximumSize(QtCore.QSize(16777215, 70))
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_2)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_2 = QtWidgets.QLabel(self.frame_2)
self.label_2.setMinimumSize(QtCore.QSize(120, 60))
self.label_2.setMaximumSize(QtCore.QSize(120, 60))
self.label_2.setStyleSheet("QLabel {\n"
" font: 75 13pt \"MS Shell Dlg 2\";\n"
" padding-right :5px;\n"
" padding-left :5px;\n"
" image: url(:/icons/images/icons/battery-monitoring.png);\n"
" image-position: left;\n"
" background-color: #171d3c;\n"
" border-radius :20px;\n"
" color: rgb(255, 255, 255);\n"
" }")
self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_2.setObjectName("label_2")
self.horizontalLayout.addWidget(self.label_2)
self.label_3 = QtWidgets.QLabel(self.frame_2)
self.label_3.setMinimumSize(QtCore.QSize(120, 60))
self.label_3.setMaximumSize(QtCore.QSize(120, 60))
self.label_3.setStyleSheet("QLabel {\n"
" font: 75 13pt \"MS Shell Dlg 2\";\n"
" padding-right :5px;\n"
" padding-left :5px;\n"
" image: url(:/icons/images/icons/battery-charger.png);\n"
" image-position: left;\n"
" background-color: #171d3c;\n"
" border-radius :20px;\n"
" color: rgb(255, 255, 255);\n"
" }")
self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_3.setObjectName("label_3")
self.horizontalLayout.addWidget(self.label_3)
self.verticalLayout_2.addWidget(self.frame_2)
self.verticalLayout.addWidget(self.frame)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_2.setText(_translate("Form", "label 2"))
self.label_3.setText(_translate("Form", "label 1"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
After executing the code, this is what I get:
The result I want to get. When the screen is enlarged, all the elements must be in place, and this cannot be done by QVBoxLayout and QHBoxLayout.