Here i want to add Pixmap and text to QLabel,by using listdir i got the my filenames but the filenames are merging in loop, so can anyone please help me how to place the my filenames in QLabel.Please help me thank you in advance.
import os
from PyQt4 import QtCore, QtGui
class MyLabel(QtGui.QLabel):
def __init__(self):
super(MyLabel, self).__init__()
def paintEvent(self, event):
super(MyLabel, self).paintEvent(event)
pos = QtCore.QPoint(100, 100)
painter = QtGui.QPainter(self)
s = iter(os.listdir("/home/cioc/Documents/pos/images"))
# file1 = next(s)
painter.drawText(pos,"vegitables")#here in place of vegitables i want to print the my filenames
painter.setPen(QtGui.QColor(168, 34, 3))
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
url = '/home/cioc/Documents/pos/images'
highlight_dir = url
self.scroll_area = QtGui.QScrollArea()
self.scrollArea = QtGui.QScrollArea(widgetResizable=True)
self.setCentralWidget(self.scrollArea)
content_widget = QtGui.QWidget()
self.scrollArea.setWidget(content_widget)
self.layout = QtGui.QGridLayout(content_widget)
self.files_it = iter([os.path.join(highlight_dir, file) for file in os.listdir(highlight_dir)])
try:
for row in range(3):
for column in range(3):
file = next(self.files_it)
pixmap = QtGui.QPixmap(file)
self.label = MyLabel()
self.label.setPixmap(pixmap)
self.layout.addWidget(self.label,row,column)
except StopIteration:
pass
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.setGeometry(500,300,800,400)
w.show()
sys.exit(app.exec_())
It seems that the text and pixmap properties can not coexist since when one is established the previous one is eliminated. So a possible solution is to save in a new attribute.
For this case I will use QDirIterator to obtain the files, and a QTimer to load the images a little since if you have many images there will be a delay in the sample of the application or a freezing of it.
from PyQt4 import QtCore, QtGui
class MyLabel(QtGui.QLabel):
def paintEvent(self, event):
super(MyLabel, self).paintEvent(event)
painter = QtGui.QPainter(self)
painter.setPen(QtGui.QColor(168, 34, 3))
painter.drawText(self.rect(), QtCore.Qt.AlignCenter, self.my_text)
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
highlight_dir = '/home/cioc/Documents/pos/images'
scrollArea = QtGui.QScrollArea(widgetResizable=True)
self.setCentralWidget(scrollArea)
content_widget = QtGui.QWidget()
scrollArea.setWidget(content_widget)
self._layout = QtGui.QGridLayout(content_widget)
self._it = QtCore.QDirIterator(highlight_dir)
self._row, self._col = 0, 0
QtCore.QTimer(self, interval=10, timeout=self.load_image).start()
@QtCore.pyqtSlot()
def load_image(self):
if self._it.hasNext():
pixmap = QtGui.QPixmap(self._it.next())
if not pixmap.isNull():
label = MyLabel(alignment=QtCore.Qt.AlignCenter)
label.my_text = self._it.fileName()
label.setPixmap(pixmap)
self._layout.addWidget(label, self._row, self._col)
self._col += 1
if self._col == 3:
self._row += 1
self._col = 0
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.setGeometry(500, 300, 800, 400)
w.show()
sys.exit(app.exec_())
Update:
@QtCore.pyqtSlot()
def load_image(self):
if self._it.hasNext():
pixmap = QtGui.QPixmap(self._it.next())
if not pixmap.isNull():
vlay = QtGui.QVBoxLayout()
label_pixmap = QtGui.QLabel(alignment=QtCore.Qt.AlignCenter, pixmap=pixmap)
label_text = QtGui.QLabel(alignment=QtCore.Qt.AlignCenter, text=self._it.fileName())
vlay.addWidget(label_pixmap)
vlay.addWidget(label_text)
vlay.addStretch()
self._layout.addLayout(vlay, self._row, self._col)
self._col += 1
if self._col == 3:
self._row += 1
self._col = 0