Переход в окна в Python

Есть код. Три кнопки. Список - а, список - б, список - в. Нужно, чтобы по нажатию списка а, переходило как бы в новое окно и появлялись три кнопки, на который например цифры: 1, 2, 3. И так же по нажатию других списков.

import sys
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QLineEdit, QApplication, QMainWindow


class Guitar(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(250, 55, 1200, 800)
        self.setWindowTitle('Гитара')

        self.First_button = QPushButton('Список а', self)
        self.First_button.resize(170, 50)
        self.First_button.move(40, 100)

        self.Second_button = QPushButton('Список а', self)
        self.Second_button.resize(170, 50)
        self.Second_button.move(40, 200)

        self.Third_button = QPushButton('Список а', self)
        self.Third_button.resize(170, 50)
        self.Third_button.move(40, 300) 

Ответы (1 шт):

Автор решения: S. Nick

я понял вашу задачу так:

import sys
from PyQt5.Qt import *


class Widget(QWidget):
    def __init__(self, text, _list, parent=None):
        super(Widget, self).__init__(parent)
       
        self.listWidget = QListWidget(self)
        self.listWidget.setAlternatingRowColors(True)
        self.listWidget.currentRowChanged.connect (self.onCurrentRowChanged)
        for i in _list:
            item = QListWidgetItem('Item {0}'.format(i), self.listWidget)
        
        gridLayout = QGridLayout(self)
        gridLayout.addWidget(self.listWidget, 0, 0, 1, 7)
        
        for i in range(7):
            btn = QPushButton(f'{i}')
            btn.clicked.connect(lambda ch, i=i: self.onCurrentRowChanged(i))
            gridLayout.addWidget(btn, 1, i)
        
    def onCurrentRowChanged(self, currentRow):
        print(f'row = {currentRow}, text = {self.listWidget.item(currentRow).text()}') 
        

class PushButton(QPushButton):
    def __init__(self, text, parent=None):
        super(PushButton, self).__init__(parent)
        self.setFixedSize(170, 50)
        self.setText(text)
        

class Guitar(QWidget):
    def __init__(self):
        super().__init__()
        self.a_list = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', ]
        self.b_list = ['b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', ]
        self.c_list = ['c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', ]
        
        self.initUI()

    def initUI(self):
        self.a_button = PushButton('Список а', self)
        self.a_button.clicked.connect(lambda: self.onClicked(self.a_button))
        self.b_button = PushButton('Список b', self)
        self.b_button.clicked.connect(lambda: self.onClicked(self.b_button))
        self.c_button = PushButton('Список c', self)
        self.c_button.clicked.connect(lambda: self.onClicked(self.c_button))
        
        self.widget = Widget('Список а', self.a_list, self)
        
        self.gridLayout = QGridLayout(self)
        self.gridLayout.addWidget(self.a_button, 0, 0, alignment=Qt.AlignLeft)
        self.gridLayout.addWidget(self.b_button, 1, 0, alignment=Qt.AlignLeft)
        self.gridLayout.addWidget(self.c_button, 2, 0, alignment=Qt.AlignLeft)
        self.gridLayout.addWidget(self.widget, 0, 1, 3, 1)
        self.gridLayout.setColumnStretch(1, 1)

    def onClicked(self, btn):
        print(f'Click: {btn.text()}')
        text = btn.text()
        self.widget.hide()
        if text == 'Список а':
           self.widget = Widget('Список а', self.a_list, self) 
        elif text == 'Список b':
           self.widget = Widget('Список b', self.b_list, self)
        elif text == 'Список c':
           self.widget = Widget('Список c', self.c_list, self)
           
        self.gridLayout.addWidget(self.widget, 0, 1, 3, 1)   
        self.widget.show()
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Guitar()
    w.setWindowTitle('Гитара')
    w.resize(800, 400)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка