pyqt4 将图像设置为中央小部件
pyqt4 setting image as central widget
我正在尝试加载图像并将图像设置为我的 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()
canvas 是必须显示图像但您没有绘制图像的图像。你不认为这是问题所在吗?另一方面,您必须将滚动区域的 属性 widgetResizable 设置为 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()
我正在尝试加载图像并将图像设置为我的 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()
canvas 是必须显示图像但您没有绘制图像的图像。你不认为这是问题所在吗?另一方面,您必须将滚动区域的 属性 widgetResizable 设置为 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()