2016-10-17 2 views
-1

Angenommen, ich habe 10 Bilder in einem Verzeichnis und müssen sie in einer neu erstellten Registerkarte angezeigt werden, sobald der Benutzer eine Taste drückt. Die Bilder müssen in einem 5x5 Raster mit einem richtigen Bildlabel angezeigt werden.Wie Bilder in der neuen Registerkarte in Python angezeigt werden

Ich habe eine GUI mit Qt Designer entwickelt, die drei verschiedene Registerkarten (Tab1, Tab2 und Tab3) enthält, aber es scheint, dass dies nicht für mich funktioniert - die Bilder würden nicht in Tab3 angezeigt. Wie kann ich es mithilfe von Befehlszeilencodierung erreichen, anstatt Qt Designer zu verwenden, um alle Bilder anzuzeigen?

Unten ist die Funktion, um die Bilder anzuzeigen:

# 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') 

Ich mag würde alle Bilder in ‚Tab 4‘ angezeigt werden, anstatt ein weiteres Fenster zu öffnen.

tab 3

+0

Ich schlage vor, einige qt-Tags verwenden, wenn Sie qt verwenden und fragen nach qt ... –

+0

Bereits Tags aktualisieren enthalten pyqt –

+0

Dies ist auch offen beendet. Zeigen Sie den Code, den Sie versucht haben, und geben Sie an, wo in diesem Code das Ergebnis nicht erwartet wird. – Schollii

Antwort

0

Sie müssen für jede Registerkarte ein neues Listen-Widget erstellen. Hier ist eine Demo:

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_()) 
+0

Das hat funktioniert. Vielen Dank! –

0

Sie easly ein Bild in der Registerkarte durch die Schaffung eines Etiketts auf der Registerkarte angezeigt werden können, hier ist ein Beispiel dafür:

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")

(die Registerkarte in meinem Beispiel tab_3 ist)

so hier erhalten Sie das Bild in der Registerkarte.Ich hoffe, dass Ihnen helfen wird.

+0

Wie wäre es, wenn ich ein Mehrfachbild im Etikett innerhalb der Registerkarte für Rasteransicht 5x5 anzeigen müsste? Ich bin wirklich neu in der Python-Programmierung. –

+0

Sie erstellen mehrere Etiketten innerhalb der Registerkarte und legen dann die Geometrie jedes Etiketts fest, um Interferenzen zu vermeiden. In jedes Etikett wird ein Bild geladen. – Ismail

Verwandte Themen