使用按钮更改QTabWidget选项卡

时间:2016-09-15 09:04:43

标签: qt python-3.x pyqt qt-designer qtabwidget

我使用Qt设计器开发了一个简单的GUI应用程序,其中包含主窗口中的tab-widget。 tab-widget由三个具有不同功能的页面组成(Tab1 ='Home',Tab2 ='Inspection',Tab3 ='View Results')。

我希望用户按下Tab1上的按钮(检查/查看结果),以便跳转到Tab2和Tab3,而无需手动点击所需的选项卡。谁能告诉我怎么做?我附上了一张快照图片以获取更好的信息:

Home widget snapshot

以下是我的代码:

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 个答案:

答案 0 :(得分:2)

你可以使用:

setCurrentIndex (self, int index)

索引1表示第二个,2表示第三个选项卡

setCurrentWidget (self, QWidget widget)

答案 1 :(得分:0)

我有类似的用例,我需要在单击“读取”按钮时单击以更改或关注“显示”选项卡。因此,下面提到的代码可以帮助您了解如何完成。在按钮按下的点击事件上添加以下代码段。

self.tabWidget.setCurrentWidget(self.display_tab)

请参考图片以获得更多清晰度。如有任何疑问,请告诉我。

tab focus on button click