Ошибка 0xC0000409 в приложениях на Python и PyQt часто связана с проблемами в коде, которые приводят к исключениям, не отловленным вашим приложением. В вашем коде, проблема скорее всего заключена в методе `getDirectory`. Рассмотрим, почему это может происходить и как это исправить.
1. **Использование `self` в `QFileDialog.getExistingDirectory`:**
Метод `getExistingDirectory` ожидает не `self`, а объект `QWidget` в качестве родителя. Вместо использования `self`, передайте `MainWindow` как родительский виджет. Это может выглядеть так:
```python
dirlist = QFileDialog.getExistingDirectory(MainWindow, "Выбрать папку", ".")
```
2. **Использование `self.plainTextEdit`:**
Судя по вашему коду, вы не создали объект `plainTextEdit`. Если вы хотите добавлять текст или HTML в текстовое поле, вам нужно создать этот виджет и настроить его в вашем интерфейсе. Добавьте код для создания `plainTextEdit`. Например:
```python
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setGeometry(QtCore.QRect(90, 220, 600, 300))
self.plainTextEdit.setObjectName("plainTextEdit")
```
3. **Дополнительные ошибки и проверки:**
Обратите внимание, что вы не обрабатываете случай, когда пользователь может отменить выбор директории в `QFileDialog`. Это может привести к ошибкам, если `dirlist` будет пустым или неверным.
Вот скорректированная версия вашего кода:
```python
from PyQt6 import QtCore, QtGui, QtWidgets
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.knopka = QtWidgets.QPushButton(self.centralwidget)
self.knopka.setGeometry(QtCore.QRect(90, 100, 201, 101))
self.knopka.setObjectName("knopka")
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setGeometry(QtCore.QRect(90, 220, 600, 300))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.knopka.clicked.connect(self.getDirectory)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.knopka.setText(_translate("MainWindow", "PushButton"))
def getDirectory(self):
dirlist = QFileDialog.getExistingDirectory(MainWindow, "Выбрать папку", ".")
if dirlist: # Проверка, выбрана ли папка
self.plainTextEdit.appendHtml("<br/> Выбрали папку: <b>{}</b> ".format(dirlist))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
```
Эти изменения должны помочь вам избежать ошибки 0xC0000409, когда вы нажимаете на кнопку в приложении. Убедитесь, что все виджеты создаются и инициализируются правильно.