pyqt4将图像设置为中心小部件

pyqt4将图像设置为中心小部件,pyqt,pyqt4,Pyqt,Pyqt4,我正在尝试加载一个图像,并在我的pyqt4应用程序中将该图像设置为centralwidget,但由于某些原因,我看不到该图像可见 这是我的密码- import sys from PyQt4 import QtGui, QtCore from PyQt4.QtGui import QScrollArea class Canvas(QtGui.QWidget): def __init__(self, *args, **kwargs): super(Canvas, self)

我正在尝试加载一个图像,并在我的pyqt4应用程序中将该图像设置为centralwidget,但由于某些原因,我看不到该图像可见

这是我的密码-

import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QScrollArea

class Canvas(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(Canvas, self).__init__()
        self.pixmap = QtGui.QPixmap()

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 500, 300)
        self.setWindowTitle("PyQT tuts!")
        self.setWindowIcon(QtGui.QIcon('pythonlogo.png'))
        openFile = QtGui.QAction("&Open File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.setStatusTip('Open File')
        openFile.triggered.connect(self.file_open)
        self.scrollarea = QScrollArea()
        self.statusBar()
        mainMenu = self.menuBar()

        fileMenu = mainMenu.addMenu('&File')
        fileMenu.addAction(openFile)                
        self.canvas = Canvas()
        self.home()

    def home(self):
        self.show()

    def file_open(self):
        name = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
        file = open(name,'r')
        with file:
            imageData = file.read()        
            image = QtGui.QImage.fromData(imageData)
            self.load_pixmap(image)

    def load_pixmap(self, image):
        self.canvas.pixmap = QtGui.QPixmap.fromImage(image)
        self.scrollarea.setWidget(self.canvas)
        self.canvas.repaint()
        self.setCentralWidget(self.scrollarea)

    def close_application(self):        
        sys.exit()                

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())


run()     
更新代码:

import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QScrollArea

class Canvas(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(Canvas, self).__init__()
        self.pixmap = QtGui.QPixmap()

    def paintEvent(self, event):        
            return super(Canvas, self).paintEvent(event)


class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 500, 300)
        self.setWindowTitle("PyQT tuts!")
        self.setWindowIcon(QtGui.QIcon('pythonlogo.png'))
        openFile = QtGui.QAction("&Open File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.setStatusTip('Open File')
        openFile.triggered.connect(self.file_open)
        self.scrollarea = QScrollArea()
        self.statusBar()
        mainMenu = self.menuBar()

        fileMenu = mainMenu.addMenu('&File')
        fileMenu.addAction(openFile)                
        self.canvas = Canvas()
        self.home()

    def home(self):
        self.show()

    def file_open(self):
        name = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
        if name:
            self.load_pixmap(QtGui.QPixmap(name))

    def load_pixmap(self, pixmap):
        self.canvas.pixmap = pixmap
        self.scrollarea.setWidget(self.canvas)
        self.scrollarea.setWidgetResizable(True)
#         self.scrollarea.Raised
        self.canvas.repaint()
        self.setCentralWidget(self.scrollarea)

    def close_application(self):        
        sys.exit()                

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())


run()     

画布是一个必须显示图像,但你没有画它。你不认为这就是问题所在吗?另一方面,必须将scrollarea的属性WidgetResizeable设置为True

import sys
from PyQt4 import QtGui, QtCore

class Canvas(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(Canvas, self).__init__()
        self.pixmap = QtGui.QPixmap()

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.drawPixmap(QtCore.QPoint(), self.pixmap)

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 500, 300)
        self.setWindowTitle("PyQT tuts!")
        self.setWindowIcon(QtGui.QIcon('pythonlogo.png'))
        openFile = QtGui.QAction("&Open File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.setStatusTip('Open File')
        openFile.triggered.connect(self.file_open)
        self.scrollarea = QtGui.QScrollArea()
        self.statusBar()
        mainMenu = self.menuBar()

        fileMenu = mainMenu.addMenu('&File')
        fileMenu.addAction(openFile)                
        self.canvas = Canvas()
        self.home()

    def home(self):
        self.show()

    def file_open(self):
        name = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
        file = open(name,'r')
        with file:
            imageData = file.read()        
            image = QtGui.QImage.fromData(imageData)
            print(image.isNull())
            self.load_pixmap(image)

    def load_pixmap(self, image):
        self.canvas.pixmap = QtGui.QPixmap.fromImage(image)
        self.scrollarea.setWidget(self.canvas)
        self.scrollarea.setWidgetResizable(True)
        self.setCentralWidget(self.scrollarea)            

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

run()   
另一方面,我不明白为什么要使用open()加载一个图像,一个简单的任务需要很多行:

import sys
from PyQt4 import QtGui, QtCore

class Canvas(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(Canvas, self).__init__()
        self.pixmap = QtGui.QPixmap()

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.drawPixmap(QtCore.QPoint(), self.pixmap)

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 500, 300)
        self.setWindowTitle("PyQT tuts!")
        self.setWindowIcon(QtGui.QIcon('pythonlogo.png'))
        openFile = QtGui.QAction("&Open File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.setStatusTip('Open File')
        openFile.triggered.connect(self.file_open)
        self.scrollarea = QtGui.QScrollArea()
        self.statusBar()
        mainMenu = self.menuBar()

        fileMenu = mainMenu.addMenu('&File')
        fileMenu.addAction(openFile)                
        self.canvas = Canvas()
        self.home()

    def home(self):
        self.show()

    def file_open(self):
        name = QtGui.QFileDialog.getOpenFileName(self, 'Open File')
        if name:
            self.load_pixmap(QtGui.QPixmap(name))

    def load_pixmap(self, pixmap):
        self.canvas.pixmap = pixmap
        self.scrollarea.setWidget(self.canvas)
        self.scrollarea.setWidgetResizable(True)
        self.setCentralWidget(self.scrollarea)            

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

run() 

我正在对qwidget使用self.repaint()方法,并将setwidgetresizeable设置为True..但图像仍然不可见。我已经更新了新代码..另外,在open()方法上,您给出的代码看起来更简单,thanks@user1050619Canvas有一个paintEvent方法,你复制了吗?是的,我已经更新了代码,我也尝试过了。@user1050619我在你更新的代码中没有看到,我已经把第二个完整的代码放进去了,你的图像有多大?你们有什么分机?Python2或python3?感谢它的工作,它的PNG文件和文件大小各不相同。是蟒蛇27