Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 31.03.2024
Сообщений: 3
PyQt5

После выполнения функции, происходит вылет из программы

31.03.2024, 17:41. Показов 800. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В моем приложении выполняется данная функция выделения области экрана. После выделения, программа вылетает. Я посмотрел, почему происходят вылеты с помощью try и оно написало, что:
"Произошла ошибка: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit'"
Пробовал разными способами починить, но не получилось.

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
from PyQt5 import QtCore, QtGui, QtWidgets
 
class SnippingWidget(QtWidgets.QDialog):
    def __init__(self):
        super(SnippingWidget, self).__init__()
        self.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
        self.setStyleSheet("background:transparent;")
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
 
        self.outsideSquareColor = "red"
        self.squareThickness = 2
 
        self.start_point = QtCore.QPoint()
        self.end_point = QtCore.QPoint()
        self.selected_area = None
 
        # Установка размеров окна в соответствии с размерами экрана
        screen_geometry = QtWidgets.QApplication.desktop().screenGeometry()
        self.setGeometry(screen_geometry)
 
    def mousePressEvent(self, event):
        self.start_point = event.pos()
        self.end_point = event.pos()
        QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.CrossCursor)
        self.update()
 
 
    def mouseMoveEvent(self, event):
        self.end_point = event.pos()
        self.update()
 
    def mouseReleaseEvent(self, QMouseEvent):
        r = QtCore.QRect(self.start_point, self.end_point).normalized()
        self.hide()
        self.selected_area = r
        QtWidgets.QApplication.restoreOverrideCursor()
        self.closed.emit()
        self.start_point = QtCore.QPoint()
        self.end_point = QtCore.QPoint()
 
    def paintEvent(self, event):
        trans = QtGui.QColor(22, 100, 233)
        r = QtCore.QRectF(self.start_point, self.end_point).normalized()
        qp = QtGui.QPainter(self)
        trans.setAlphaF(0.2)
        qp.setBrush(trans)
        outer = QtGui.QPainterPath()
        outer.addRect(QtCore.QRectF(self.rect()))
        inner = QtGui.QPainterPath()
        inner.addRect(r)
        r_path = outer - inner
        qp.drawPath(r_path)
        qp.setPen(
            QtGui.QPen(QtGui.QColor(self.outsideSquareColor), self.squareThickness)
        )
        trans.setAlphaF(0)
        qp.setBrush(trans)
        qp.drawRect(r)

Также прилагаю к своей функции, код основного окна.

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
import keyboard
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt, QRect, QPoint
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from allotment import SnippingWidget
 
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
 
        # Окно приложения/настройки окна
        self.setWindowTitle("Окно")
        self.setGeometry(300, 300, 1000, 600)
 
        # Окно всегда видимо поверх других окон
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
 
        # Установка фона и темы
        self.setStyleSheet("themes/rose.json")
 
        # Окно работы
        self.osnovnoe_frame = QWidget(self)
        self.osnovnoe_frame.setGeometry(QRect(300, 0, 700, 600))
 
        # Боковой фрейм для меню
        self.lev_frame = QWidget(self)
        self.lev_frame.setGeometry(QRect(0, 0, 300, 600))
 
        # Текст логотип
        self.label = QLabel("TransScreen", self.lev_frame)
        self.label.setGeometry(QRect(20, 30, 260, 50))
        self.label.setStyleSheet("font: bold 25px;")
 
        # Старт
        self.button_start = QPushButton("Выделение области", self.lev_frame)
        self.button_start.setGeometry(QRect(65, 100, 170, 40))
        self.button_start.clicked.connect(self.start_app)
 
        # Настройки
        self.button_settings = QPushButton("Настройки", self.lev_frame)
        self.button_settings.setGeometry(QRect(65, 150, 170, 40))
 
        # Выход
        self.button_exit = QPushButton("Выход", self.lev_frame)
        self.button_exit.setGeometry(QRect(65, 200, 170, 40))
        self.button_exit.clicked.connect(self.exit_app)
 
        # Бинды
        keyboard.on_press_key('ctrl', self.toggle_window)
 
 
    # функции
    def start_app(self):
        self.is_selecting = True
        snipper = SnippingWidget()
        snipper.exec_()
        QtGui.QGuiApplication.setOverrideCursor(QtCore.Qt.CrossCursor)
 
    def exit_app(self):
        self.close()
 
    def toggle_window(self, e):
        if self.isVisible():
            self.hide()
        else:
            self.show()
 
 
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2024, 17:41
Ответы с готовыми решениями:

Что происходит в результате выполнения программы после Reset?
Каков смысл команд и что будет в R0 после выполнения фрагмента: main: LDS R31,$5D LDI R30,1 ST R0,Z+ PUSH R30

При создании диаграммы SSMS 2017 происходит вылет из программы
При попытке создать диаграмму в SSMS 2017 происходит краш программы, как исправить?

Вылет программы после system()
Добрый день. Пишу под QNX (такой ветки нет вроде на форуме, пишу сюда) программу, которая в определённый момент вызывает tar для...

4
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
31.03.2024, 22:45
Лучший ответ Сообщение было отмечено Lond1kkk как решение

Решение

Ну, дыкть

Python
1
2
3
4
5
6
7
8
    def mouseReleaseEvent(self, QMouseEvent):
        r = QtCore.QRect(self.start_point, self.end_point).normalized()
        self.hide()
        self.selected_area = r
        QtWidgets.QApplication.restoreOverrideCursor()
        self.closed.emit()  # <=== сигнала closed не существует
        self.start_point = QtCore.QPoint()
        self.end_point = QtCore.QPoint()
см. документацию
1. https://doc.qt.io/qtforpython-... ialog.html
(3 родных сигнала QDialog: accepted(), finished(result), rejected())
2. https://doc.qt.io/qtforpython-... idget.html
(4 унаследованных от QWidget: customContextMenuRequested(pos), windowIconChanged(icon), windowIconTextChanged(iconText), windowTitleChanged(title))
3. https://doc.qt.io/qtforpython-... bject.html
(1 унаследованный от QObject: destroyed([object=None]))

Значит надо объявлять свой и куда-то коннектить.
1
0 / 0 / 0
Регистрация: 31.03.2024
Сообщений: 3
31.03.2024, 23:36  [ТС]
А как я могу это сделать?
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
01.04.2024, 16:01
Лучший ответ Сообщение было отмечено Lond1kkk как решение

Решение

Цитата Сообщение от Lond1kkk Посмотреть сообщение
А как я могу это сделать?
Например, можно в заголовке этой страницы выбрать пункт меню Поиск, в выпавшем меню в разделе Поиск по форуму ввести текст pyqtSignal в поле ввода и нажать кнопку Вперёд.

В результате откроется список, в котором будет просто до дури сообщений на тему Что такое pyqtSignal и как с ним бороться с примерами и прочим антуражем. Наверняка что-то с этого Вам поможет.
1
0 / 0 / 0
Регистрация: 31.03.2024
Сообщений: 3
03.04.2024, 00:25  [ТС]
Цитата Сообщение от iamvic Посмотреть сообщение
Например, можно в заголовке этой страницы выбрать пункт меню Поиск, в выпавшем меню в разделе Поиск по форуму ввести текст pyqtSignal в поле ввода и нажать кнопку Вперёд.

В результате откроется список, в котором будет просто до дури сообщений на тему Что такое pyqtSignal и как с ним бороться с примерами и прочим антуражем. Наверняка что-то с этого Вам поможет.
Уже решил, добавил исключение для emit и все работает вроде как.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2024, 00:25
Помогаю со студенческими работами здесь

Вылет программы после завершения
Добрый день. Сегодня решил начать изучение языка программирования. Нашел учебник для чайников, там построение задач ведется с...

Вылет винды после установки программы
Хочу предупредить пользователей. У меня после запуска программы Rest orator Portable наглухо завис компьютер. Попытка перезагрузки привела...

Вылет программы после ввода матрицы
Есть вот такой код, ошибок нет, он компилирует и запускает, но когда я ввожу последний элемент матрицы программы выдает прекращение работы...

После выполнения цикла ничего не происходит
После выполнения цикла ошибки не выводятся, но и в бд из csv ничего не записывается. Подскажите в чем может быть проблема? ...

Вылет из программы после добавления новой формы
Вот динамическое создание формы: Вот результат этого вызова: Вот сообщение, если запускаю запуска до курсора(F4): Вот CPU...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
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 Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru