pyqt4将图像设置为中心小部件
我正在尝试加载一个图像,并在我的pyqt4应用程序中将该图像设置为centralwidget,但由于某些原因,我看不到该图像可见 这是我的密码-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)
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