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 шт):
Если второй код у вас является отдельным файлом, то вам нужно сначала переименовать название его класса, чтобы не было конфликта с классом
Guitarиз первого кода.Затем импортируем второй код и его класс:
from second_form import Guitar_2Затем добавим, например, кнопке
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): в первый код и уберите импорт этого класса, так как он больше не будет использоваться.