PyQt5 реализует простой ImageViewer (меню + изображение) - PullRequest
0 голосов
/ 09 декабря 2018

Я новичок в PyQt.Я хочу создать окно с простым меню и метку с изображением.Я искал, как создать меню и как показать изображение на этикетке, но не могу объединить эти две вещи.

Код для меню (изображение не отображается):

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import cv2


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        label = QLabel(self)
        pixmap = QPixmap('./liver.bmp')
        label.setPixmap(pixmap)
        self.resize(pixmap.width(), pixmap.height())
        # Create new action
        openAction = QAction(QIcon('open.png'), '&Open', self)
        openAction.setShortcut('Ctrl+O')
        openAction.setStatusTip('Open document')
        openAction.triggered.connect(self.openCall)

        # Create menu bar and add action
        menuBar = self.menuBar()
        fileMenu = menuBar.addMenu('&File')
        fileMenu.addAction(openAction)


    def openCall(self):
        pixmap = QPixmap('./default.png')
        label.setPixmap(pixmap)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )

снимок экрана (изображение не отображается)

Код без меню сотображаемое изображение:

import os
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import cv2


class ImageViewer(QWidget):

    def __init__(self):
        QWidget.__init__(self)
        self.setup_ui()

    def setup_ui(self):
        self.image_label = QLabel()
        self.image_label.setPixmap(QPixmap('./default.png'))

        self.main_layout = QVBoxLayout()  # adding widgets to layot
        self.main_layout.addWidget(self.image_label)

        self.setLayout(self.main_layout)  # set layot


if __name__ == "__main__":
    app = QApplication(sys.argv)
    viewer = ImageViewer()
    viewer.show()
app.exec_()

Как совместить эти 2 вещи ????

1 Ответ

0 голосов
/ 10 декабря 2018

Добавьте self ко всей переменной label, и это сработает,

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import cv2


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.label = QLabel(self)
        pixmap = QPixmap('./liver.bmp')
        self.label.setPixmap(pixmap)
        self.resize(pixmap.width(), pixmap.height())
        # Create new action
        openAction = QAction(QIcon('open.png'), '&Open', self)
        openAction.setShortcut('Ctrl+O')
        openAction.setStatusTip('Open document')
        openAction.triggered.connect(self.openCall)

        # Create menu bar and add action
        menuBar = self.menuBar()
        fileMenu = menuBar.addMenu('&File')
        fileMenu.addAction(openAction)


    def openCall(self):
        pixmap = QPixmap('./default.png')
        self.label.setPixmap(pixmap)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...