Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 14.05.2018
Сообщений: 4
Matlab 2017

Выполнение функции при зажатой кнопке GUI

14.05.2018, 22:45. Показов 1434. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
В Gui у меня есть 2 кнопки, с помощью которых я поворачиваю отрезок по\против часовой стрелки. Вопрос такой: можно ли как-то сделать, чтобы поворот происходил, пока кнопка зажата?
Извините, если вопрос глупый - я новичок как в матлабе, так и на форуме.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2018, 22:45
Ответы с готовыми решениями:

Выполнение операций при зажатой кнопке
Как сделать "залипание" кнопки? Т.е. нажать на неё и пока не отпустишь, выполнялись одни и те же операции.

Выполнение функции при зажатой QPushButton
Суть такова, что есть поле QLineEdit и кнопка QPushButton. В поле есть цифра, которая увеличивается по нажатии на кнопку. Это я реализовал....

PaintBox: рисование кривой при зажатой кнопке мыши
Разработайте приложение из одной формы, разместив на форме компонент Panel, а на Panel – компонент PaintBox. Запрограммируйте перемещение...

1
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
15.05.2018, 14:58
Цитата Сообщение от WonderZina Посмотреть сообщение
можно ли как-то сделать, чтобы поворот происходил, пока кнопка зажата
С этим, по-моему, будут проблемы, т.к. у кнопки нет реакции на "прекращение нажатия" (аналога функции WindowButtonUpFcn для фигуры). То, что вы хотите, можно сделать при нажатии просто на форму, но т.к. вам надо различать два разных нажатия (по часовой и против), то вам, например, нужно смотреть, в какой области произошло нажатие (заранее определив 2 области: одна для отработки вращения по часовой, другая против). Но тут встанет вопрос, как сообщить пользователю об этих областях.
Если вам не критично нажатие именно кнопок на форме и вы можете использовать, например, кнопки на клавиатуре, то тут всё проще (вращение при нажатии стрелок вверх и вниз):
Matlab M
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
function WonderZina()
fig = figure('resize', 'off');
ax = axes();
plM = plot([0 0 0 0],linspace(0, 4.1, 4),'linewidth',3);
set(ax, 'Xlim', [-10 10], 'Ylim', [-10 10], 'visible', 'off');
set(fig,'KeyPressFcn', {@keyControl, plM});
end
 
function keyControl(~, event, plM)
% keyControl Обработка команд с клавиатуры
x = get(plM,'XData');
y = get(plM,'YData');
temp1 = [x(4) y(4) 0 1];
fi = 0;
switch event.Key
    case 'uparrow'
        fi = -2;
    case 'downarrow'
        fi = 2;       
end
 
if fi ~= 0
    Ty = [cosd(fi) sind(fi) 0 0; -sind(fi) cosd(fi) 0 0; 0 0 1 0; 0 0 0 1];
    temp2 = temp1*Ty;
    set(plM,'XData',linspace(0, temp2(1), 4),'YData', linspace(0, temp2(2), 4));
end
end
Добавлено через 2 часа 39 минут
Хотя, получилось:
Matlab M
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
function WonderZina()
fig = figure('resize', 'off', 'WindowButtonUpFcn', @figUp, 'WindowButtonDownFcn', @figDown);
ax = axes();
plM = plot([0 0 0 0],linspace(0, 4.1, 4),'linewidth',3);
set(ax, 'Xlim', [-10 10], 'Ylim', [-10 10], 'visible', 'off');
butPo = uicontrol('Style', 'PushButton', 'Tag', 'Po', ...
    'String', 'По часовой', ...
    'Position', [100 100 100 20], 'ButtonDownFcn', {@buttonPo, plM}, 'Enable', 'inactiv');
butProt = uicontrol('Style', 'PushButton', 'Tag', 'Protiv', ...
    'String', 'Против', ...
    'Position', [100 50 100 20], 'ButtonDownFcn', {@buttonProtiv, plM}, 'Enable', 'inactiv');
set(fig, 'UserData', [butPo butProt]);
end
 
function figUp(obj, ~)
temp = get(obj, 'UserData');
set(temp(1), 'UserData', 0);
set(temp(2), 'UserData', 0);
end
 
function figDown(obj, ~)
temp = get(obj, 'UserData');
set(temp(1), 'UserData', 1);
set(temp(2), 'UserData', 1);
end
 
function buttonPo(obj, ~, plM)
while get(obj, 'UserData')   
    x = get(plM,'XData');
    y = get(plM,'YData');
    temp1 = [x(4) y(4) 0 1];
    fi = -2;
    Ty = [cosd(fi) sind(fi) 0 0; -sind(fi) cosd(fi) 0 0; 0 0 1 0; 0 0 0 1];
    temp2 = temp1*Ty;
    set(plM,'XData',linspace(0, temp2(1), 4),'YData', linspace(0, temp2(2), 4));
    pause(0.05);
end
end
 
function buttonProtiv(obj, ~, plM)
while get(obj, 'UserData')   
    x = get(plM,'XData');
    y = get(plM,'YData');
    temp1 = [x(4) y(4) 0 1];
    fi = 2;
    Ty = [cosd(fi) sind(fi) 0 0; -sind(fi) cosd(fi) 0 0; 0 0 1 0; 0 0 0 1];
    temp2 = temp1*Ty;
    set(plM,'XData',linspace(0, temp2(1), 4),'YData', linspace(0, temp2(2), 4));
    pause(0.05);
end
end
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2018, 14:58
Помогаю со студенческими работами здесь

ONMouseMove не вызывается при зажатой левой кнопке мыши
При Зажатой левой КМ не вызывается событие оnmouseMove проект ниже

Показать символы в текстовом поле при зажатой кнопке
Всем привет! На форме есть текстовое поле со свойством PasswordChar = "*" и кнопка. Как мне сделать что при зажатии кнопки показывал...

Выполнять функцию при зажатой правой кнопке мыши
if (Key.isDown(Key.ESCAPE)) { /* */ } как сделать что так же, только заместо ескейта была правая кнопка мыши или левая? (PS возможно ли...

Поворот объекта по оси Z при зажатой левой кнопке мыши
Здравствуйте! Подскажите, пожалуйста, в чем может быть проблема: скрипт занимается поворотом объекта, если зажата левая кнопка мыши. Тут...

Как отловить событие перемещения курсора при зажатой левой кнопке мыши
Искал на форуме не нашел как можно реализовать такую штуку? Хочу отловить событие перемещения курсора при зажатой левой кнопке мыши. К...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru