【问题标题】:Tagging System in PyQtPyQt 中的标记系统
【发布时间】:2023-12-14 20:25:01
【问题描述】:

您好,我正在尝试在 PyQt4 中创建一个 GUI,用户可以在其中标记从视频/图像中提取的人脸。我有一个文件夹,其中存储了所有面孔(图像)。

     pic4.setPixmap(QtGui.QPixmap(os.getcwd() + "/faces/Testimg3.png"))
pic5 = QtGui.QLabel(window)
pic5.setGeometry(500,200,70,70)
pic5.setPixmap(QtGui.QPixmap(os.getcwd() + "/faces/Testimg4.png"))
pic6 = QtGui.QLabel(window)
pic6.setGeometry(500,340,70,70)
pic6.setPixmap(QtGui.QPixmap(os.getcwd() + "/faces/Testimg5.png"))
te1 = QtGui.QTextEdit(window)
te1.setGeometry(160,70,140,30)
te2 = QtGui.QTextEdit(window)
te2.setGeometry(160,210,140,30)
te3 = QtGui.QTextEdit(window)
te3.setGeometry(160,350,140,30)

目前我有这样的东西。像素图后跟文本编辑以获取标签。我已经硬编码以显示我文件夹中的 6 张图像以及文本编辑。谁能指导我如何使这种动态化,即显示器应显示文件夹中的所有图像以及文本编辑。 注意:文件夹中的图像数量可能会发生变化。

【问题讨论】:

    标签: python user-interface pyqt pyqt4 qpixmap


    【解决方案1】:

    一个非常简单的方法是使用 QTableWidget 或 QTreeWidget。

    获取文件夹中的图像列表,然后为每个图像添加一个项目到表或树中。

    tree = QTreeWidget()
    tree.setHeaderLabels(['Path', 'Image'])
    
    paths = ['/path/one', '/path/two']
    for path in paths:
        pixmap = QPixmap(path)
        label = QLabel()
        label.setPixmap(pixmap)
        item = QTreeWidgetItem()
        item.setText(0, path)
        tree.addTopLevelItem(item)
        tree.setItemWidget(item, 1, label)
    

    【讨论】:

    • 感谢您的回答。只是想问我是否可以将文本编辑作为列添加到树中并通过单击按钮获取输入?树的大小是否可以控制?
    • 编辑树中的数据通常使用QItemDelegate 完成。树项的大小也可以使用QItemDelegate.sizeHint() 进行控制