PyQt5: как открыть второе окно при нажатии кнопки?

Есть код, не могу реализовать, чтоб по нажатию кнопки вылезало новое окно, и там были еще 2 кнопки(см воторой код).Размеры окна, кнопок, их названия надо оставить такими же.

Вот первый код:

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('Первая струна(клавиша 1)', self)
self.First_button.resize(170, 50)
self.First_button.move(40, 100)

self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
self.Second_button.resize(170, 50)
self.Second_button.move(40, 200)

self.Accords_button = QPushButton('список аккордов', self)
self.Accords_button.resize(200, 100)
self.Accords_button.move(300, 500)

self.Songs_button = QPushButton('список песен', self)
self.Songs_button.resize(200, 100)
self.Songs_button.move(300, 200)


if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Guitar()
ex.show()
sys.exit(app.exec_())

Вот второй код:

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('Первая струна(клавиша 1)', self)
        self.First_button.resize(170, 50)
        self.First_button.move(40, 100)

        self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
        self.Second_button.resize(170, 50)
        self.Second_button.move(40, 200)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Guitar()
    ex.show()
    sys.exit(app.exec_())

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

Автор решения: denisnumb
  1. Если второй код у вас является отдельным файлом, то вам нужно сначала переименовать название его класса, чтобы не было конфликта с классом Guitar из первого кода.

  2. Затем импортируем второй код и его класс: from second_form import Guitar_2

  3. Затем добавим, например, кнопке First_button функцию открытия второго окна:

    self.First_button.clicked.connect(self.show_window_2)


В итоге получаем первый код:

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

class Guitar(QWidget):
    def __init__(self):
        super().__init__()
        
        self.setGeometry(250, 55, 1200, 800)
        self.setWindowTitle('Гитара')

        self.First_button = QPushButton('Первая струна(клавиша 1)', self)
        self.First_button.resize(170, 50)
        self.First_button.move(40, 100)
        self.First_button.clicked.connect(self.show_window_2)

        self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
        self.Second_button.resize(170, 50)
        self.Second_button.move(40, 200)

        self.Accords_button = QPushButton('список аккордов', self)
        self.Accords_button.resize(200, 100)
        self.Accords_button.move(300, 500)

        self.Songs_button = QPushButton('список песен', self)
        self.Songs_button.resize(200, 100)
        self.Songs_button.move(300, 200)

    def show_window_2(self):
        self.w2 = Guitar_2()
        self.w2.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Guitar()
    ex.show()
    sys.exit(app.exec_())

Второй код:

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

class Guitar_2(QWidget):
    def __init__(self):
        super().__init__()
        
        self.setGeometry(250, 55, 1200, 800)
        self.setWindowTitle('Гитара')

        self.First_button = QPushButton('Первая струна(клавиша 1)', self)
        self.First_button.resize(170, 50)
        self.First_button.move(40, 100)

        self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
        self.Second_button.resize(170, 50)
        self.Second_button.move(40, 200)

Также их можно объединить в один: просто перенесите class Guitar_2(QWidget): в первый код и уберите импорт этого класса, так как он больше не будет использоваться.

→ Ссылка