【问题标题】:How to display images inside the new tab in Python如何在 Python 的新选项卡中显示图像
【发布时间】:2017-02-25 21:35:26
【问题描述】:

假设我在一个目录中有 10 张图像,并且一旦用户按下按钮,就需要将它们显示在新创建的选项卡中。图像必须按照具有适当图像标签的 5x5 网格显示。

我使用 Qt Designer 设计了一个包含三个不同选项卡(tab1、tab2 和 tab3)的 GUI,但似乎这对我不起作用 - 图像不会显示在 tab3 中。我怎样才能通过使用命令行编码而不是使用 Qt Designer 来完成它以显示所有图像?

下面是显示图片的功能:

# Display image at 'Tab 3' once user press button 'Display'
def display_result(self):

    # Get wafer qty
    qty = int(self.qty_selected)
    print('qty -> ' + str(qty))

    # Get lot id
    name = str(self.lotId)
    print ('lotId -> ' + str(name))

    for index in range(int(qty)):   
        pixmap = QtGui.QPixmap()
        path = r'c:\Users\mohd_faizal4\Desktop\Python\Testing\%s\%s_%d.jpeg' % (name, name, index + 1)
        print('load (%s) %r' % (pixmap.load(path), path))
        item = QtGui.QListWidgetItem(os.path.basename(path))
        item.setIcon(QtGui.QIcon(path))
        self.viewer.addItem(item)


    contents = QtGui.QWidget(self.tabWidget)
    layout = QtGui.QVBoxLayout(contents)
    self.tabWidget.addTab(contents, 'Tab 4')

我想显示“选项卡 4”内的所有图像,而不是打开另一个窗口。

【问题讨论】:

  • 如果你正在使用 qt 并询问关于 qt 的问题,我建议使用一些 qt 标签...
  • 已经更新标签以包含 pyqt
  • 这太开放了。显示您尝试过的代码,并指出在此代码中您未获得预期结果的位置。
  • 我已经更新了问题并详细说明了问题。对不起我的英语不好。
  • 我想帮忙,但您的问题不清楚。您提到您无法在选项卡 3 中显示图像,但随后您谈到选项卡 4。请记住,我们对您的应用程序一无所知。保持简单:只把对问题最重要的东西放在这里。例如,标签 1 和 2 似乎与问题无关。复制您的应用程序代码,然后删除所有不必要但仍会重现问题的内容。然后发布该代码,包括 ui 文件,以便我们可以将其复制到我们的 IDE 中并运行它。

标签: python image user-interface tabs pyqt


【解决方案1】:

您需要为每个选项卡创建一个新的列表小部件。这是一个演示:

import sys, os
from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.tabs = QtGui.QTabWidget(self)
        self.edit = QtGui.QLineEdit(self)
        self.button = QtGui.QPushButton('New Tab', self)
        self.button.clicked.connect(self.createNewTab)
        layout = QtGui.QGridLayout(self)
        layout.addWidget(self.tabs, 0, 0, 1, 2)
        layout.addWidget(self.edit, 1, 0)
        layout.addWidget(self.button, 1, 1)

    def createNewTab(self):
        viewer = QtGui.QListWidget(self)
        viewer.setViewMode(QtGui.QListView.IconMode)
        viewer.setIconSize(QtCore.QSize(256, 256))
        viewer.setResizeMode(QtGui.QListView.Adjust)
        viewer.setSpacing(10)
        name = self.edit.text()
        for index in range(5):
            pixmap = QtGui.QPixmap()
            path = r'c:\Users\mohd_faizal4\Desktop\Python\Testing\%s\%s_%d.jpeg' % (name, name, index + 1)
            print('load (%s) %r' % (pixmap.load(path), path))
            item = QtGui.QListWidgetItem(os.path.basename(path))
            item.setIcon(QtGui.QIcon(path))
            viewer.addItem(item)
        index = self.tabs.count()
        self.tabs.addTab(viewer, 'Tab%d' % (index + 1))
        self.tabs.setCurrentIndex(index)

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(800, 150, 650, 500)
    window.show()
    sys.exit(app.exec_())

【讨论】:

    【解决方案2】:

    您可以通过在选项卡中创建标签来轻松地在选项卡内显示图像,这是一个示例:(我示例中的选项卡是 tab_3)

    def setupUi(self, MainWindow): self.label = QtWidgets.QLabel(self.tab_3) self.label.setGeometry(QtCore.QRect(340, 30, 241, 171)) self.label.setText("") self.label_181.setPixmap(QtGui.QPixmap("images/A_01.png")) self.label.setScaledContents(True) self.label.setObjectName("label")

    所以在这里你会得到标签内的图像。我希望这会对你有所帮助。

    【讨论】:

    • 如果我需要通过 5x5 网格视图在标签内的标签中显示多张图像怎么办?我是 Python 编程的新手。
    • 您在选项卡内创建多个标签,然后设置每个标签的几何形状以避免干扰,并在每个标签中加载图片。
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多