Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/35: Рейтинг темы: голосов - 35, средняя оценка - 4.71
31 / 27 / 5
Регистрация: 08.11.2019
Сообщений: 58
PySide

'bool' object has no attribute 'ui'

05.11.2020, 16:14. Показов 6858. Ответов 11

Студворк — интернет-сервис помощи студентам
У меня проблема в том, что при запуске программы и нажатии на соответствующую кнопку, у меня вылезает ошибка, что якобы булевый объект не имеет атрибута 'ui'. Хотя при запуске данной страницы отдельно, все нормально работает.
Traceback (most recent call last):
File "C:\Users\pc\PycharmProjects\OMGWHY\app_ functions.py", line 38, in start
if len(self.ui.lineEdit_2.text()) > 5:
AttributeError: 'bool' object has no attribute 'ui'
Первый скриншот - main.py
Второй - app_functions



0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2020, 16:14
Ответы с готовыми решениями:

AttributeError: 'bool' object has no attribute 'setText'
Я понять не могу, что ему нет так?Почему у него тип bool? import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton ...

Attribute error 'tuple' object has no attribute 'employee_id'
Задача у меня такая собрать данные из базы и перевести в формат json. Использую Oracle. Если написать номера столбцов вручную, то все...

Object has no attribute
Добрый день,пересаживаюсь с с#, вообще не вдупляю на что ругается. Объясните import sys import time import os from PyQt5 import...

11
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
05.11.2020, 16:20
Smolga2110, скрины такие даже правилами запрещены, нежели сложно код скопировать?

навскидку вон тебе в 33 строке подчеркивает self, может прочтешь почему?

Добавлено через 1 минуту
как гуи (класс маленькой буквы? садись, два!) из второго модуля связан с первым?
1
31 / 27 / 5
Регистрация: 08.11.2019
Сообщений: 58
05.11.2020, 16:22  [ТС]
Да, прошу прощения, протупил..
Скрины удалю, только надо 5 мин подождать из за задержки
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
05.11.2020, 16:27
Smolga2110, а благодарность за ответ зачем поставил, проблема то не решена? )))
0
31 / 27 / 5
Регистрация: 08.11.2019
Сообщений: 58
05.11.2020, 16:32  [ТС]
За свою оплошность )
И можно спросить, (да, я немного глупый) как можно связать эти два класса
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
05.11.2020, 16:35
Цитата Сообщение от Smolga2110 Посмотреть сообщение
как можно связать эти два класса
ну у меня есть только очевидные ответы о импорте и создании объекта, но полагаю в ГУИ это все немного по своему работает, лучше позвать спецов по гуям.
kapbepucm, DmFat, я призывая вас!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
05.11.2020, 16:53
Smolga2110,

Python
1
from app_mudularis import *
Никогда так не делай.
По сабжу: про твой ui ничерта непонятно, потому что нет кода и потому что *.
0
31 / 27 / 5
Регистрация: 08.11.2019
Сообщений: 58
05.11.2020, 16:58  [ТС]
main.py -----------
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import sys
import platform
 
from PySide2.QtCore import (QCoreApplication, QPropertyAnimation, QDate, QDateTime, QMetaObject, QObject, QPoint, QRect,
                            QSize, QTime, QUrl, Qt, QEvent)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont, QFontDatabase, QIcon, QKeySequence,
                           QLinearGradient, QPalette, QPainter, QPixmap, QRadialGradient)
from PySide2.QtWidgets import *
 
from app_modularis import *
 
 
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
        UIFunctions.removeTitleBar(True)
 
        self.download_folder = None
        self.ui.pushButton.clicked.connect(Gui.get_folder)
        self.ui.pushButton_2.clicked.connect(Gui.start)
        self.mythread = downloader()
 
        self.setWindowTitle('Main Window - Python Base')
        UIFunctions.labelTitle(self, 'Основное Окно - Загрузчик')
        UIFunctions.labelDescription(self, 'Описание')
 
        startSize = QSize(1000, 720)
        self.resize(startSize)
        self.setMinimumSize(startSize)
 
        self.ui.btn_toggle_menu.clicked.connect(lambda: UIFunctions.toggleMenu(self, 220, True))
 
        self.ui.stackedWidget.setMinimumWidth(20)
        UIFunctions.addNewMenu(self, "ГЛАВНАЯ", "btn_home", "url(:/16x16/icons/16x16/cil-home.png)", True)
        UIFunctions.addNewMenu(self, "НОВЫЙ ПОЛЬЗОВАТЕЛЬ", "btn_new_user",
                               "url(:/16x16/icons/16x16/cil-user-follow.png)", True)
        UIFunctions.addNewMenu(self, "YTDownloader", "btn_ytdown",
                               "url(C:/Users/pc/Desktop/OMGDUUUDE/icons/16x16/youtube.png)", True)
        UIFunctions.addNewMenu(self, "ПЛЮХИ НА ПОТОМ", "btn_widgets", "url(:/16x16/icons/16x16/cil-equalizer.png)",
                               False)
 
        UIFunctions.selectStandardMenu(self, "btn_home")
 
        self.ui.stackedWidget.setCurrentWidget(self.ui.page_home)
 
        UIFunctions.userIcon(self, "М.А", "", True)
 
        def moveWindow(event):
            if UIFunctions.returStatus(self) == 1:
                UIFunctions.maximize_restore(self)
 
            if event.buttons() == Qt.LeftButton:
                self.move(self.pos() + event.globalPos() - self.dragPos)
                self.dragPos = event.globalPos()
                event.accept()
 
        self.ui.frame_label_top_btns.mouseMoveEvent = moveWindow
 
        UIFunctions.uiDefinitions(self)
 
        self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
 
        self.show()
 
    def Button(self):
        btnWidget = self.sender()
 
        if btnWidget.objectName() == "btn_home":
            self.ui.stackedWidget.setCurrentWidget(self.ui.page_home)
            UIFunctions.resetStyle(self, "btn_home")
            UIFunctions.labelPage(self, "Главная")
            btnWidget.setStyleSheet(UIFunctions.selectMenu(btnWidget.styleSheet()))
 
        if btnWidget.objectName() == "btn_new_user":
            self.ui.stackedWidget.setCurrentWidget(self.ui.page_home)
            UIFunctions.resetStyle(self, "btn_new_user")
            UIFunctions.labelPage(self, "Новый Пользователь")
            btnWidget.setStyleSheet(UIFunctions.selectMenu(btnWidget.styleSheet()))
 
        if btnWidget.objectName() == "btn_ytdown":
            self.ui.stackedWidget.setCurrentWidget(self.ui.page_ytdown)
            UIFunctions.resetStyle(self, "btn_ytdown")
            UIFunctions.labelPage(self, "Загрузки")
            btnWidget.setStyleSheet(UIFunctions.selectMenu(btnWidget.styleSheet()))
 
        if btnWidget.objectName() == "btn_widgets":
            self.ui.stackedWidget.setCurrentWidget(self.ui.page_widgets)
            UIFunctions.resetStyle(self, "btn_widgets")
            UIFunctions.labelPage(self, "Всякие Плюхи")
            btnWidget.setStyleSheet(UIFunctions.selectMenu(btnWidget.styleSheet()))
 
    def eventFilter(self, watched, event):
        if watched == self.le and event.type() == QtCore.QEvent.MouseButtonDblClick:
            print("pos: ", event.pos())
 
    def mousePressEvent(self, event):
        self.dragPos = event.globalPos()
        if event.buttons() == Qt.LeftButton:
            print('МЫШЬ: Левая')
        if event.buttons() == Qt.RightButton:
            print('МЫШЬ: Правая')
        if event.buttons() == Qt.MidButton:
            print('МЫШЬ: Колесо')
 
    def resizeEvent(self, event):
        self.resizeFunction()
        return super(MainWindow, self).resizeEvent(event)
 
    def resizeFunction(self):
        print('Высота: ' + str(self.height()) + ' | Длинна: ' + str(self.width()))
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    QtGui.QFontDatabase.addApplicationFont('fonts/segoeui.ttf')
    QtGui.QFontDatabase.addApplicationFont('fonts/segoeuib.ttf')
    window = MainWindow()
    sys.exit(app.exec_())
app_functions.py: ----------------------------------------------------------

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import os
import sys
import youtube_dl
from PyQt5 import QtCore, QtGui, QtWidgets
from PySide2 import QtCore, QtGui, QtWidgets
from ui_main import *
from app_modularis import *
 
 
class downloader(QtCore.QThread):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.url = None
 
    def run(self):
        self.mysignal.emit('Процесс скачивания запущен!')
 
        with youtube_dl.YoutubeDL({}) as ydl:
            ydl.download([self.url])
 
        self.mysignal.emit('Процесс скачивания завершен!')
        self.mysignal.emit('finish')
 
    def init_args(self, url):
        self.url = url
 
 
class Gui(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui.setupUi(self)
        self.download_folder = None
        self.ui.pushButton_2.clicked.connect(self.get_folder)
        self.ui.pushButton_3.clicked.connect(self.start)
        self.mythread = downloader()
 
    def start(self):
        if len(self.ui.lineEdit_2.text()) > 5:
            if self.download_folder != None:
                link = self.ui.lineEdit_2.text()
                self.mythread.init_args(link)
                self.mythread.start()
                self.locker(True)
            else:
                QtWidgets.QMessageBox.warning(self, "Ошибка", "Вы не выбрали папку!")
        else:
            QtWidgets.QMessageBox.warning(self, "Ошибка", "Ссылка на видео не указана!")
 
    def get_folder(self):
        self.download_folder = QtWidgets.QFileDialog.getExistingDirectory(self, 'Выбрать папку для сохранения')
        os.chdir(self.download_folder)
 
    def handler(self, value):
        if value == 'finish':
            self.locker(False)
 
        else:
            self.ui.plainTextEdit.appendPlainText(value)
 
    def locker(self, lock_value):
        base = [self.ui.pushButton_2, self.ui.pushButton_3]
 
        for item in base:
            item.setDisabled(lock_value)
app_modularis.py:----------------------------------------

Python
1
2
3
4
5
6
7
8
9
from ui_main import Ui_MainWindow
 
from ui_styles import Style
 
from ui_functions import *
 
from app_functions import *
 
from main import *
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,658
06.11.2020, 10:20
Лучший ответ Сообщение было отмечено Smolga2110 как решение

Решение

Цитата Сообщение от Smolga2110 Посмотреть сообщение
Python
1
2
3
4
5
6
7
def __init__(self, parent=None):
 super().__init__(parent)
 self.ui.setupUi(self)
 self.download_folder = None
 self.ui.pushButton_2.clicked.connect(self.get_folder)
 self.ui.pushButton_3.clicked.connect(self.start)
 self.mythread = downloader()
app_functions.py:
строка 31 self.ui.setupUi(self)
тут вы обращаетесь к полю .ui класса Gui (self.ui), но при этом ещё нигде его не назначали/обьявляли до этого

Цитата Сообщение от Smolga2110 Посмотреть сообщение
Python
1
2
from PyQt5 import QtCore, QtGui, QtWidgets
from PySide2 import QtCore, QtGui, QtWidgets
определитесь, pyside или всётаки pyqt
1
31 / 27 / 5
Регистрация: 08.11.2019
Сообщений: 58
07.11.2020, 21:31  [ТС]
Спасибо, уже решил проблему, там была загвоздка в кое-чем другом )
0
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 22
15.03.2024, 18:12
В чем была проблема, столкнулся с аналогичной?
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,658
22.03.2024, 17:10
Цитата Сообщение от Ultimaforsan Посмотреть сообщение
В чем была проблема
обращение в коде к чемуто, что заранее не было описано/определено
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2024, 17:10
Помогаю со студенческими работами здесь

Ошибка object has no attribute 'get'
#бегущая строка from tkinter import * def exit(): #функция выхода sys.exit() def put(): a = text.get() ...

'str' object has no attribute
Здравствуйте. Возникла проблема с вызовом функции. Ошибка такая: 'str' object has no attribute 'getInfoPasient'. Пробовала переименовывать,...

'QuerySet' object has no attribute 'id'
делаю редирект на страницу с созданной статьей после сабмита формы: моель: class Article(models.Model): title =...

'NoneType' object has no attribute
Пытаюсь добавить товар в корзину. Хочу начать с простого. Есть 3 модели: Product, CartItem, Cart. Для начала хочу взять первую корзину...

Object has no attribute 'exec_'
Возникает ошибка (единственная на данный момент): Traceback (most recent call last): File...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru