Я построил интерфейс PyQt, и теперь я хочу переключить активное/неактивное состояние своих виджетов или взаимодействовать с ними из-за пределов класса виджета. У меня есть класс главного окна со всеми его виджетами и функциями вне класса - здесь подключен к buttton1
. Моя цель в этом примере - включить button2
, нажав button1
.PyQt: доступ к включенному состоянию из-за пределов класса виджетов
С кодом ниже я получаю сообщение об ошибке, что мой класс Ui_MainWindow
не имеет атрибута button1
.
Код:
from PyQt4 import QtCore, QtGui
def toggle():
Ui_MainWindow.button2.setEnabled(True)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
self.button1 = QtGui.QPushButton(self.centralwidget)
self.button1.clicked.connect(toggle)
self.button2 = QtGui.QPushButton(self.centralwidget)
self.button2.setEnabled(False)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Пока не знаю, что бы избежать с помощью классов, потому что, честно говоря, они очень абстрактно для меня. Наверное, поэтому я терплю неудачу. Я предполагаю, что я обращаюсь к виджетному классу неправильно.
Я был бы признателен, если бы кто-нибудь мог указать мне в правильном направлении. Я прочитал все ответы на подобные проблемы, но это не помогло мне прийти к решению.
спасибо за ваши инструкции. однако в вашем примере описывается ссылка на функцию в классе MainWindow. как бы вы сделали это из функции вне класса? – Esmi
@Esmi. Вы просили указывать в правильном направлении, а это означает использование методов, а не внешних функций. Если вы попытаетесь сделать последнее, писать хороший код gui может довольно сложно. У вас есть конкретная причина для желания сделать что-то таким образом? Какую проблему ты пытаешься решить? – ekhumoro