Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Shortcuts für Buttons erstellen

 

warawa
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2019, 13:43     Titel: Shortcuts für Buttons erstellen
  Antworten mit Zitat      
Hallo Community,

ich habe folgendes Problem.
Ich würde gerne mit der Enter-Taste mehrere Strings aus mehreren edit_Textboxen in passende Checkboxen schreiben lassen, mit Backspace die Markierten Checkboxeinträge löschen, mit m Markierte Checkboxeinträge zwischen den Spalten verschieben und mit b den Markierten Checkboxeintrag wieder in die edit_Textbox schreiben und bearbeiten.
(zum besseren Verständnis ist im Anhang mein GUI)

Nun ist die Frage, ich habe bereits einen Code mit den gewünschten Ergebnissen geschrieben, nur habe ich dies für Buttons Programmiert. Nun würde ich gerne ebenfalls mit shortcuts (z.B. m-Taste, b-Taste, Enter und Backspace) diese Befehle ausfüren lassen.
Ist das möglich in Matlab.
(Meine Annahme: spezeller Befehl in KeyPressFcn)

Danke für Antworten

GUI.PNG
 Beschreibung:

Download
 Dateiname:  GUI.PNG
 Dateigröße:  56.68 KB
 Heruntergeladen:  8 mal


Zuletzt bearbeitet von warawa am 01.04.2019, 13:55, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 19.763
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 01.04.2019, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

das sollte über die KeyPressFcn gehen.

Edit: ich habe gesehen, dass du bereits auf die KeyPressFcn gekommen bist. Was hast du damit versucht und welche Probleme sind dabei aufgetreten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)

Zuletzt bearbeitet von Harald am 01.04.2019, 14:02, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2019, 13:57     Titel:
  Antworten mit Zitat      
Besteht die Möglichkeit, dass du einen Beispielcode schreibst damit ich die Function genau verstehe.

edit: ich habe zwar gesehen das es die KeyPressFcn gibt aber ich bin recht neu in Matlab, und kenne den befehl nicht für :

if (m-Taste gedrückt)
pushbutton_move_Callback(hObject. evendata, handles);
end

ich habe in figure1_KeyPressfcn(hObject,eventdata,handles) folgendes geschrieben:

Code:

switch eventdata.Key
    case 'm'
        pushbutton_move_Callback(hObject, eventdata, handles)
end
 


Der obere Code funktioniert, aber nur wenn ich davor auf die figure drücke wenn ich eine checkbox markiere und dann sofort m drücke passiert nichts

in der function pushbutton_move__Callback habe ich wie oben genannt einen Code geschrieben der Markierte Checkboxen zwischen den Spalten verschiebt.
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2019, 09:31     Titel:
  Antworten mit Zitat      
Ich vermute mal, dass du den Edit nicht mitbekommen hast da du beschäftigt bist hoffnungslosen fällen wie mir zu helfen Very Happy

Also nützlich wäre eine Möglichkeit, dass ich gleich allen Bestandteilen der GUI eine KeyPressFcn geben kann, ohne das ich für jedes Einzelteil eine Fcn erstellen muss
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.763
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 02.04.2019, 17:50     Titel:
  Antworten mit Zitat      
Hallo,

habe ich in der Tat nicht mitbekommen.
Tagsüber habe ich je nach Arbeitsauslastung mal mehr, mal weniger Zeit. Abends zugegebenermaßen nicht immer die Muße.

Ich habe mit KeyPressFcn selbst noch nicht sooo viel gemacht. Daher wäre ein Minimalbeispiel hilfreich, in dem ich mir das Verhalten ansehen kann, ohne erst selbst was zusammenklicken zu müssen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2019, 08:38     Titel:
  Antworten mit Zitat      
Das ist nicht umbedingt ein minimal Beispiel und ich bin nicht sicher ob du das meintest, aber hier ist der Befehl für die Ablage mit der Return (Enter) Taste:

Code:

% --- Executes on key press with focus on figure1 and none of its controls.
function figure1_KeyPressFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  structure with the following fields (see MATLAB.UI.FIGURE)
%   Key: name of the key that was pressed, in lower case
%   Character: character interpretation of the key(s) that was pressed
%   Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed
% handles    structure with handles and user data (see GUIDATA)

switch eventdata.Key
        case 'return'
       
        %Einlesen des Textes
        text_Todo = get(handles.edit_Todo, 'String');
        text_Todolang = get(handles.edit_Todolangfristig, 'String');
       
        %Ablage des geschriebenen Textes in eine unbeschriebene Todo Checkbox  
        for x = 1:22
            if(x <= 21)
                if(get(handles.(['checkbox', num2str(x)]),'String')=="" && get(handles.edit_Todo, 'String')~= "")  
                    set(handles.(['checkbox', num2str(x)]),'String', text_Todo);
                    set(handles.edit_Todo, 'String', '');
                end    
            elseif (x > 21 && get(handles.edit_Todo, 'String')~= "")
                msgbox('Alle Todo checkboxen sind beschrieben');
            end
        end
       
        %Ablage des geschriebenen Textes in eine unbeschriebene Todo langfristig Checkbox
        for x = 1:22
            if(x <= 21)
                if(get(handles.(['checkboxlang', num2str(x)]),'String') == "" && get(handles.edit_Todolangfristig, 'String')~= "")  
                    set(handles.(['checkboxlang', num2str(x)]),'String', text_Todolang);
                    set(handles.edit_Todolangfristig, 'String', '');                        
                end    
            elseif (x > 21 && get(handles.edit_Todolangfristig, 'String')~= "")
                msgbox('Alle Todo langfristig checkboxen sind beschrieben');
            end
        end
           
end
 


Die KeyPressFcn wird nur ausgeführt, wenn ich das figure1 ausgewählt habe. Wenn ich z.B. in einer edit_Textbox schreibe und dann return drücke passiert nichts, da ich zu dem zeitpunkt die edit_Textbox ausgewählt habe. Um mit return den Text abzulegen muss ich zuerst noch auf die figure drücken.
Nun frage ich mich ob es möglich ist eine KeyPressFcn zu schreiben die alle Elemente der GUI beinhaltet, oder ob es notwendig ist für jedes Element einzeln die KeyPressFcn zu schreiben
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.763
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 03.04.2019, 19:02     Titel:
  Antworten mit Zitat      
Hallo,

meine Idee war etwas ausführbares.
Es sollte möglich sein, jedem Element die gleiche KeyPressFcn zuzuweisen. Wenn du die Handles gesammelt hast, sollte das mit set auch auf einmal gehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2019, 12:37     Titel:
  Antworten mit Zitat      
Sry das vorhin was der falsche Chat Embarassed

Könntest du mir deine Idee genauer erklären, oder im besten Fall sogar einen Beispielcode
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.763
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.04.2019, 13:10     Titel:
  Antworten mit Zitat      
Hallo,

z.B. in der OpeningFcn:
Code:
kpf = get(handles.figure1, 'KeyPressFcn');
flds = fieldnames(handles);
for k = 1:numel(flds)
set(handles.(flds{k}), 'KeyPressFcn', kpf)
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2019, 14:36     Titel:
  Antworten mit Zitat      
ich weis nicht was ich falsch mache bei mir kommt die Error nachricht:

Error using matlab.ui.container.Panel/set
There is no KeyPressFcn property on the Panel class.

Error in Steffs_Todo>Steffs_Todo_OpeningFcn (line 90)
set(handles.(flds{k}), 'KeyPressFcn', kpf)

Error in gui_mainfcn (line 220)
feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

Error in Steffs_Todo (line 42)
gui_mainfcn(gui_State, varargin{:});
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.763
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.04.2019, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung sagt ja, was du falsch machst. Bei manchen Elementen gibt es keine KeyPressFcn, also kann man auch keine setzen. Banale Abhilfe:

Code:
kpf = get(handles.figure1, 'KeyPressFcn');
flds = fieldnames(handles);
for k = 1:numel(flds)
try
set(handles.(flds{k}), 'KeyPressFcn', kpf)
catch
end
end


Ich teste das, was ich vorschlage, ja gerne vorher. Das geht aber leider nur, wenn ich auch ein Beispiel (komplettes .fig und .m) habe, an dem ich es testen kann.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2019, 08:26     Titel:
  Antworten mit Zitat      
Perfekt bisher funkioniert alles so wie ich es mir erhoft habe Very Happy

Danke Harald du bist der beste
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2019, 08:35     Titel:
  Antworten mit Zitat      
Ok mir ist gerade ein kleiner Fehler aufgefallen. Wenn ich das 1. mal return drücke passiert nichts, beim 2. mal return wird der Text aus der edit box geschrieben, dann ändere ich den Text und beim 3. mal return wird nochmal der 1. Text geschrieben und beim 4. mal return erst der 2.

Meine Vermutung, beim Betätigen der return Taste wird erst der eingetragene Text erst gespeicher, und beim erneuten drücken wird dieser eingeschrieben und der eingeschriebene Text erneut gespeicher, also im ganzen wird der gewünschte Text immer erst einen Schritt später geschrieben.
Private Nachricht senden Benutzer-Profile anzeigen
 
warawa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 15.03.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2019, 14:33     Titel:
  Antworten mit Zitat      
Könnte mir bitte wer mit dem oberen Problem behilflich sein.

PS an Harald: so wie es aussieht bewirkt die figure_WindowKeyPressFcn genau das selbe wie der Code den du mir geschrieben hast, also das alle KeyPressFcn gleichgesetzt werden.
Aber das Problem ist immernoch das gleiche
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.763
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 10.04.2019, 18:09     Titel:
  Antworten mit Zitat      
Hallo,

beim ersten Lesen hatte ich keine Idee.
Beim zweiten Lesen ist meine Vermutung, dass beim ersten Enter der Callback des edit-Feldes ausgelöst wird. Dann müsstest du diese Aktion also zusätzlich als Callback der edit-Felder hinterlegen.

Bei so vielen Beiträgen in einem Thema ist es übrigens unwahrscheinlich, dass sich noch jemand neu einklinkt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2019 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.