Как отрыть форму MainMenu по нажатию на кнопку
У меня есть 2 окна программы MainMenu.py (стартовое окно) и QueryСonstructor.py (окно которое открывается по нажатию).
Интерфейс реализован через Qt Desinger. Оба файла реализованы как форма MainWindow.
На данном этапе получилось реализовать открытие формы, но она потеряла весь свой функционал...
Так же хотелось уточнить, есть ли возможность при нажатии на пустое место где предусмотрен label_2 в файле QueryСonstructor.py открывался проводник и можно было выбрать фото для дальнейшей работы.
MainMenu.py:
import sys
import pytesseract
import win32api, time
import numpy as np
import cv2
from urllib.request import urlopen
from PIL import Image, ImageGrab
from PyQt5.QtWidgets import (QApplication, QDialog, QMainWindow, QMessageBox)
from PyQt5.uic import loadUi
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from ui_MainMenu import Ui_MainWindow
from ui_QueryСonstructor import Ui_QuaryConstructor
class Window(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.btnClicked)
#-------------------------------------------------------------
def btnClicked(self):
self.setupUi(self)
self.ui2 = Ui_QuaryConstructor()
self.ui2.setupUi(self)
#-------------------------------------------------------------
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
ui_MainMenu.py:
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(431, 433)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.verticalLayoutWidget = QWidget(self.centralwidget)
self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
self.verticalLayoutWidget.setGeometry(QRect(130, 280, 160, 80))
self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setObjectName(u"verticalLayout")
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.pushButton = QPushButton(self.verticalLayoutWidget)
self.pushButton.setObjectName(u"pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QPushButton(self.verticalLayoutWidget)
self.pushButton_2.setObjectName(u"pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u041e\u041e\u041e \"\u0422\u041a\u0420\" - \u041f\u0440\u043e\u0432\u0435\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432", None))
self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432", None))
self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432", None))
# retranslateUi
QueryСonstructor.py:
import sys
import pytesseract
import win32api, time
import numpy as np
import cv2
from urllib.request import urlopen
from PIL import Image, ImageGrab
from PyQt5.QtWidgets import (QApplication, QDialog, QMainWindow, QMessageBox)
from PyQt5.uic import loadUi
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from ui_QueryСonstructor import Ui_QuaryConstructor
class QuaryConstructor(QMainWindow, Ui_QuaryConstructor):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.ui2 = Ui_QuaryConstructor()
self.ui2.setupUi(self)
mainMenu = self.menuBar()
instmenu = mainMenu.addMenu("Инстументы")
file = mainMenu.addMenu("Файл")
videlenie = QAction("Выделить для копирования", self)
instmenu.addAction(videlenie)
videlenie.triggered.connect(self.screenshot)
photo = QAction("Вставить фото", self)
file.addAction(photo)
photo.triggered.connect(self.getImage)
self.image_foreground = QImage(self.size(), QImage.Format_ARGB32_Premultiplied)
self.image_foreground.fill(Qt.transparent)
self.image_background = QImage(self.size(), QImage.Format_ARGB32_Premultiplied)
self.image_background.fill(Qt.white)
self.instrument = 'screenshot'
self.selection = QRubberBand(QRubberBand.Rectangle, self)
self.start = QPointF()
self.end = QPointF()
self.ui2.pushButton.clicked.connect(self.btnClicked)
self.ui2.pushButton_2.clicked.connect(self.btnClicked2)
def getImage(self):
filename, _ = QFileDialog.getOpenFileName(
self,
"Выберите изображение",
"",
"PNG(*.png);;JPEG(*.jpg *.jpeg);;All Files(*.*)"
)
if not filename:
return
self.ui2.label_2.setPixmap(QPixmap(u"{}".format(filename)))
self.selection.hide()
def paintEvent(self, event):
painter = QPainter(self)
painter.drawImage(self.rect(), self.image_background, self.image_background.rect())
painter.drawImage(self.image_foreground.rect(), self.image_foreground)
def mousePressEvent(self, event):
if event.buttons() == Qt.LeftButton and self.instrument == 'screenshot':
self.start = event.pos()
self._start = event.globalPos()
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton and self.instrument == 'screenshot':
self.end = event.pos()
self.selection.setGeometry(QRect(self.start, self.end).normalized())
self.selection.show()
def mouseReleaseEvent(self, event):
if self.instrument == 'screenshot':
self._end = event.globalPos()
self.selection.hide()
QTimer.singleShot(20, self.newLabel)
def newLabel(self):
self.selection.hide()
self.instrument = 'None'
img = ImageGrab.grab(bbox=(
self._start.x(),
self._start.y(),
self._end.x(),
self._end.y()
))
pathImage = '4.png'
img.save(pathImage)
img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)
cv2.waitKey(0)
cv2.destroyAllWindows()
def screenshot(self):
self.instrument = 'screenshot'
def resizeEvent(self, event):
self.image_foreground = QImage(self.size(), QImage.Format_ARGB32_Premultiplied)
self.image_foreground.fill(Qt.transparent)
self.update()
super().resizeEvent(event)
def btnClicked(self):
self.ui2.label.setText("Дата на документе: " + text)
self.ui2.label.adjustSize()
def btnClicked2(self):
self.instrument = 'screenshot'
image = Image.open('4.png')
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
text2 = pytesseract.image_to_string(image, lang='rus+eng')
self.ui2.label.setText(text2)
self.ui2.label.adjustSize()
image = Image.open('4.jpg')
cropped = image.crop((0, 200, 250, 270))
cropped.save('cropped_jelly.png')
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
text = pytesseract.image_to_string(cropped, lang='rus+eng')
if __name__ == "__main__":
app = QApplication(sys.argv)
win = QuaryConstructor()
win.show()
sys.exit(app.exec_())
ui_QueryСonstructor.py:
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
class Ui_QuaryConstructor(object):
def setupUi(self, QuaryConstructor):
if not QuaryConstructor.objectName():
QuaryConstructor.setObjectName(u"QuaryConstructor")
QuaryConstructor.resize(972, 682)
self.action = QAction(QuaryConstructor)
self.action.setObjectName(u"action")
self.action_2 = QAction(QuaryConstructor)
self.action_2.setObjectName(u"action_2")
self.centralwidget = QWidget(QuaryConstructor)
self.centralwidget.setObjectName(u"centralwidget")
self.label_2 = QLabel(self.centralwidget)
self.label_2.setObjectName(u"label_2")
self.label_2.setGeometry(QRect(10, 10, 561, 661))
self.label_2.setTextFormat(Qt.MarkdownText)
self.label_2.setScaledContents(True)
self.label_2.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
self.label_2.setMargin(-3)
self.label_2.setOpenExternalLinks(False)
self.label = QLabel(self.centralwidget)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(600, 60, 361, 211))
self.label.setScaledContents(True)
self.gridLayoutWidget_2 = QWidget(self.centralwidget)
self.gridLayoutWidget_2.setObjectName(u"gridLayoutWidget_2")
self.gridLayoutWidget_2.setGeometry(QRect(610, 570, 321, 86))
self.gridLayout_2 = QGridLayout(self.gridLayoutWidget_2)
self.gridLayout_2.setObjectName(u"gridLayout_2")
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.label_3 = QLabel(self.gridLayoutWidget_2)
self.label_3.setObjectName(u"label_3")
self.label_3.setScaledContents(True)
self.gridLayout_2.addWidget(self.label_3, 0, 1, 1, 1)
self.label_4 = QLabel(self.gridLayoutWidget_2)
self.label_4.setObjectName(u"label_4")
self.label_4.setScaledContents(True)
self.gridLayout_2.addWidget(self.label_4, 1, 1, 1, 1)
self.pushButton_3 = QPushButton(self.gridLayoutWidget_2)
self.pushButton_3.setObjectName(u"pushButton_3")
self.gridLayout_2.addWidget(self.pushButton_3, 0, 0, 1, 1)
self.pushButton_4 = QPushButton(self.gridLayoutWidget_2)
self.pushButton_4.setObjectName(u"pushButton_4")
self.gridLayout_2.addWidget(self.pushButton_4, 1, 0, 1, 1)
self.pushButton_5 = QPushButton(self.gridLayoutWidget_2)
self.pushButton_5.setObjectName(u"pushButton_5")
self.gridLayout_2.addWidget(self.pushButton_5, 2, 0, 1, 1)
self.label_5 = QLabel(self.gridLayoutWidget_2)
self.label_5.setObjectName(u"label_5")
self.label_5.setScaledContents(True)
self.gridLayout_2.addWidget(self.label_5, 2, 1, 1, 1)
self.horizontalLayoutWidget = QWidget(self.centralwidget)
self.horizontalLayoutWidget.setObjectName(u"horizontalLayoutWidget")
self.horizontalLayoutWidget.setGeometry(QRect(650, 260, 250, 80))
self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.pushButton_2 = QPushButton(self.horizontalLayoutWidget)
self.pushButton_2.setObjectName(u"pushButton_2")
self.horizontalLayout.addWidget(self.pushButton_2)
self.pushButton = QPushButton(self.horizontalLayoutWidget)
self.pushButton.setObjectName(u"pushButton")
self.horizontalLayout.addWidget(self.pushButton)
QuaryConstructor.setCentralWidget(self.centralwidget)
self.retranslateUi(QuaryConstructor)
QMetaObject.connectSlotsByName(QuaryConstructor)
# setupUi
def retranslateUi(self, QuaryConstructor):
QuaryConstructor.setWindowTitle(QCoreApplication.translate("QuaryConstructor", u"\u041e\u041e\u041e \"\u0422\u041a\u0420\" - \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430", None))
self.action.setText(QCoreApplication.translate("QuaryConstructor", u"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u043e\u0442\u043e", None))
self.action_2.setText(QCoreApplication.translate("QuaryConstructor", u"\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f", None))
self.label_2.setText("")
self.label.setText("")
self.label_3.setText("")
self.label_4.setText("")
self.pushButton_3.setText(QCoreApplication.translate("QuaryConstructor", u"\u0422\u0438\u043f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", None))
self.pushButton_4.setText(QCoreApplication.translate("QuaryConstructor", u"\u0414\u0430\u0442\u0430", None))
self.pushButton_5.setText(QCoreApplication.translate("QuaryConstructor", u"\u0424\u0418\u041e", None))
self.label_5.setText("")
self.pushButton_2.setText(QCoreApplication.translate("QuaryConstructor", u"\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c(\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c)", None))
self.pushButton.setText(QCoreApplication.translate("QuaryConstructor", u"\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c", None))
# retranslateUi
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так
from PyQt5.Qt import *
from QueryСonstructor import QuaryConstructor
...
...
class Window(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.btnClicked)
def btnClicked(self):
# self.setupUi(self)
# self.ui2 = Ui_QuaryConstructor()
# self.ui2.setupUi(self)
self.quaryConstructor = QuaryConstructor() # +++
self.quaryConstructor.show() # +++
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
