Как переключаться между вкладками с помощью кнопки? используя pyqt - PullRequest
0 голосов
/ 04 августа 2020

Я новичок ie и, возможно, это глупый вопрос. Я хочу активировать вкладку, нажав кнопку. Если я нажимаю кнопку pushButton_1, она показывает / активирует вкладку_1, при нажатии кнопки pushButton_2 переключается на вкладку_2 и так далее. Ниже стоит пи c как пробовал но безуспешно. Помогите мне решить эту проблему и написать правильный код. Заранее спасибо.

Это мой код:

from spex import *
import sys



class speX (Ui_MainWindow):
    def __init__(self, window):
        self.setupUi(window)
        self.systemButton.clicked.setCurrentIndex(self, 0)
        self.cpuButton.clicked.setCurrentIndex(self, 1)



app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()

ui = speX (MainWindow)
MainWindow.show()
app.exec_()

Я хочу это - когда я нажимаю systemButton, активирую вкладку с индексом 0, когда нажимаю cpuButton, активирует вкладку с индексом 1.

Ошибка, указанная там -

Traceback (most recent call last):
  File "d:\spex\main.py", line 17, in <module>
    ui = speX (MainWindow)
  File "d:\spex\main.py", line 9, in __init__
    self.systemButton.clicked.setCurrentIndex(self, 0)
AttributeError: 'PyQt5.QtCore.pyqtBoundSignal' object has no attribute 'setCurrentIndex'

Это пример моего проекта - pyuic5 ui to py code

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:/spex/example.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(763, 611)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
        self.stackedWidget.setGeometry(QtCore.QRect(270, 70, 361, 361))
        self.stackedWidget.setObjectName("stackedWidget")
        self.page = QtWidgets.QWidget()
        self.page.setObjectName("page")
        self.buttonBox = QtWidgets.QDialogButtonBox(self.page)
        self.buttonBox.setGeometry(QtCore.QRect(50, 310, 193, 28))
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.stackedWidget.addWidget(self.page)
        self.page_2 = QtWidgets.QWidget()
        self.page_2.setObjectName("page_2")
        self.commandLinkButton = QtWidgets.QCommandLinkButton(self.page_2)
        self.commandLinkButton.setGeometry(QtCore.QRect(70, 190, 222, 48))
        self.commandLinkButton.setObjectName("commandLinkButton")
        self.stackedWidget.addWidget(self.page_2)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(50, 110, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(50, 190, 93, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 763, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.stackedWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.commandLinkButton.setText(_translate("MainWindow", "CommandLinkButton"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

В Qt, сигнал испускается, когда происходит определенное событие: нажатие кнопки, изменение текста и т.д. c.

Затем сигналы подключаются к слоты - функции, которые могут каким-то образом реагировать на эти сигналы. Например, вы можете создать слот , который изменяет текст в метке, и связать его с сигналом clicked кнопки: затем, когда вы нажимаете на эту кнопку, текст изменяется.

Почему не работает ваш код? Ну, например, setCurrentIndex - это метод QStackedWidget (аналогично QTabWidget), поэтому следующее не имеет особого смысла:

    self.systemButton.clicked.setCurrentIndex(self, 0)

Где ссылка на сложенный виджет?

В PyQt вы можете подключать сигналы и слоты следующим образом:

    someObject.signal.connect(someFunction)

Обратите внимание, что someFunction - это ссылка на эту функцию; следующее будет не работать:

    someObject.signal.connect(someFunction())

Если вы хотите изменить индекс сложенного виджета после нажатия на кнопку, вы должны создать функцию, которая изменяет этот индекс, и подключите его к нажатому сигналу.

class speX (Ui_MainWindow):
    def __init__(self, window):
        self.setupUi(window)
        self.pushButton.clicked.connect(self.goToSecondPage)

    def goToSecondPage(self):
        self.stackedWidget.setCurrentIndex(1)

Я настоятельно рекомендую вам внимательно изучить, как работают python классы и, вообще говоря, парадигма объектно-ориентированного программирования.

0 голосов
/ 04 августа 2020

Простым решением было бы подключить ваши кнопки к функции, которая изменяет индекс вкладки при нажатии

tabs = QtWidget.QTabWidget()
tab1 = QtWidget.QWidget()
tabs.addTab(self.tab1, "Tab 1")

systemButton.clicked.connect(tabIndex0)

def tabIndex0():
    tabs.setCurrentIndex(0)
...