#python #matplotlib #pyqt5
#питон #matplotlib #pyqt5
Вопрос:
Я работаю над приложением на основе python, которое отображает научные одноканальные изображения TIF в графическом интерфейсе, используя pyqt5, matplotlib и opencv.
Когда я запускаю код, изображение отображается с огромным количеством пустого пространства вокруг него.
Пожалуйста, помогите мне удалить пустые места и идеально вписать изображение в область прокрутки.
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1138, 702)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout.setObjectName("horizontalLayout")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setObjectName("widget")
self.gridLayout = QtWidgets.QGridLayout(self.widget)
self.gridLayout.setObjectName("gridLayout")
self.scrollArea = QtWidgets.QScrollArea(self.widget)
self.scrollArea.setWidgetResizable(False)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 1077, 747))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
def openImage(self):
self.img = cv2.imread("Delta1.tif",-1)
self.height, self.width, self.channels = self.img.shape
print("width: ",self.width)
print("height: ",self.height)
self.dpiw = 100
self.dpih = 100
self.figsize = self.width/float(self.dpiw), self.height/float(self.dpih)
self.fig = Figure(figsize=self.figsize)
self.canvas = FigureCanvas(self.fig)
self.ax = self.fig.subplots()
self.ax.set_axis_off()
temp_img = self.img
self.ax.imshow(self.img, cmap="gray", vmin = 0, vmax=65535)
self.horizontalLayout.addWidget(self.widget)
self.scrollArea.setWidget(self.canvas)
self.widget.layout().addWidget(self.scrollArea)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
ui.openImage()
MainWindow.show()
sys.exit(app.exec_())
if QtCore.QT_VERSION >= 0x50501:
def excepthook(type_, value, traceback_):
traceback.print_exception(type, value, traceback)
QtCore.qFatal('')
sys.excepthook = excepthook
Комментарии:
1. Вы могли бы попробовать добавить что-то вроде
self.fig.tight_layout(pad=0.0)
после строкиself.ax.imshow(self.img, cmap="gray", vmin = 0, vmax=65535)
2. @eyllanesc Да, это сработало отлично. Большое спасибо..
3. @eyllanesc На самом деле я новичок в matplotlib и pyqt5. Ваш ответ только что положил конец 2 дням моей борьбы за поиск ответа.