Как убрать отступы по вертикали между лейблами PyQT
Как убрать отступы по вертикали между лейблами "Smart House" и "Переключатели" и по горизонтали между "Реле1" и радиокнопками?
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QHBoxLayout, QLabel, \
QPushButton, QRadioButton, QLineEdit, QCheckBox, QDockWidget, QSizePolicy
from PyQt5.QtCore import QTimer, QDateTime, Qt
class MainApplication(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Графический интерфейс")
self.setGeometry(0, 0, 800, 600)
self.create_menu_bar()
self.create_side_panel()
self.central_widget = QTabWidget()
self.setCentralWidget(self.central_widget)
self.create_smart_house_tab()
self.create_tab("Вкладка 2")
self.create_tab("Вкладка 3")
self.create_tab("Вкладка 4")
self.create_tab("Вкладка 5")
def create_menu_bar(self):
menu_layout = QVBoxLayout()
self.date_label = QLabel(self)
menu_layout.addWidget(self.date_label, alignment=Qt.AlignHCenter)
menu_widget = QWidget(self)
menu_widget.setLayout(menu_layout)
self.setMenuWidget(menu_widget)
self.update_date_time()
def create_side_panel(self):
side_panel = QDockWidget("Side Panel", self)
side_panel.setFixedWidth(120)
side_panel.setFeatures(QDockWidget.NoDockWidgetFeatures)
side_panel.setWidget(self.create_side_panel_content())
self.addDockWidget(Qt.LeftDockWidgetArea, side_panel)
def create_side_panel_content(self):
side_panel_content = QWidget(self)
side_layout = QVBoxLayout(side_panel_content)
for i in range(1, 6):
button = QPushButton(f"Вкладка {i}", self)
button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
button.clicked.connect(lambda _, index=i: self.show_tab(index))
# Добавляем стиль для скругленных углов, голубого цвета и размера
button.setStyleSheet(
"border-radius: 5px; padding: 5px; margin: 0px; "
"background-color: #00BFFF; color: white; font-size: 18px;")
side_layout.addWidget(button, alignment=Qt.AlignHCenter)
return side_panel_content
def create_smart_house_tab(self):
tab = QWidget()
self.central_widget.addTab(tab, "Smart House")
smart_house_label = QLabel("Smart House", self)
smart_house_label.setStyleSheet("font-size: 24px;")
switch_label = QLabel("Переключатели", self)
relay1_label = QLabel("Реле1", self)
relay1_on_radio = QRadioButton("Вкл.", self)
relay1_off_radio = QRadioButton("Выкл.", self)
relay2_label = QLabel("Реле2", self)
relay2_on_radio = QRadioButton("Вкл.", self)
relay2_off_radio = QRadioButton("Выкл.", self)
relay3_label = QLabel("Реле3", self)
relay3_on_radio = QRadioButton("Вкл.", self)
relay3_off_radio = QRadioButton("Выкл.", self)
relay1_off_radio.setChecked(True)
relay2_off_radio.setChecked(True)
relay3_off_radio.setChecked(True)
layout = QVBoxLayout(tab)
layout.addWidget(smart_house_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
switch_layout = QVBoxLayout()
switch_layout.addWidget(switch_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
# Размещаем радиокнопки для Реле1
relay1_layout = QHBoxLayout()
relay1_layout.addWidget(relay1_label)
relay1_layout.addWidget(relay1_on_radio)
relay1_layout.addWidget(relay1_off_radio)
switch_layout.addLayout(relay1_layout)
# Размещаем радиокнопки для Реле2
relay2_layout = QHBoxLayout()
relay2_layout.addWidget(relay2_label)
relay2_layout.addWidget(relay2_on_radio)
relay2_layout.addWidget(relay2_off_radio)
switch_layout.addLayout(relay2_layout)
# Размещаем радиокнопки для Реле3
relay3_layout = QHBoxLayout()
relay3_layout.addWidget(relay3_label)
relay3_layout.addWidget(relay3_on_radio)
relay3_layout.addWidget(relay3_off_radio)
switch_layout.addLayout(relay3_layout)
layout.addLayout(switch_layout)
sensors_label = QLabel("Датчики", self)
sensor1_label = QLabel("Датчик1", self)
value_label = QLabel("12345", self)
sensors_layout = QVBoxLayout()
sensors_layout.addWidget(sensors_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
sensor_layout = QHBoxLayout()
sensor_layout.addWidget(sensor1_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
sensor_layout.addWidget(value_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
sensors_layout.addLayout(sensor_layout)
layout.addLayout(sensors_layout)
def create_tab(self, tab_name):
tab = QWidget()
self.central_widget.addTab(tab, tab_name)
label = QLabel("Текст:", self)
entry = QLineEdit(self)
button = QPushButton("Нажми меня", self)
checkbox = QCheckBox("Чекбокс", self)
layout = QVBoxLayout(tab)
layout.addWidget(label, alignment=Qt.AlignTop | Qt.AlignHCenter)
layout.addWidget(entry, alignment=Qt.AlignTop | Qt.AlignHCenter)
layout.addWidget(button, alignment=Qt.AlignTop | Qt.AlignHCenter)
layout.addWidget(checkbox, alignment=Qt.AlignTop | Qt.AlignHCenter)
def show_tab(self, index):
self.central_widget.setCurrentIndex(index - 1)
def update_date_time(self):
current_time = QDateTime.currentDateTime().toString("yyyy-MM-dd HH:mm:ss")
self.date_label.setText(f"Текущее время: {current_time}")
self.date_label.setStyleSheet("font-size: 16px;") # Увеличиваем размер шрифта
QTimer.singleShot(1000, self.update_date_time)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_app = MainApplication()
main_app.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант:
void QBoxLayout::addStretch(int
stretch= 0)Добавляет растягиваемое пространство (QSpacerItem) с нулевым минимальным размером и коэффициентом растяжения
stretchв конец этого макета блока.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, \
QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, \
QRadioButton, QLineEdit, QCheckBox, QDockWidget, QSizePolicy
from PyQt5.QtCore import QTimer, QDateTime, Qt
class MainApplication(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Графический интерфейс")
self.setGeometry(0, 0, 800, 600)
self.create_menu_bar()
self.create_side_panel()
self.central_widget = QTabWidget()
self.setCentralWidget(self.central_widget)
self.central_widget.setStyleSheet("background-color: rgb(200, 222, 222);")
self.create_smart_house_tab()
self.create_tab("Вкладка 2")
self.create_tab("Вкладка 3")
self.create_tab("Вкладка 4")
self.create_tab("Вкладка 5")
def create_menu_bar(self):
menu_layout = QVBoxLayout()
self.date_label = QLabel(self)
menu_layout.addWidget(self.date_label, alignment=Qt.AlignHCenter)
menu_widget = QWidget(self)
menu_widget.setLayout(menu_layout)
self.setMenuWidget(menu_widget)
self.update_date_time()
def create_side_panel(self):
side_panel = QDockWidget("Side Panel", self)
side_panel.setFixedWidth(120)
side_panel.setFeatures(QDockWidget.NoDockWidgetFeatures)
side_panel.setWidget(self.create_side_panel_content())
self.addDockWidget(Qt.LeftDockWidgetArea, side_panel)
def create_side_panel_content(self):
side_panel_content = QWidget(self)
side_layout = QVBoxLayout(side_panel_content)
for i in range(1, 6):
button = QPushButton(f"Вкладка {i}", self)
button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
button.clicked.connect(lambda _, index=i: self.show_tab(index))
# Добавляем стиль для скругленных углов, голубого цвета и размера
button.setStyleSheet(
"border-radius: 5px; padding: 5px; margin: 0px; "
"background-color: #00BFFF; color: white; font-size: 18px;")
side_layout.addWidget(button, alignment=Qt.AlignHCenter)
return side_panel_content
def create_smart_house_tab(self):
tab = QWidget()
self.central_widget.addTab(tab, "Smart House")
smart_house_label = QLabel("Smart House", self,
alignment=Qt.AlignTop | Qt.AlignHCenter) # +++
smart_house_label.setStyleSheet(
"font-size: 24px; background-color: #775;")
switch_label = QLabel("Переключатели", self,
alignment=Qt.AlignTop|Qt.AlignHCenter) # +++
relay1_label = QLabel("Реле1", self)
self.central_widget.setStyleSheet("background-color: #9bc;")
relay1_on_radio = QRadioButton("Вкл.", self)
relay1_off_radio = QRadioButton("Выкл.", self)
relay2_label = QLabel("Реле2", self)
relay2_on_radio = QRadioButton("Вкл.", self)
relay2_off_radio = QRadioButton("Выкл.", self)
relay3_label = QLabel("Реле3", self)
relay3_on_radio = QRadioButton("Вкл.", self)
relay3_off_radio = QRadioButton("Выкл.", self)
relay1_off_radio.setChecked(True)
relay2_off_radio.setChecked(True)
relay3_off_radio.setChecked(True)
layout = QVBoxLayout(tab)
# layout.addWidget(smart_house_label, alignment=Qt.AlignTop|Qt.AlignHCenter)
layout.addWidget(smart_house_label) # +++
switch_layout = QVBoxLayout()
# switch_layout.addWidget(switch_label, alignment=Qt.AlignTop|Qt.AlignHCenter)
switch_layout.addWidget(switch_label) # +++
# Размещаем радиокнопки для Реле1
relay1_layout = QHBoxLayout()
relay1_layout.addStretch(1) # +++
relay1_layout.addWidget(relay1_label)
relay1_layout.addWidget(relay1_on_radio)
relay1_layout.addWidget(relay1_off_radio)
switch_layout.addLayout(relay1_layout)
relay1_layout.addStretch(1) # +++
# Размещаем радиокнопки для Реле2
relay2_layout = QHBoxLayout()
relay2_layout.addStretch(1) # +++
relay2_layout.addWidget(relay2_label)
relay2_layout.addWidget(relay2_on_radio)
relay2_layout.addWidget(relay2_off_radio)
relay2_layout.addStretch(1) # +++
switch_layout.addLayout(relay2_layout)
# Размещаем радиокнопки для Реле3
relay3_layout = QHBoxLayout()
relay3_layout.addStretch(1) # +++
relay3_layout.addWidget(relay3_label)
relay3_layout.addWidget(relay3_on_radio)
relay3_layout.addWidget(relay3_off_radio)
relay3_layout.addStretch(1) # +++
switch_layout.addLayout(relay3_layout)
layout.addLayout(switch_layout)
# +++
switch_layout.addStretch(1) # +++
sensors_label = QLabel("Датчики", self)
sensor1_label = QLabel("Датчик1", self)
value_label = QLabel("12345", self)
sensors_layout = QVBoxLayout()
sensors_layout.addWidget(sensors_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
sensor_layout = QHBoxLayout()
sensor_layout.addWidget(sensor1_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
sensor_layout.addWidget(value_label, alignment=Qt.AlignTop | Qt.AlignHCenter)
sensors_layout.addLayout(sensor_layout)
layout.addLayout(sensors_layout)
def create_tab(self, tab_name):
tab = QWidget()
self.central_widget.addTab(tab, tab_name)
label = QLabel("Текст:", self)
entry = QLineEdit(self)
button = QPushButton("Нажми меня", self)
checkbox = QCheckBox("Чекбокс", self)
layout = QVBoxLayout(tab)
layout.addWidget(label, alignment=Qt.AlignTop | Qt.AlignHCenter)
layout.addWidget(entry, alignment=Qt.AlignTop | Qt.AlignHCenter)
layout.addWidget(button, alignment=Qt.AlignTop | Qt.AlignHCenter)
layout.addWidget(checkbox, alignment=Qt.AlignTop | Qt.AlignHCenter)
def show_tab(self, index):
self.central_widget.setCurrentIndex(index - 1)
def update_date_time(self):
current_time = QDateTime.currentDateTime().toString("yyyy-MM-dd HH:mm:ss")
self.date_label.setText(f"Текущее время: {current_time}")
self.date_label.setStyleSheet("font-size: 16px;") # Увеличиваем размер шрифта
QTimer.singleShot(1000, self.update_date_time)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_app = MainApplication()
main_app.show()
sys.exit(app.exec_())
P.S. Про расположение "Датчиков" вы ничего не писали.
