Выдает ошибку при вызове функции clicked.connect(), когда интерфейс загружается через QUiloader()
<widget class="QPushButton" name="pushButton_4">
<property name="geometry">
<rect>
<x>325</x>
<y>220</y>
<width>150</width>
<height>100</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Start checking</string>
</property>
</widget>
import os
from pathlib import Path
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtCore import Qt, QFile, QCoreApplication
from PySide6.QtQuick import QQuickWindow, QSGRendererInterface
from PySide6.QtUiTools import QUiLoader
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.load_ui()
def load_ui(self):
loader = QUiLoader()
path = os.fspath(Path(__file__).resolve().parent / "mainwindow.ui")
ui_file = QFile(path)
ui_file.open(QFile.ReadOnly)
loader.load(ui_file, self)
ui_file.close()
if __name__ == "__main__":
QCoreApplication.setAttribute(Qt.AA_ShareOpenGLContexts)
QQuickWindow.setGraphicsApi(QSGRendererInterface.OpenGLRhi)
app = QApplication(sys.argv)
window = MainWindow()
window.pushButton_4.clicked.connect(lambda: print("clicked"))
window.show()
sys.exit(app.exec())
AttributeError: 'MainWindow' object has no attribute 'pushButton_4'
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Да, тут есть один затык, поэтому делать надо так (через поле-посредник):
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.load_ui()
def load_ui(self):
loader = QUiLoader()
...
# Возвращаем объекты интерфейса в поле ui (можно выбрать любое другое имя переменной)
self.ui = loader.load(ui_file, self)
ui_file.close()
if __name__ == "__main__":
...
# Получаем доступ к кнопке через поле ui
window.ui.pushButton_4.clicked.connect(lambda: print("clicked"))
window.show()
sys.exit(app.exec())