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

Не считываются данные с графика

02.04.2024, 22:43. Показов 658. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, попросили сделать приложение для кафедры, суть такая, чтобы минимально изучить принцип работы рефлектометра. Написал небольшой интерфейс, добавил пробный график, создал две линии, так называемые метки.
Получилось сделать так, чтобы они считывали значения с графика, но правильно только с оси X. Что нужно сделать, чтобы этими метками можно было считывать ещё и значения с оси Y. Помогите пожалуйста!


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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import pyqtgraph as pg
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QGraphicsView
 
 
 
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(750, 750)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(570, 280, 1000, 101))
        self.label.setObjectName("label")
        self.graphicsView = QGraphicsView(Form)
        self.graphicsView.setGeometry(QtCore.QRect(40, 290, 491, 341))
        self.graphicsView.setObjectName("graphicsView")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(50, 250, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(150, 250, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(250, 250, 75, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(Form)
        self.pushButton_4.setGeometry(QtCore.QRect(350, 250, 75, 23))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(Form)
        self.pushButton_5.setGeometry(QtCore.QRect(450, 250, 75, 23))
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(Form)
        self.pushButton_6.setGeometry(QtCore.QRect(620, 700, 101, 23))
        self.pushButton_6.setObjectName("pushButton_6")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(70, 20, 561, 51))
        self.label_2.setObjectName("label_2")
        self.pushButton_7 = QtWidgets.QPushButton(Form)
        self.pushButton_7.setGeometry(QtCore.QRect(40, 90, 181, 23))
        self.pushButton_7.setObjectName("pushButton_7")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(30, 120, 681, 101))
        self.label_3.setObjectName("label_3")
 
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
 
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
 
    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "TextLabel"))
        self.pushButton.setText(_translate("Form", "Адаптер 1"))
        self.pushButton_2.setText(_translate("Form", "Адаптер 2"))
        self.pushButton_3.setText(_translate("Form", "Адаптер 3"))
        self.pushButton_4.setText(_translate("Form", "Адаптер 4"))
        self.pushButton_5.setText(_translate("Form", "Адаптер 5"))
        self.pushButton_6.setText(_translate("Form", "Продолжить"))
        self.label_2.setText(
            _translate("Form", "Задание 5. Измерения смонтированного кросса оптическим рефлектометром "))
        self.pushButton_7.setText(_translate("Form", "Посмотреть видео"))
        self.label_3.setText(_translate("Form", "TextLabel"))
 
 
class MyForm(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)
        self.verticalLines = {'red': None, 'blue': None}  # Добавляем атрибут в конструкторе
        self.plot()
 
    def update_label_information(self, vline_red, vline_blue):
        x_value_red = vline_red.value()  # X координата для красной метки
        y_value_red = self.plot_widget.plotItem.vb.mapSceneToView(vline_red.pos()).y()  # Y координата для красной метки
        x_value_blue = vline_blue.value()  # X координата для синей метки
        y_value_blue = self.plot_widget.plotItem.vb.mapSceneToView(vline_blue.pos()).y()  # Y координата для синей метки
        self.label.setText( f'Красная линия: X={x_value_red:.2f}, Y={y_value_red:.2f}, Синяя линия: X={x_value_blue:.2f}, Y={y_value_blue:.2f}')
 
    def plot(self):
        plot_widget = pg.PlotWidget(self.graphicsView)
        self.plot_widget = plot_widget  # добавляем атрибут plot_widget к объекту MyForm
        # Объявление переменных vLine_red и vLine_blue до цикла
        vLine_red = None
        vLine_blue = None
        # Создаем виджет графика и добавляем его на QGraphicsView
        plot_widget = pg.PlotWidget(self.graphicsView)
        plot_widget.setGeometry(0, 0, self.graphicsView.width(), self.graphicsView.height())
 
        # Добавляем график
        plot = plot_widget.plot([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
                                [0, 10, 20, 25, 30, 30, 30, 20, 25, 10, 15, 5, 10, 15, 20, 20], pen=(0, 255, 255))
 
        # Добавляем подписи к осям
        plot_widget.setLabel('bottom', 'Расстояние, км')
        plot_widget.setLabel('left', 'Уровень мощности, дБ')
 
        # Установка диапазонов значений для осей
        plot_widget.getPlotItem().getViewBox().setLimits(xMin=0, yMin=0)
 
        # Добавляем сетку на график
        plot_widget.getPlotItem().showGrid(x=True, y=True, alpha=0.4)
        plot_widget.getPlotItem().getAxis('bottom').setPen(pg.mkPen(color=(255, 255, 255)))
        plot_widget.getPlotItem().getAxis('left').setPen(pg.mkPen(color=(255, 255, 255)))
 
        # Добавляем инструменты для манипуляции объектами
        plot_widget.setMouseEnabled(y=False)  # Блокируем перемещение меток по вертикали
        plot_widget.setMenuEnabled(False)  # Отключаем контекстное меню
 
 
        # Получаем список символов
        symbol_items = plot_widget.getPlotItem().listDataItems()
 
        # Функция для обновления текста label
        vLine_red = self.verticalLines['red']
        vLine_blue = self.verticalLines['blue']
 
        vLine_red = None
        vLine_blue = None
 
 
        # Запускаем цикл для добавления вертикальных линий и делаем их интерактивными
        for index, item in enumerate(symbol_items):
            pos = pg.Point(item.xData[0], item.yData[0])
            vLine_red = pg.InfiniteLine(pos.x() + 1, angle=90, movable=True, pen=(255, 0, 0), hoverPen=(255, 255, 255))
            vLine_blue = pg.InfiniteLine(pos.x() + 3, angle=90, movable=True, pen=(0, 0, 255), hoverPen=(255, 255, 255))
            vLine_red.label = pg.InfLineLabel(vLine_red, text='red', position=0.9, anchor=(1, 1))
            vLine_blue.label = pg.InfLineLabel(vLine_blue, text='blue', position=0.1, anchor=(0, 1))
 
            plot_widget.addItem(vLine_red, ignoreBounds=True)
            plot_widget.addItem(vLine_blue, ignoreBounds=True)
 
            vLine_red.sigPositionChanged.connect(lambda: self.update_label_information(vLine_red, vLine_blue))
            vLine_blue.sigPositionChanged.connect(lambda: self.update_label_information(vLine_red, vLine_blue))
 
 
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2024, 22:43
Ответы с готовыми решениями:

Не считываются данные с БД
Есть БД "DataBase",в которой есть таблица "Actors" (Id(smallint ключ),Name(nchar),Login(nchar),Password(nchar),Speciality(nchar (Или...

Не считываются данные таблицы
Необходимо найти соответствие в базе данных и вывести на экран, но он не считывает таблицу. Не пойму, что не так. ...

Не считываются данные из файла
Добрый вечер. Проблема заключается в том, что когда я загрузил данные из файла, изменил их и сохранил обратно в тот же файл, то потом при...

2
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
05.04.2024, 20:47
так у вас график задан отрезками
геометрически надо
Миниатюры
Не считываются данные с графика  
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
05.04.2024, 20:54
то есть
Python
1
(y[i+1] - y[i])/(x[i+1] - x[i]) = (dy - y[i])/(dx - x[i])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2024, 20:54
Помогаю со студенческими работами здесь

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

Долго считываются данные из БД
Почему данные долго открывается

Неправильно считываются данные
readln(n,m); for i:=1 to n do begin for j:=1 to m do begin read(input); mp.marked:=False; if...

Не считываются данные с формы
function sendCallBackData(){ var name = document.getElementById('name').value; var phone =...

Почему на считываются данные ?
Почему не считываються данные ? Парни помогите!!! Вроде все правильно, но он показывает как будто бы переменная пустая ... ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru