Я думаю, что вы говорите, что вы успешно добавили этот код в главное окно, но вместо этого вы хотите иметь возможность добавить его в виджет, который вы создали в дизайнере, а не строго в главное окно.
В этом случае вам нужно отформатировать ваш виджет так, как вы хотите, чтобы в Qt Designer добавляли заполнитель, такой как рамка, макет, возможно, группа и т. Д., Куда вы хотите вставить свои Display_PixelsОбъект QGraphicsView.
После этого вы не будете напрямую добавлять его в кадр, а вместо того, чтобы использовать макет, который использует этот кадр.так что если у вас есть сетка в вашем кадре, это будет что-то вроде:
self.Disp_pixel = Display_Pixels()
widget_name.gridlayout.addWidget(self.Disp_pixel)
Сложно сказать, где этот код будет реализован в вашем коде, но гипотетически позволяет сказать, что вы запустили pyuic5 и получили Pythonвыход.Вы можете добавить его в этот выходной файл Python.Я бы порекомендовал иметь что-то вроде класса зрителя, который наследует сгенерированный выходной класс и выполняет там добавочный виджет.Кроме того, frame - это имя кадра, созданного вами для графического представления, а не буквально frame.
Кроме того, я не уверен, что вы можете сделать показ на виджете любого типа, я уверен, чтовиджет должен быть отображаемым, например виджет главного окна или виджет диалога.Это значит, что виджеты могут быть размещены в других виджетах.
Вот пример, который я привел для вас, он немного грубоват, но я думаю, что это поможет:
import sys
import cv2
import numpy as np
import math
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QGraphicsView, QApplication
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '.\testUI.ui' and .\testMainWin.ui
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.gridLayout = QtWidgets.QGridLayout(Form)
self.gridLayout.setObjectName("gridLayout")
self.frame = QtWidgets.QFrame(Form)
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.gridLayout_2 = QtWidgets.QGridLayout(self.frame)
self.gridLayout_2.setObjectName("gridLayout_2")
self.gridLayout.addWidget(self.frame, 0, 0, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
class FormView(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super(FormView, self).__init__(parent)
self.setupUi(self)
self.disp_pixels = Display_Pixels()
self.gridLayout_2.addWidget(self.disp_pixels)
class MainView(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainView, self).__init__(parent)
self.setupUi(self)
class Display_Pixels(QGraphicsView):
def __init__(self, parent=None):
QGraphicsView.__init__(self, parent=parent)
#super().__init__()
self.initUI()
self.img = cv2.imread('resources/images/pic3.jpg')
def initUI(self):
self.setGeometry(100, 100, 650, 650)
#self.setWindowTitle('By Pixel')
#self.setMouseTracking(True)
#self.show()
res = 40
self.grid = np.array([ [-1] * res for n in range(res)]) # list comprehension
#print(self.grid.shape)
def paintEvent(self, e):
qp = QPainter()
qp.begin(self.viewport())
self.drawRectangles(qp)
qp.end()
def drawRectangles(self, qp, w = 16):
print("Drawing")
mode = 0
x,y = 0,0 # starting position
lr = 20
hr = 35
col = QColor(0, 0, 0)
col.setNamedColor('#d4d4d4')
qp.setPen(col)
#print(self.img.shape)
for g_row, img_row in zip(self.grid, self.img):
#print(img_row.shape)
for g_col, img_col in zip(g_row, img_row):
r, g, b = (img_col[0], img_col[1], img_col[2])
#print(r,g,b)
if g_col == 1:
if mode == 0:
r = int(math.log(r+1)*lr)
g = int(math.log(g+1)*hr)
b = int(math.log(b+1)*lr)
elif mode == 1:
if r+50 <= 220: r = r+50
if g+80 <= 255: g = g+80
if b+50 <= 220: b = b+50
else:
if r+70 <= 220: r = r+70
if g+140 <= 255: g = g+140
if b+70 <= 220: b = b+70
qp.setBrush(QColor(r, g, b))
qp.drawRect(x, y, w, w)
else:
qp.setBrush(QColor(r, g, b))
qp.drawRect(x, y, w, w)
#qp.setBrush(QColor(200, 0, 0))
#qp.drawRect(x, y, w, w)
x = x + w # move right
y = y + w # move down
x = 0 # rest to left edge
def mousePressEvent(self, QMouseEvent):
w = 16.0
#print("MOUSE:")
#print('(', int(QMouseEvent.x()/w), ', ', int(QMouseEvent.y()/w), ')')
#print (QMouseEvent.pos())
x = float(QMouseEvent.x())
y = float(QMouseEvent.y())
self.grid[int(y/w)][int(x/w)] = -1 * self.grid[int(y/w)][int(x/w)]
#print(img[int(y/w), int(x/w), :])
self.repaint()
#self.update()
if __name__ == '__main__':
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
main_window = MainView()
form = FormView()
main_window.gridLayout.addWidget(form)
main_window.show()
sys.exit(app.exec_())