кнопки на второй формеа PyQT не реагируют на нажатие
Я хочу создать приложение, в котором есть два окна. В каждом окне есть по две кнопки. При нажатии одной кнопки на первой форме выводится в консоль слово "Forward", при нажатии второй выводится вторая форма.
И во втором окне при нажатии на одну из кнопок должно просто выводиться сообщение:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from First_window import *
from Second_window import *
class MyWin(QtWidgets.QMainWindow):
def __init__(self,parent=None):
QtWidgets.QWidget.__init__(self,parent)
self.ui = Ui_First_window()
self.ui.setupUi(self)
self.ui.download_button.clicked.connect(self.handler)
self.ui.import_button.clicked.connect(self.openWindow)
def handler(self):
print("Forward!!!")
def openWindow(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_Second_window()
self.ui.setupUi(self.window)
# Second_window.hide()
self.window.show()
class MySecond(QtWidgets.QMainWindow):
def __init__(self,parent=MyWin):
QtWidgets.QWidget.__init__(self,parent)
self.ui = Ui_Second_window()
self.ui.setupUi(self)
self.ui.save_button.clicked.connect(self.handler2)
def handler2(self):
print("STOPPP!!!")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
К сожалению во второй форме кнопка не нажимается...Я пытался сделать следующие изменения
def openWindow(self):
self.window = MySecond()
self.window.show()
получил ошибку
QtWidgets.QWidget.__init__(self,parent)
TypeError: descriptor '__init__' requires a 'sip.simplewrapper' object but received a 'MySecond'
пытался изменить
QtWidgets.QWidget.__init__(self,parent)
на
QtWidgets.QMainWindow.__init__(self, parent)
и
class MySecond(QtWidgets.QMainWindow):
def __init__(self,parent=MyWin):
на
class MySecond(QtWidgets.QMainWindow):
def __init__(self,parent=None):
Никакого прогресса.Как решить данную задачу?
Вот первый модуль
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_First_window(object):
def setupUi(self, First_window):
First_window.setObjectName("First_window")
First_window.resize(605, 480)
self.centralwidget = QtWidgets.QWidget(First_window)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(90, 80, 431, 101))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.download_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.download_button.setObjectName("download_button")
self.horizontalLayout_2.addWidget(self.download_button)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.import_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.import_button.setObjectName("import_button")
self.horizontalLayout_2.addWidget(self.import_button)
self.table_for_data = QtWidgets.QTableWidget(self.centralwidget)
self.table_for_data.setGeometry(QtCore.QRect(90, 200, 431, 201))
self.table_for_data.setRowCount(4)
self.table_for_data.setColumnCount(4)
self.table_for_data.setObjectName("table_for_data")
First_window.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(First_window)
self.menubar.setGeometry(QtCore.QRect(0, 0, 605, 22))
self.menubar.setObjectName("menubar")
First_window.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(First_window)
self.statusbar.setObjectName("statusbar")
First_window.setStatusBar(self.statusbar)
self.retranslateUi(First_window)
QtCore.QMetaObject.connectSlotsByName(First_window)
def retranslateUi(self, First_window):
_translate = QtCore.QCoreApplication.translate
First_window.setWindowTitle(_translate("First_window", "MainWindow"))
self.download_button.setText(_translate("First_window", "dowload files"))
self.import_button.setText(_translate("First_window", "import and interpolate"))
Вот вторая форма
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Second_window(object):
def setupUi(self, Second_window):
Second_window.setObjectName("Second_window")
Second_window.resize(605, 480)
self.centralwidget = QtWidgets.QWidget(Second_window)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(90, 80, 431, 101))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.save_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.save_button.setObjectName("save_button")
self.horizontalLayout_2.addWidget(self.save_button)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.import_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.import_button.setObjectName("import_button")
self.horizontalLayout_2.addWidget(self.import_button)
self.table_for_data = QtWidgets.QTableWidget(self.centralwidget)
self.table_for_data.setGeometry(QtCore.QRect(90, 200, 431, 201))
self.table_for_data.setRowCount(4)
self.table_for_data.setColumnCount(4)
self.table_for_data.setObjectName("table_for_data")
Second_window.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(Second_window)
self.menubar.setGeometry(QtCore.QRect(0, 0, 605, 22))
self.menubar.setObjectName("menubar")
Second_window.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(Second_window)
self.statusbar.setObjectName("statusbar")
Second_window.setStatusBar(self.statusbar)
self.retranslateUi(Second_window)
QtCore.QMetaObject.connectSlotsByName(Second_window)
def retranslateUi(self, Second_window):
_translate = QtCore.QCoreApplication.translate
Second_window.setWindowTitle(_translate("Second_window", "Saving"))
self.save_button.setText(_translate("Second_window", "save in csv"))
self.import_button.setText(_translate("Second_window", "import and interpolate"))
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
спросите, если что-то будет не понятно:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from First_window import Ui_First_window
class Ui_First_window(object):
def setupUi(self, First_window):
First_window.setObjectName("First_window")
First_window.resize(605, 480)
self.centralwidget = QtWidgets.QWidget(First_window)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(90, 80, 431, 101))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.download_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.download_button.setObjectName("download_button")
self.horizontalLayout_2.addWidget(self.download_button)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.import_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.import_button.setObjectName("import_button")
self.horizontalLayout_2.addWidget(self.import_button)
self.table_for_data = QtWidgets.QTableWidget(self.centralwidget)
self.table_for_data.setGeometry(QtCore.QRect(90, 200, 431, 201))
self.table_for_data.setRowCount(4)
self.table_for_data.setColumnCount(4)
self.table_for_data.setObjectName("table_for_data")
First_window.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(First_window)
self.menubar.setGeometry(QtCore.QRect(0, 0, 605, 22))
self.menubar.setObjectName("menubar")
First_window.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(First_window)
self.statusbar.setObjectName("statusbar")
First_window.setStatusBar(self.statusbar)
self.retranslateUi(First_window)
QtCore.QMetaObject.connectSlotsByName(First_window)
def retranslateUi(self, First_window):
_translate = QtCore.QCoreApplication.translate
First_window.setWindowTitle(_translate("First_window", "MainWindow"))
self.download_button.setText(_translate("First_window", "dowload files"))
self.import_button.setText(_translate("First_window", "import and interpolate"))
#from Second_window import Ui_Second_window
class Ui_Second_window(object):
def setupUi(self, Second_window):
Second_window.setObjectName("Second_window")
Second_window.resize(605, 480)
self.centralwidget = QtWidgets.QWidget(Second_window)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(90, 80, 431, 101))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.save_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.save_button.setObjectName("save_button")
self.horizontalLayout_2.addWidget(self.save_button)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.import_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.import_button.setObjectName("import_button")
self.horizontalLayout_2.addWidget(self.import_button)
self.table_for_data = QtWidgets.QTableWidget(self.centralwidget)
self.table_for_data.setGeometry(QtCore.QRect(90, 200, 431, 201))
self.table_for_data.setRowCount(4)
self.table_for_data.setColumnCount(4)
self.table_for_data.setObjectName("table_for_data")
Second_window.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(Second_window)
self.menubar.setGeometry(QtCore.QRect(0, 0, 605, 22))
self.menubar.setObjectName("menubar")
Second_window.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(Second_window)
self.statusbar.setObjectName("statusbar")
Second_window.setStatusBar(self.statusbar)
self.retranslateUi(Second_window)
QtCore.QMetaObject.connectSlotsByName(Second_window)
def retranslateUi(self, Second_window):
_translate = QtCore.QCoreApplication.translate
Second_window.setWindowTitle(_translate("Second_window", "Saving"))
self.save_button.setText(_translate("Second_window", "save in csv"))
self.import_button.setText(_translate("Second_window", "import and interpolate"))
class MySecond(QtWidgets.QMainWindow, Ui_Second_window):
def __init__(self):
super().__init__()
self.setupUi(self)
self.save_button.clicked.connect(self.handler2)
def handler2(self):
print("STOPPP!!!")
class MyWin(QtWidgets.QMainWindow, Ui_First_window):
def __init__(self):
super().__init__()
self.setupUi(self)
self.download_button.clicked.connect(self.handler)
self.import_button.clicked.connect(self.openWindow)
def handler(self):
print("Forward!!!")
def openWindow(self):
self.mySecond = MySecond()
self.mySecond.show()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
