WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

GUI Feld mit Tastenkombination belegen

 

delirio

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2009, 09:10     Titel: GUI Feld mit Tastenkombination belegen
  Antworten mit Zitat      
Also ein direkter Shortcut wird denk ich kaum verlinkbar sein, da ja irgendwie der Zugriff aus dem Betriebssystem heraus erfolgen müsste.

Korrigiert mich wenn ich arg falsch liege Very Happy



Trotzdem möchte ich für ein angenehmeres Arbeiten unbedingt irgendwie die Maus ersetzen.

Hintergrund der Geschichte ist das ich über ein recht aufwendiges Matlab Program ein Messgerät Remote steuere. Dessen Einstellungen über mehrere GUI figures einstelle und nach dem setzen der Parameter einmalig einen "Senden" Pushbutton betätigen muss.
Und dann wieder an meinen Parametern rumschrauben kann.


Als Ansatzpunkt denke ich zu aller erst an diesen TAB-Order Editor,
welcher die Reihenfolge der GUI-Felder festlegt wenn man mit der TAB Taste springt.

Gäbe es hier eine Möglichkeit auf diese TAB-Order irgendwie codemäßig zuzugreifen... also verbirgt sich diese Information nicht ebenfalls hinter einem handle??

Dann könnte man doch z.B. als erste Instanz ein Feld als immer aktiv setzen
und es würde auf Druck der Leertaste z.B. reagieren.


Auf Meinungen eurerseites bin ich gespannt.

mfg und vielen Dank

A.


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 18.06.2009, 09:33     Titel:
  Antworten mit Zitat      
Moin,

wenn du in der Matlab-Hilfe nach "tab order" suchst dann wird als einer der ersten Einträge "Setting Tab Order" angezeigt, einmal für GUIDE-GUIs und einmal für manuell programmierte GUIs. Schau mal ob du damit weiter kommst...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2009, 12:09     Titel:
  Antworten mit Zitat      
Servus delirio

Ein Befehl der mir in diesem Zusammenhang mal untergekommen ist:
Code:

_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
delirio

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2009, 12:22     Titel:
  Antworten mit Zitat      
Zu allererst... herzlichsten Dank Steve, danke Dagnabit,


beim durchstöbern der Hilfe bin ich doch tatsächlich auf noch etwas viel interssanteres gestoßen.

Und zwar gibts ja tatsächlich die Möglichketi eines Funktionsaufruf bei drücken einer beliebigen Taste,

Zauberwort: KeyPressFcn

Wie ich das ganze umsetzen würde ist schon so gut wie durchdacht...
Nur scheiterts im Moment noch ein bisschen an der Durchführung:


Also laut: quelle
sieht das ganze so aus...
die KeyPressFcn ist ebenso ein handle einer figure wie z.B. der Callback

die Anwendung wäre wie folgt:

Code:
% Using the KeyPressFcn

% This example, creates a figure and defines a function handle callback for the KeyPressFcn property. When the e key is pressed, the callback exports the figure as an EPS file. When Ctrl-t is pressed, the callback exports the figure as a TIFF file.

function figure_keypress
   figure('KeyPressFcn',@printfig);
   function printfig(src,evnt)
      if evnt.Character == 'e'
         print ('-deps',['-f' num2str(src)])
      elseif length(evnt.Modifier) == 1 & strcmp(evnt.Modifier{:},'control') & ...
          evnt.Key == 't'
         print ('-dtiff','-r200',['-f' num2str(src)])
   end
end



Jetzt zu meinem Problem,
ich bekomms nicht hin wie ich die einzelnen Tasten abfrage.

Also ich ruf über die KeyPressFcn ganz einfach eine Funktion in meinem Handle auf,
übergib dabei die Standart gcbo
-> da is nix drinn

Dann irgendwie, über dieses Subfunktion printfig komme ich ebenso wenig zu Schuss...
Es fehlt wohl irgendwie mit dem richtigen Umgang von handles und Funktionen Sad


Also offensichtlich sind die Infos die ich suche irgendwie hinter den Feldern,
'Character', 'Modify', 'Key'
versteckt... nur der richtige Zugriff will mir nicht gelingen.
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2009, 12:51     Titel:
  Antworten mit Zitat      
Servus nochmal

Was willst Du eigentlich genau erreichen?

Soll, nachdem Du den "Sende"- button gedrückt hast, das erste vorhandene edit-Feld aktiv sein?

Oder meinst Du eher, dass mit dem Drücken einer beliebigen Taste (z.B. Space) der Sendeprozess gestartet werden soll?
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
delirio

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2009, 13:33     Titel:
  Antworten mit Zitat      
Das zweite wärs gewesen.

Ich dachte nur nie, dass sich über Matlab Tastaturbefehle einstellen ließen
und habe daher aus Unwissenheit die nächst angenehmere Lösung angestrebt.


Jedoch bin ich jetzt verrückter weise auf genau meine Problemstellung und deren Lösung gestoßen.

Diese will ich natürlich nicht vorenthalten, deshalb von mir ein kleines howTo:


MATLAB - GUI BUTTONS / FELDER per TASTENKOMBINATION ausführen
Zitat:



Um oft wiederkehrende Funktionen einfacher und ohne Maus ausführen zu können bietet sich in Matlab wie auch in vielen anderen Fällen eine spezielle Tastenkombination an.

Um eine allgemeine Erklärung vermeiden zu können, hier anhand eines Beispiels:

Ausgangssituation: Matlab figure mit einem PushButton welche irgend eine Funktion mittels Callback ausführt.

Sprich, drücken des Buttons -> es passiert was schönes


Um diese Funktion jetzt einer speziellen Tastenbelegung zu zuordnen, folgende Vorgehensweise:

Stichwort: KeyPressFcn
(Anmerkung, vielleicht geht das ganze auch weniger umständlich... meine Lösung funktioniert aber auf alle Fälle)

Bei den handles der figure, in der sich auch unser vorhandener Pushbutton befindet.
Wird unter dem Feld 'KeyPressFcn'
ein ganz normaler Funktionsaufruf eingestellt.

Code:
figSmu('figSmu_KeyPressFcn',gcbf,[],guidata(gcbf))


in meinem Fall heißt die Matlab Funktion figSmu und die Funktion die aufgerufen werden soll figSmu_KeyPressFcn

In der *.m-File
sieht dann die Funktion wie folgt aus:

Code:
function figSmu_KeyPressFcn(hObject, eventdata, handles)
   set(figSmu,'KeyPressFcn',@myPress);
   function myPress(src,evnt)
      if length(evnt.Modifier) == 1 & strcmp(evnt.Modifier{:},'alt') & ...
          evnt.Key == 's'
       disp('Juhuu es GEEEEHT');
      end


Es geschieht folgendes, nach öffnen der figure
und drücken einer beliebigen Taste wird in das Feld 'KeyPressFcn'
der Funktionsaufruf 'myPress' übertragen

Anschließend wird bei jedem Tastendruck,
bei aktiver GUI (!!!)
über die Struktur 'event.Key' gecheckt, welche Taste gedrückt worden ist.

In meinem gezeigten Fall, also die if-Abfrage ob die Taste 'ALT' und zugleich der Buchstabe 'S' gedrückt wurde.
Bei TRUE müsste dann halt noch der Sprung in die gewünschte Funktion erfolgen.
Also die Funktion die sich ebenfalls hinter dem Callback des Pushbuttons versteckt.




Jetzt noch eine Frage an die Spezialisten.

Meine erste Funktion
macht doch nichts anderes als das sie hinter das Feld
'KeyPressFcn'
die Anweisung '@myPress' schreibt, oder???

Müsste dann das ganze nicht auch funktionieren wenn man gleich von vorne herein diese Anweisung fest in das Feld schreibt?

Tut es nämlich leider nicht.

Viele Grüße
und viel Spass mit Tastaturbelegungen

delirio
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 18.06.2009, 14:12     Titel:
  Antworten mit Zitat      
Moin,

ein schönes how-to!

Am besten du stellst es in die Skripte-Ecke oder besser Tutorial-Ecke, dort finden es andere leichter wieder. Am Besten zusammen mit einem kleinen einfachen Beispiel zum Nachvollziehen.

Zu deiner Frage: "figure" hat die "KeyPressFcn"-Property, das heißt du kannst die Funktion direkt beim erstellen der figure angeben oder bei GUIDE-basierten GUIs im Property editor.
Code:
figure('KeyPressFcn',@myPress);


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Stiftmaster

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2009, 18:16     Titel:
  Antworten mit Zitat      
Hallo,

wo genau muss ich, wenn ich mit dem GUIDE arbeite, deinen Code einfügen?

In das Feld von der KeyPressFcn?

Das funktioniert nämlich bei mir leider nicht.

Und ich kann es auch nicht wie im obigen Beispiel machen, da ich möchte, dass die Tasten sofort nach dem öffnen der GUI überwacht werden, das werden Sie aber leider erst, wenn ich die den "set" Code in ein Callback schreibe. Wenn ich versuche diesen in eine CreateFcn oder in die OpenFcn zu schreiben, schmiert Matlab ab.

Am liebsten wäre mir, wenn ich das wirklich gleich in den GUIDE eintragen könnte.....

Wie müsste der genaue Code für obiges Beispiel heissen und wo genau müsste ich diesen hinschreiben?

Vielen Dank
 
hetze
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 06.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2012, 18:26     Titel: Bitte um genauere Erläuterung
  Antworten mit Zitat      
Den Teil verstehe ich irgendwie nicht ganz...
wo soll der Code hin?
In mein gui.m File? An welche Stelle
Zitat:

Bei den handles der figure, in der sich auch unser vorhandener Pushbutton befindet.
Wird unter dem Feld 'KeyPressFcn'
ein ganz normaler Funktionsaufruf eingestellt.

Code:

figSmu('figSmu_KeyPressFcn',gcbf,[],guidata(gcbf))
 


in meinem Fall heißt die Matlab Funktion figSmu und die Funktion die aufgerufen werden soll figSmu_KeyPressFcn
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.