Python 如何使用pyqt4将pixmap和text设置为Qlabel
在这里,我想添加Pixmap和文本到QLabel,通过使用listdir,我得到了我的文件名,但文件名正在循环中合并,所以请任何人帮助我如何在QLabel中放置我的文件名。请帮助我提前感谢您Python 如何使用pyqt4将pixmap和text设置为Qlabel,python,python-2.7,pyqt,pyqt4,Python,Python 2.7,Pyqt,Pyqt4,在这里,我想添加Pixmap和文本到QLabel,通过使用listdir,我得到了我的文件名,但文件名正在循环中合并,所以请任何人帮助我如何在QLabel中放置我的文件名。请帮助我提前感谢您 import os from PyQt4 import QtCore, QtGui class MyLabel(QtGui.QLabel): def __init__(self): super(MyLabel, self).__init__() def paintEvent
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_())
文本和pixmap属性似乎不能共存,因为当一个属性建立时,前一个属性就被删除了。因此,一个可能的解决方案是保存在一个新属性中 在这种情况下,我将使用QDirIterator获取文件,并使用QTimer加载一些图像,因为如果您有许多图像,那么应用程序的示例将延迟或冻结
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_())
更新:
@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
是否希望图像位于文本中?或者你想让图像在文本下面?好吧,我猜你想让我在图像的中心。我是对的?另一方面,你是只想要9个图像,还是想要所有的图像都显示在3列中?你想要列的数量根据窗口的宽度而变化吗?你已经把我搞糊涂了,你想要有3行和多少列?从文本中我很清楚,现在让我们用数字,假设有40幅图像。应该有多少行和列?先生,非常感谢,我能知道文本下面的另一个方法图像吗?