Переход в окна в 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_())
