Currently, I met the problem is when I run it only shows QHVerticalRight, maybeQHVeritcalLeft was overwritten by QHVerticalRight.
Here is the sample code for that: `
class DataEntryForm(QWidget):
def __init__(self):
super().__init__()
self.layoutVerLeft = QVBoxLayout()
self.items = 0
self.flag = 0
self._data = {}
self.lstClear = ['Xóa tất cả', 'Lựa chọn dòng']
self.table = QTableWidget()
self.labelImage = QLabel()
self.layoutVer = QHBoxLayout()
self.layoutHLeft = QVBoxLayout()
self.layoutHRight = QVBoxLayout()
self.lineEditName = QLineEdit()
self.lineEditBirth = QDateEdit()
self.lineEditPos = QLineEdit()
self.lineEditClub = QLineEdit()
self.lineEditNumber = QLineEdit()
self.comboBoxClear = QComboBox()
self.buttonAdd = QPushButton('Thêm')
self.buttonQuit = QPushButton('Thoát')
self.buttonPlot = QPushButton('Vẽ biểu đồ')
self.buttonEdit = QPushButton('Bật/Tắt Chỉnh Sửa')
self.buttonSaveImg = QPushButton('Lưu Biểu Đồ')
self.buttonSaveFile = QPushButton('Lưu Database')
self.buttonClear = QPushButton('Xóa')
# Layout Horizontal Left
self.layoutHorizonLeft()
# Layout Horizontal Right
self.layoutHorizonRight()
self.layoutVer.addLayout(self.layoutHLeft)
self.layoutVer.addLayout(self.layoutHRight)
self.fill_table()
def layoutHorizonLeft(self):
# Define Widget as you want
self.table.setColumnCount(5)
self.table.setHorizontalHeaderLabels(('Họ và Tên', 'Ngày Sinh', 'Vị Trí', 'Câu Lạc Bộ', 'Số Áo'))
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# Define Vertical Box
layoutVerLeft = QVBoxLayout()
# Image add Widget
layoutVerLeft.addWidget(self.labelImage, alignment=Qt.AlignCenter)
self.labelImage.setPixmap(QPixmap('football-manager-2021.jpg'))
# Table add Widget
layoutVerLeft.addWidget(self.table)
self.table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
# Add Layout
self.layoutHLeft.addLayout(layoutVerLeft)
# Set Layout
self.setLayout(self.layoutHLeft)
def layoutHorizonRight(self):
# Define Verical Box
layoutVerRight = QVBoxLayout()
# Tạo combo box clear
self.comboBoxClear.addItems(self.lstClear)
self.comboBoxClear.setEditable(True)
self.comboBoxClear.setFixedHeight(25)
lineEditComboClear = self.comboBoxClear.lineEdit()
lineEditComboClear.setAlignment(Qt.AlignCenter)
lineEditComboClear.setReadOnly(True)
# Cài đặt độ cao của các button
# self.buttonAdd.setFixedHeight(25)
# self.buttonQuit.setFixedHeight(25)
# self.buttonPlot.setFixedHeight(25)
# self.buttonEdit.setFixedHeight(25)
# self.buttonSaveImg.setFixedHeight(25)
# self.buttonSaveFile.setFixedHeight(25)
# self.buttonClear.setFixedHeight(25)
# Set button Thêm = False, để user nhập đầy đủ thông tin mới cho nhấn vào
self.buttonAdd.setEnabled(False)
# Khoảng cách giữa các khung nhập
layoutVerRight.setSpacing(5)
# Khung nhập thông tin
# Họ Tên
layoutVerRight.addWidget(QLabel('Họ và Tên'))
layoutVerRight.addWidget(self.lineEditName)
self.lineEditName.setMaxLength(25)
# Năm Sinh
layoutVerRight.addWidget(QLabel('Năm Sinh'))
layoutVerRight.addWidget(self.lineEditBirth)
self.lineEditBirth.setDisplayFormat("dd/MM/yyyy")
self.lineEditBirth.setCalendarPopup(True)
self.lineEditBirth.setMinimumDate(QDate(1900, 1, 1))
self.lineEditBirth.setMaximumDate(QDate(2100, 1, 1))
self.lineEditBirth.setDateTime(QtCore.QDateTime.currentDateTime())
# Vị Trí
layoutVerRight.addWidget(QLabel('Vị Trí'))
layoutVerRight.addWidget(self.lineEditPos)
self.lineEditPos.setMaxLength(20)
# Câu Lạc Bộ
layoutVerRight.addWidget(QLabel('Câu Lạc Bộ'))
layoutVerRight.addWidget(self.lineEditClub)
self.lineEditClub.setMaxLength(25)
# Số áo
layoutVerRight.addWidget(QLabel('Số Áo Thi Đấu'))
layoutVerRight.addWidget(self.lineEditNumber)
self.lineEditNumber.setValidator(QIntValidator())
self.lineEditNumber.setMaxLength(2)
# Nút nhấn lựa chọn chức năng
layoutRight_AddEdit = QHBoxLayout()
layoutRight_AddEdit.addWidget(self.buttonAdd)
layoutRight_AddEdit.addWidget(self.buttonEdit)
layoutRight_Clear = QHBoxLayout()
layoutRight_Clear.addWidget(self.comboBoxClear)
layoutRight_Clear.addWidget(self.buttonClear)
layoutRight_PlotQuit = QHBoxLayout()
layoutRight_PlotQuit.addWidget(self.buttonPlot)
layoutRight_PlotQuit.addWidget(self.buttonQuit)
layoutRight_Save = QHBoxLayout()
layoutRight_Save.addWidget(self.buttonSaveImg)
layoutRight_Save.addWidget(self.buttonSaveFile)
# Set layout theo thứ tự từ trên xuống
layoutVerRight.addLayout(layoutRight_AddEdit)
layoutVerRight.addLayout(layoutRight_Clear)
layoutVerRight.addLayout(layoutRight_Save)
layoutVerRight.addLayout(layoutRight_PlotQuit)
# chart widget
chartView = QChartView()
chartView.setRenderHint(QPainter.Antialiasing)
layoutVerRight.addWidget(chartView)
# Add Layout
self.layoutHRight.addLayout(layoutVerRight)
# Set Layout
self.setLayout(self.layoutHRight)
self.buttonQuit.clicked.connect(self.quit_message)
self.buttonPlot.clicked.connect(self.graph_chart)
self.buttonAdd.clicked.connect(self.add_entry)
self.buttonEdit.clicked.connect(self.edit_database)
self.buttonSaveImg.clicked.connect(self.export_img)
self.buttonSaveFile.clicked.connect(self.export_db_file)
self.buttonClear.clicked.connect(self.comboBox_Clear)
self.lineEditName.textChanged[str].connect(self.check_disable)
self.lineEditPos.textChanged[str].connect(self.check_disable)
self.lineEditClub.textChanged[str].connect(self.check_disable)
self.lineEditNumber.textChanged.connect(self.check_disable)
`
This image describe the position for layoutHorizonLeft and layoutHorizonRight define:

You're trying to set the two vertical layouts as main layouts, and you're not setting the actual layout you need, the horizontal one.
Remove both
setLayout()at the end oflayoutHorizonLeftandlayoutHorizonRight, and add the following line at the end of the__init__.Or, alternatively, just create that layout with the widget in the constructor:
Consider that you're adding an unnecessary level of layouts:
layoutVerLeftis useless, as you can add all widgets toself.layoutHLeft;layoutVerRight, since you can add all those widgets toself.layoutHRight;Note: don't confuse horizontal and vertical layouts and their namings.