|
|
GUI Feld mit Tastenkombination belegen |
|
delirio |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2009, 09:10
Titel: GUI Feld mit Tastenkombination belegen
|
|
|
|
|
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
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
|
|
Beiträge: 2.029
|
|
|
|
Anmeldedatum: 03.09.07
|
|
|
|
Wohnort: Wien
|
|
|
|
Version: R2024a
|
|
|
|
|
|
Verfasst am: 18.06.2009, 09:33
Titel:
|
|
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?
|
|
|
Dagnabit |
Forum-Century
|
|
Beiträge: 244
|
|
|
|
Anmeldedatum: 23.04.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2009, 12:09
Titel:
|
|
Servus delirio
Ein Befehl der mir in diesem Zusammenhang mal untergekommen ist:
_________________
lg
Martin
|
|
|
delirio |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2009, 12:22
Titel:
|
|
|
|
|
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:
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
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
|
|
Beiträge: 244
|
|
|
|
Anmeldedatum: 23.04.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2009, 12:51
Titel:
|
|
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
|
|
|
delirio |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2009, 13:33
Titel:
|
|
|
|
|
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.
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:
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
|
|
Beiträge: 2.029
|
|
|
|
Anmeldedatum: 03.09.07
|
|
|
|
Wohnort: Wien
|
|
|
|
Version: R2024a
|
|
|
|
|
|
Verfasst am: 18.06.2009, 14:12
Titel:
|
|
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.
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?
|
|
|
Stiftmaster |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.07.2009, 18:16
Titel:
|
|
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
|
|
Beiträge: 1
|
|
|
|
Anmeldedatum: 06.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.04.2012, 18:26
Titel: Bitte um genauere Erläuterung
|
|
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.
in meinem Fall heißt die Matlab Funktion figSmu und die Funktion die aufgerufen werden soll figSmu_KeyPressFcn
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|