Как сделать переключатель между вкладками?
Я решил попробовать создать переключатель между вкладками. Работающий как на картинке ниже
Я использовал для этого вот этот код
import sys
import random
#from PySide2 import QtCore, QtGui, QtWidgets # <--- PySide2
#from PyQt5 import QtCore, QtGui, QtWidgets # <--- PyQt5
class CollapsibleBox_radio(QtWidgets.QWidget):
def __init__(self, title="", parent=None):
super(CollapsibleBox_radio, self).__init__(parent)
self.__expand = False # but on/off
self.toggle_button = QtWidgets.QToolButton(
text=title, checkable=True, checked=False
)
def my_fun(self, val):
self.toggle_button = val
self.toggle_button.setStyleSheet("QToolButton { border: ; }")
self.toggle_button.setToolButtonStyle(
QtCore.Qt.ToolButtonTextBesideIcon
)
self.toggle_button.setArrowType(QtCore.Qt.RightArrow)
self.toggle_button.pressed.connect(self.on_pressed)
self.toggle_animation = QtCore.QParallelAnimationGroup(self)
self.content_area = QtWidgets.QScrollArea(
maximumHeight=0, minimumHeight=0
)
self.content_area.setSizePolicy(
QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed
)
self.content_area.setFrameShape(QtWidgets.QFrame.NoFrame)
lay = QtWidgets.QVBoxLayout(self)
self.toggle_button.setObjectName(u"click_me")
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
lay.addWidget(self.toggle_button)
lay.addWidget(self.content_area)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self, b"minimumHeight")
)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self, b"maximumHeight")
)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self.content_area, b"maximumHeight")
)
#@QtCore.Slot() # <--- PySide2
#@QtCore.pyqtSlot() # <--- PyQt5
def on_pressed(self):
self.toggle_button.setArrowType(
QtCore.Qt.DownArrow if not self.__expand else QtCore.Qt.RightArrow
)
self.toggle_animation.setDirection(
QtCore.QAbstractAnimation.Forward
if not self.__expand
else QtCore.QAbstractAnimation.Backward
)
# invert vulve __expand
self.__expand = not self.__expand
self.toggle_animation.start()
def setContentLayout(self, layout):
lay = self.content_area.layout()
del lay
self.content_area.setLayout(layout)
collapsed_height = (
self.sizeHint().height() - self.content_area.maximumHeight()
)
content_height = layout.sizeHint().height()
for i in range(self.toggle_animation.animationCount()):
animation = self.toggle_animation.animationAt(i)
animation.setDuration(500)
animation.setStartValue(collapsed_height)
animation.setEndValue(collapsed_height + content_height)
content_animation = self.toggle_animation.animationAt(
self.toggle_animation.animationCount() - 1
)
content_animation.setDuration(500)
content_animation.setStartValue(0)
content_animation.setEndValue(content_height)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
#------centralwidget------
centralwidget = QtWidgets.QWidget()
centralwidget.setObjectName(u"centralwidget")
self.setCentralWidget(centralwidget)
#------layout------
central_w_layout = QtWidgets.QGridLayout(centralwidget)
central_w_layout.setObjectName(u"central_w_layout")
#------Spacer------
vs_up = QtWidgets.QSpacerItem(17, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
central_w_layout.addItem(vs_up, 0, 1, 1, 1)
hs_left = QtWidgets.QSpacerItem(327, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
central_w_layout.addItem(hs_left, 1, 0, 1, 1)
hs_right = QtWidgets.QSpacerItem(326, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
central_w_layout.addItem(hs_right, 1, 2, 1, 1)
vs_down = QtWidgets.QSpacerItem(20, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
central_w_layout.addItem(vs_down, 2, 1, 1, 1)
#------block------
block = QtWidgets.QWidget()
block.setObjectName(u"block")
central_w_layout.addWidget(block, 1, 1, 1, 1)
#------layout------
vlay = QtWidgets.QVBoxLayout(block)
vlay.setObjectName(u"central_c_layout")
#Radio
test1_menu_block = QtWidgets.QWidget(block)
test1_menu_block.setObjectName(u"test1_menu_block")
verticalLayout = QtWidgets.QHBoxLayout(test1_menu_block)
verticalLayout.setObjectName(u"verticalLayout")
#add
vlay.addWidget(test1_menu_block)
#----Logic_but----
for x in range(3):
#test1_but_menu = QtWidgets.QRadioButton(test1_menu_block, clicked=lambda _, check_1 = test1_but_menu.isChecked(): if check_1 == True: print('check') else: print('uncheked'))
test1_but_menu = QtWidgets.QRadioButton(test1_menu_block, checkable=True, checked=False)
test1_but_menu.setObjectName("test1_butt_menu_{}".format(x))
verticalLayout.addWidget(test1_but_menu)
def off_pressed_radio():
check_1 = test1_but_menu.isChecked()
if check_1 == True:
print('check')
test1_but_menu.setAutoExclusive(True) #Unchecked/Checked
test1_but_menu.setChecked(False) #Unchecked/Checked
test1_but_menu.setAutoExclusive(False) #Unchecked/Checked
else:
print('uncheked')
test1_but_menu.pressed.connect(off_pressed_radio)
box_rad = CollapsibleBox_radio("manu_radio{}".format(x))
#box_rad.my_fun(test1_but_menu)
vlay.addWidget(box_rad)
lay = QtWidgets.QVBoxLayout()
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
for j in range(3):
label = QtWidgets.QLabel("Label {}-{}".format(x, j))
color = QtGui.QColor(*[random.randint(0, 255) for _ in range(3)])
label.setStyleSheet(
"background-color: {}; color : white;".format(color.name())
)
label.setAlignment(QtCore.Qt.AlignCenter)
label.setMaximumWidth(150)
label.setMinimumHeight(25)
textButton = "Button {}-{}".format(x, j)
pushButton = QtWidgets.QPushButton(textButton,
clicked=lambda _, t=textButton: print(t))
pushButton.setMaximumWidth(150)
pushButton.setMinimumHeight(25)
lay.addWidget(pushButton)
lay.addWidget(label)
box_rad.setContentLayout(lay)
vlay.addStretch()
StyleSheet = """
#centralwidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#000;
color:#fff;
}
#centralwidget QWidget,
#centralwidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#fff;
color:#000;
}
#click_me{
background:#000;
color:#fff;
}
"""
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(StyleSheet)
w = MainWindow()
w.resize(640, 570) #Size window
w.show()
sys.exit(app.exec_())
Но к сожалению я так и не смог правильно настроить код что бы он работал как мне нужно. Если кому интересно может кто нибудь мне помочь с этим?
Версия 2
import sys
import random
#from PySide2 import QtCore, QtGui, QtWidgets # <--- PySide2
#from PyQt5 import QtCore, QtGui, QtWidgets # <--- PyQt5
class CollapsibleBox_radio(QtWidgets.QWidget):
def __init__(self, title="", parent=None):
super(CollapsibleBox_radio, self).__init__(parent)
self._expand = False # - self.__expand ; + self._expand !!!
self.toggle_button = QtWidgets.QToolButton(
text=title, checkable=True, checked=False
)
self.toggle_button.setStyleSheet("QToolButton { height:0px; width:0px; opacity:0; }")
self.toggle_button.setToolButtonStyle(
QtCore.Qt.ToolButtonTextBesideIcon
)
self.toggle_button.setArrowType(QtCore.Qt.RightArrow)
self.toggle_button.pressed.connect(self.on_pressed)
self.toggle_animation = QtCore.QParallelAnimationGroup(self)
self.content_area = QtWidgets.QScrollArea(
maximumHeight=0, minimumHeight=0
)
self.content_area.setSizePolicy(
QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed
)
self.content_area.setFrameShape(QtWidgets.QFrame.NoFrame)
lay = QtWidgets.QVBoxLayout(self)
self.toggle_button.setObjectName(u"click_me")
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
lay.addWidget(self.toggle_button)
lay.addWidget(self.content_area)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self, b"minimumHeight")
)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self, b"maximumHeight")
)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self.content_area, b"maximumHeight")
)
#@QtCore.Slot() # <--- PySide2
#@QtCore.pyqtSlot() # <--- PyQt5
def on_pressed(self):
self.toggle_button.setArrowType(
QtCore.Qt.DownArrow if not self._expand else QtCore.Qt.RightArrow
)
self.toggle_animation.setDirection(
QtCore.QAbstractAnimation.Forward
if not self._expand
else QtCore.QAbstractAnimation.Backward
)
# invert vulve _expand
self._expand = not self._expand
self.toggle_animation.start()
def setContentLayout(self, layout):
lay = self.content_area.layout()
del lay
self.content_area.setLayout(layout)
collapsed_height = (
self.sizeHint().height() - self.content_area.maximumHeight()
)
content_height = layout.sizeHint().height()
for i in range(self.toggle_animation.animationCount()):
animation = self.toggle_animation.animationAt(i)
animation.setDuration(500)
animation.setStartValue(collapsed_height)
animation.setEndValue(collapsed_height + content_height)
content_animation = self.toggle_animation.animationAt(
self.toggle_animation.animationCount() - 1
)
content_animation.setDuration(500)
content_animation.setStartValue(0)
content_animation.setEndValue(content_height)
class MainWindow(QtWidgets.QMainWindow):
# number of radio
def num(self):
return 3
def __init__(self, parent=None):
super().__init__(parent)
#------centralwidget------
centralwidget = QtWidgets.QWidget()
centralwidget.setObjectName(u"centralwidget")
self.setCentralWidget(centralwidget)
#------layout------
central_w_layout = QtWidgets.QGridLayout(centralwidget)
central_w_layout.setObjectName(u"central_w_layout")
#------Spacer------
vs_up = QtWidgets.QSpacerItem(17, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
central_w_layout.addItem(vs_up, 0, 1, 1, 1)
hs_left = QtWidgets.QSpacerItem(327, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
central_w_layout.addItem(hs_left, 1, 0, 1, 1)
hs_right = QtWidgets.QSpacerItem(326, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
central_w_layout.addItem(hs_right, 1, 2, 1, 1)
vs_down = QtWidgets.QSpacerItem(20, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
central_w_layout.addItem(vs_down, 2, 1, 1, 1)
#------block------
block = QtWidgets.QWidget()
block.setObjectName(u"block")
central_w_layout.addWidget(block, 1, 1, 1, 1) ######
#------layout------
layout_block = QtWidgets.QVBoxLayout(block)
layout_block.setObjectName(u"layout_block")
#------radio_block------
radio_block = QtWidgets.QWidget()
radio_block.setObjectName(u"radio_block")
layout_block.addWidget(radio_block) ######
#------radio_layout------
radio_layout = QtWidgets.QHBoxLayout(radio_block)
radio_layout.setObjectName(u"radio_layout")
#------radio content------
radio_content = QtWidgets.QVBoxLayout()
radio_content.setObjectName(u"radio_content")
self.radio_content_arr = []
#------radio but------
self.tes_but = []
for x in range(self.num()):
tes_but_add = QtWidgets.QRadioButton('{}'.format(x))
tes_but_add.setObjectName("radio_but_{}".format(x))
self.tes_but.append(tes_but_add)
self.tes_but[x].pressed.connect(self.offRadioButton)
self.tes_but[x].toggled.connect(self.onRadioButton)
#------ADD------
radio_layout.addWidget(self.tes_but[x])
#------BOX------
box_rad = CollapsibleBox_radio("manu_radio{}".format(x))
self.radio_content_arr.append(box_rad)
radio_content.addWidget(box_rad)
lay = QtWidgets.QVBoxLayout()
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
#------content------
for j in range(3):
label = QtWidgets.QLabel("Label {}-{}".format(x, j))
color = QtGui.QColor(*[random.randint(0, 255) for _ in range(3)])
label.setStyleSheet(
"background-color: {}; color : white;".format(color.name())
)
label.setAlignment(QtCore.Qt.AlignCenter)
label.setMaximumWidth(150)
label.setMinimumHeight(25)
textButton = "Button {}-{}".format(x, j)
pushButton = QtWidgets.QPushButton(textButton,
clicked=lambda _, t=textButton: print(t))
pushButton.setMaximumWidth(150)
pushButton.setMinimumHeight(25)
lay.addWidget(pushButton)
lay.addWidget(label)
box_rad.setContentLayout(lay)
#------ADD------
radio_content.addStretch()
layout_block.addLayout(radio_content) # +++
def offRadioButton(self):
check_1 = self.sender().isChecked()
if check_1 == True:
print('check')
self.sender().setAutoExclusive(True) #Unchecked/Checked
self.sender().setChecked(False) #Unchecked/Checked
self.sender().setAutoExclusive(False) #Unchecked/Checked
else:
print('uncheked')
def onRadioButton(self):
for r in range(self.num()):
if self.radio_content_arr[r]._expand:
self.radio_content_arr[r].toggle_button.click()
if self.tes_but[r].isChecked() and (not self.radio_content_arr[r]._expand):
self.radio_content_arr[r].toggle_button.click()
elif not self.tes_but[r].isChecked() and self.radio_content_arr[r]._expand:
self.radio_content_arr[r].toggle_button.click()
StyleSheet = """
#centralwidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#000;
color:#fff;
}
#centralwidget QWidget,
#centralwidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#fff;
color:#000;
}
#click_me{
background:#000;
color:#fff;
}
"""
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(StyleSheet)
w = MainWindow()
w.resize(640, 570) #Size window
w.show()
sys.exit(app.exec_())
В версии 2 я не смог решить следующие проблемы
1 Когда кнопка радио нажата дважды она из радио превращается в checkbox
2 Я не смог полностью скрыть кнопку toggle_button
3 Скрытие и раскрытие меню с контентом происходит одновременно а не постепенно как на картинке в начале вопроса
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
QRadioButton'ывключены вQGroupBox.CollapsibleBox_radio'ыдобавил в списокlist_box_rad.self.__expandзаменил наself._expand.
import sys
import random
#from PySide2 import QtCore, QtGui, QtWidgets # <--- PySide2
from PyQt5 import QtCore, QtGui, QtWidgets # <--- PyQt5
class CollapsibleBox_radio(QtWidgets.QWidget):
def __init__(self, title="", parent=None):
super(CollapsibleBox_radio, self).__init__(parent)
self._expand = False # - self.__expand ; + self._expand !!!
self.toggle_button = QtWidgets.QToolButton(
text=title, checkable=True, checked=False
)
def my_fun(self, val):
self.toggle_button = val
self.toggle_button.setStyleSheet("QToolButton { border: ; }")
self.toggle_button.setToolButtonStyle(
QtCore.Qt.ToolButtonTextBesideIcon
)
self.toggle_button.setArrowType(QtCore.Qt.RightArrow)
self.toggle_button.pressed.connect(self.on_pressed)
self.toggle_animation = QtCore.QParallelAnimationGroup(self)
self.content_area = QtWidgets.QScrollArea(
maximumHeight=0, minimumHeight=0
)
self.content_area.setSizePolicy(
QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed
)
self.content_area.setFrameShape(QtWidgets.QFrame.NoFrame)
lay = QtWidgets.QVBoxLayout(self)
self.toggle_button.setObjectName(u"click_me")
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
lay.addWidget(self.toggle_button)
lay.addWidget(self.content_area)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self, b"minimumHeight")
)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self, b"maximumHeight")
)
self.toggle_animation.addAnimation(
QtCore.QPropertyAnimation(self.content_area, b"maximumHeight")
)
#@QtCore.Slot() # <--- PySide2
@QtCore.pyqtSlot() # <--- PyQt5
def on_pressed(self):
self.toggle_button.setArrowType(
QtCore.Qt.DownArrow if not self._expand else QtCore.Qt.RightArrow
)
self.toggle_animation.setDirection(
QtCore.QAbstractAnimation.Forward
if not self._expand
else QtCore.QAbstractAnimation.Backward
)
# invert vulve _expand
self._expand = not self._expand
self.toggle_animation.start()
def setContentLayout(self, layout):
lay = self.content_area.layout()
del lay
self.content_area.setLayout(layout)
collapsed_height = (
self.sizeHint().height() - self.content_area.maximumHeight()
)
content_height = layout.sizeHint().height()
for i in range(self.toggle_animation.animationCount()):
animation = self.toggle_animation.animationAt(i)
animation.setDuration(500)
animation.setStartValue(collapsed_height)
animation.setEndValue(collapsed_height + content_height)
content_animation = self.toggle_animation.animationAt(
self.toggle_animation.animationCount() - 1
)
content_animation.setDuration(500)
content_animation.setStartValue(0)
content_animation.setEndValue(content_height)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
#------centralwidget------
centralwidget = QtWidgets.QWidget()
centralwidget.setObjectName(u"centralwidget")
self.setCentralWidget(centralwidget)
#------layout------
central_w_layout = QtWidgets.QGridLayout(centralwidget)
central_w_layout.setObjectName(u"central_w_layout")
#------Spacer------
vs_up = QtWidgets.QSpacerItem(17, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
central_w_layout.addItem(vs_up, 0, 1, 1, 1)
hs_left = QtWidgets.QSpacerItem(327, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
central_w_layout.addItem(hs_left, 1, 0, 1, 1)
hs_right = QtWidgets.QSpacerItem(326, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
central_w_layout.addItem(hs_right, 1, 2, 1, 1)
vs_down = QtWidgets.QSpacerItem(20, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
central_w_layout.addItem(vs_down, 2, 1, 1, 1)
#+ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.groupbox = QtWidgets.QGroupBox(self)
layout_H = QtWidgets.QHBoxLayout(self.groupbox)
layout_H.setContentsMargins(0, 0, 0, 0)
self.radio_0 = QtWidgets.QRadioButton("0")
self.radio_0.toggled.connect(self.onRadioButton)
layout_H.addWidget(self.radio_0)
self.radio_1 = QtWidgets.QRadioButton("1")
self.radio_1.toggled.connect(self.onRadioButton)
layout_H.addWidget(self.radio_1)
self.radio_2 = QtWidgets.QRadioButton("2")
self.radio_2.toggled.connect(self.onRadioButton)
layout_H.addWidget(self.radio_2)
central_w_layout.addWidget(self.groupbox, 1, 1, 1, 1)
#+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'''
#------block------
block = QtWidgets.QWidget()
block.setObjectName(u"block")
central_w_layout.addWidget(block, 1, 1, 1, 5) ######
#------layout------
vlay = QtWidgets.QVBoxLayout(block)
vlay.setObjectName(u"central_c_layout")
#Radio
test1_menu_block = QtWidgets.QWidget(block)
test1_menu_block.setObjectName(u"test1_menu_block")
verticalLayout = QtWidgets.QHBoxLayout(test1_menu_block)
verticalLayout.setObjectName(u"verticalLayout")
#add
vlay.addWidget(test1_menu_block)
#----Logic_but----
for x in range(3):
#test1_but_menu = QtWidgets.QRadioButton(test1_menu_block, clicked=lambda _, check_1 = test1_but_menu.isChecked(): if check_1 == True: print('check') else: print('uncheked'))
test1_but_menu = QtWidgets.QRadioButton(test1_menu_block, checkable=True, checked=False)
test1_but_menu.setObjectName("test1_butt_menu_{}".format(x))
verticalLayout.addWidget(test1_but_menu)
def off_pressed_radio():
check_1 = test1_but_menu.isChecked()
if check_1 == True:
print('check')
test1_but_menu.setAutoExclusive(True) #Unchecked/Checked
test1_but_menu.setChecked(False) #Unchecked/Checked
test1_but_menu.setAutoExclusive(False) #Unchecked/Checked
else:
print('uncheked')
test1_but_menu.pressed.connect(off_pressed_radio)
'''
#+ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
vlay = QtWidgets.QVBoxLayout()
vlay.setObjectName(u"central_c_layout")
self.list_box_rad = [] # +++ !!!
for x in range(3):
#+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
box_rad = CollapsibleBox_radio("manu_radio{}".format(x))
#box_rad.my_fun(test1_but_menu)
self.list_box_rad.append(box_rad) # +++
vlay.addWidget(box_rad)
lay = QtWidgets.QVBoxLayout()
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
for j in range(3):
label = QtWidgets.QLabel("Label {}-{}".format(x, j))
color = QtGui.QColor(*[random.randint(0, 255) for _ in range(3)])
label.setStyleSheet(
"background-color: {}; color : white;".format(color.name())
)
label.setAlignment(QtCore.Qt.AlignCenter)
label.setMaximumWidth(150)
label.setMinimumHeight(25)
textButton = "Button {}-{}".format(x, j)
pushButton = QtWidgets.QPushButton(textButton,
clicked=lambda _, t=textButton: print(t))
pushButton.setMaximumWidth(150)
pushButton.setMinimumHeight(25)
lay.addWidget(pushButton)
lay.addWidget(label)
box_rad.setContentLayout(lay)
vlay.addStretch()
central_w_layout.addLayout(vlay, 2, 1, 1, 1) # +++
#+ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def onRadioButton(self):
if self.sender().text() == '0':
if self.radio_0.isChecked() and (not self.list_box_rad[0]._expand):
self.list_box_rad[0].toggle_button.click()
elif not self.radio_0.isChecked() and self.list_box_rad[0]._expand:
self.list_box_rad[0].toggle_button.click()
if self.list_box_rad[1]._expand:
self.list_box_rad[1].toggle_button.click()
if self.list_box_rad[2]._expand:
self.list_box_rad[2].toggle_button.click()
if self.sender().text() == '1':
if self.radio_1.isChecked() and (not self.list_box_rad[1]._expand):
self.list_box_rad[1].toggle_button.click()
elif not self.radio_1.isChecked() and self.list_box_rad[1]._expand:
self.list_box_rad[1].toggle_button.click()
if self.list_box_rad[0]._expand:
self.list_box_rad[0].toggle_button.click()
if self.list_box_rad[2]._expand:
self.list_box_rad[2].toggle_button.click()
if self.sender().text() == '2':
if self.radio_2.isChecked() and (not self.list_box_rad[2]._expand):
self.list_box_rad[2].toggle_button.click()
elif not self.radio_2.isChecked() and self.list_box_rad[2]._expand:
self.list_box_rad[2].toggle_button.click()
if self.list_box_rad[0]._expand:
self.list_box_rad[0].toggle_button.click()
if self.list_box_rad[1]._expand:
self.list_box_rad[1].toggle_button.click()
#+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
StyleSheet = """
#centralwidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#000;
color:#fff;
}
#centralwidget QWidget,
#centralwidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#fff;
color:#000;
}
#click_me{
background:#000;
color:#fff;
}
"""
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(StyleSheet)
w = MainWindow()
w.resize(640, 570) #Size window
w.show()
sys.exit(app.exec_())

