1
votes

I have developed a simple GUI application using Qt designer containing a tab-widget in a main window. The tab-widget consists of three pages with a different function (Tab1 = 'Home', Tab2 = 'Inspection', Tab3 = 'View Results').

I would like the user to press a push-button (Inspection/View Results) on Tab1 in order to jump into Tab2 and Tab3 without manually clicking on the desired tab. Could anyone advise me how to do it? I have attached a snapshot image for better info:

Home widget snapshot

Below is my code:

from __future__ import division
from skimage.measure import compare_ssim as ssim
#from PyQt4.uic import photo_rc
import matplotlib.pyplot as plt
import numpy as np
import sys
import cv2
from PyQt4 import QtCore, QtGui, uic
from PyQt4.QtGui import *

gui_file = 'i-MIS Alpha.ui'  # Enter GUI file name


[Ui_MainWindow, QtBaseClass] = uic.loadUiType(gui_file)
#[Ui_DialogBox, QtBaseClass] = uic.loadUiType(gui_dialog)


class Inspection(QtGui.QMainWindow, Ui_MainWindow):

  def __init__(self):
    QtGui.QMainWindow.__init__(self)
    Ui_MainWindow.__init__(self)
    self.setupUi(self)
    self.capture_button.clicked.connect(self.captureImage)
    self.inspect_button.clicked.connect(self.displayImage)
    self.deviceBox.activated.connect(self.selectDeviceCombo)
    self.startInspectionBtn.clicked.connect(self.enterLotID)
    self.inspect_button.clicked.connect(self.displayResults)
    self.viewResultBtn.clicked.connect(self.viewResults)


 def enterLotID(self):
    title, ok = QInputDialog.getText(self, 'Input Dialog', 'Enter the Lot ID:')
    if ok:
        self.accept.setText(str(title))



 def displayImage(self):  # Perform image comparison at 'Display' tab
    sample_label = 'c:/Users/mohd_faizal4/Desktop/Python/Image/Picture 6.jpg'
    self.sample_label.setScaledContents(True)
    self.sample_label.setPixmap(QtGui.QPixmap(sample_label))

 def selectDeviceCombo(self, event):
    self.var_Selected = self.deviceBox.currentText()
    #print ('The user selected value now is:')
    print ('Device = ' + self.var_Selected)

    if self.var_Selected.lower() == 'xf35':
      print("Great! Device Id is - " + self.var_Selected + '!')
      source_label ='c:/Users/mohd_faizal4/Desktop/Python/Image/Picture 4.jpg'
      self.source_label.setScaledContents(True)
      self.source_label.setPixmap(QtGui.QPixmap(source_label))
    elif self.var_Selected.lower() == 'xf38':
      print("Great! Device Id is - " + self.var_Selected + '!')
      source_label ='c:/Users/mohd_faizal4/Desktop/Python/Image/Picture 5.jpg'
      self.source_label.setScaledContents(True)
      self.source_label.setPixmap(QtGui.QPixmap(source_label))
    elif self.var_Selected.lower() == 'x38c':
      print("Great! Device Id is - " + self.var_Selected + '!')
      source_label ='c:/Users/mohd_faizal4/Desktop/Python/Image/Picture 7.jpg'
      self.source_label.setScaledContents(True)
      self.source_label.setPixmap(QtGui.QPixmap(source_label))
    else:
      print ("Pls select device id. It's reguired field!")


 def captureImage(self):  # Capture image and display on 'Sample' column under Inspection

    cam = cv2.VideoCapture(0)

    i = 0
    while i < 10:
        ret, frame = cam.read()
        cv2.imshow('test', frame)
        #self.sample_label.setScaledContents(True)
        #self.sample_label.setPixmap(QtGui.QPixmap(sample_label))
        if not ret:
            break
        k = cv2.waitKey(2)

        if k%256 == 27:
        # ESC pressed
         print("Escape hit, closing...")
         break
        if k % 256 == 32:
            # SPACE pressed
            img_name = "XBU 12345.6_{}.jpeg".format(i)
            cv2.imwrite(img_name, frame)
            print("{}".format(img_name))
            i += 1

    cam.release()
    cv2.destroyAllWindows()


 def viewResults(self):


 def displayResults(self):
    label_vid01 = 'c:/Users/mohd_faizal4/Desktop/Python/Image/Picture 7.jpg'
    self.label_vid01.setScaledContents(True)
    self.label_vid01.setPixmap(QtGui.QPixmap(label_vid01))

 if __name__ == '__main__':
   app = QtGui.QApplication(sys.argv)
   Window = Inspection()
   Window.show()
   sys.exit()
2

2 Answers

3
votes

you can use :

setCurrentIndex (self, int index)

with index 1 for second and 2 for third tab

or

setCurrentWidget (self, QWidget widget)
1
votes

I have similar usecase I need to change or focus on Display tab on clicking of "Read" button press. So The below mentioned code may help you to understand how it is to be done. Add the following code snippet on click event of the button press.

self.tabWidget.setCurrentWidget(self.display_tab)

Please refer the image for more clarity. In case of any queries do let me know.

tab focus on button click