|
|
wie GUIs in .m File aufrufen und an dieser Stelle ausführen |
|
marc-205 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2012, 10:13
Titel: wie GUIs in .m File aufrufen und an dieser Stelle ausführen
|
|
|
|
|
Hallo,
ich habe folgendes Problem. Ich habe ein .m File (1), in dem ich bisher zunächst einzelne .m Files aufrufe, die die für eine Rechnung benötigten Variablen mit den jeweiligen Startwerten (quasi Eingabewerte) belegen.
In diesem ersten .m File hab ich jetzt versucht für diese Eingabewerte GUIs einzubinden, wo der Nutzer die Werte einträgt (ein größeres mit Edit Text Boxen und 2 mit schiebereglern), und so nicht jedes mal in den .m files rumschreiben muss. Wenn ich das erste .m File ausführe, werden die GUIs auch aufgerufen, aber der Rest des .m Files wird auch direkt ausgeführt, statt darauf zu "warten" bis im GUI Daten eingegeben sind.
Wie kann man dafür sorgen, dass wenn zB das GUI in Zeile 30 aufgerufen wird, dieses erst ausgefüllt und bestätigt wird und dann der Rest des .m Files abgearbeitet wird?
Wie kann ich, wenn ich ein GUI mit Edit Boxen habe, wo der Nutzer Werte einträgt, einen OK Button nutzen, um dann die Werte der Editboxen in die Variablen zu schreiben? Momentan müsste man in jeder Box noch Enter drücken... das ist etwas umständlich.
|
|
|
|
|
Mmmartina |
Forum-Meister
|
|
Beiträge: 745
|
|
|
|
Anmeldedatum: 30.10.12
|
|
|
|
Wohnort: hier
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 11.12.2012, 12:29
Titel:
|
|
aus dem ersten m-file rufst du das m-file auf, in welchem deine GUI beschrieben wird.
innerhalb der opening function musst du der GUI nun sagen, dass sie warten soll. Und zwar so lange bis eine definierte Rückgabe (z.B. OK-Button) erfolgt innerhalb der Rückgabefunction des GUI-m-files.
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
marc-205 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.12.2012, 13:20
Titel:
|
|
Vielen dank schonmal für die Antwort.
Mit "*GUIHandle* hast du den Namen des m-files gemeint, oder? (die heißt bei mir koordinaten_gui.m)
Die opening function sieht dann so aus
allerdings kommt im Workspace beim ausführen sofort ne Fehlermeldung:
Ich verstehe nicht, was sich dabei worauf bezieht und welche Bezeichnung wo hin kommt...
Wie kann ich mit so einem Pushbutton denn irgendeine Funktionalität einbauen, die dann eine Auswirkung auf dieses uiresume hat?
Habe im GUIDE eine KeyPressFcn hinzugefügt, verstehe aber nicht, wo ich da nun sagen kann, was dann passieren soll, wenn man da drauf drückt.
|
|
|
Mmmartina |
Forum-Meister
|
|
Beiträge: 745
|
|
|
|
Anmeldedatum: 30.10.12
|
|
|
|
Wohnort: hier
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 11.12.2012, 15:49
Titel:
|
|
|
|
|
marc-205 hat Folgendes geschrieben: |
Vielen dank schonmal für die Antwort.
Mit "*GUIHandle* hast du den Namen des m-files gemeint, oder? (die heißt bei mir koordinaten_gui.m) |
Das m-file für die Gui hat den gleichen Namen wie die zu öffnende GUI selber! Überprüfe das und ändere es ggf.
Im m-file wird ein "initialisation code" automatisch erstellt von Matlab, ebenso die opening und close function.
marc-205 hat Folgendes geschrieben: |
Die opening function sieht dann so aus
|
Warum willst du den handle deines Objektes (=deiner Gui) als Output zurückgeben?
Übergibst du irgendetwas vom ersten m-file an deine GUI? Wenn ja, steht das in varargin.
marc-205 hat Folgendes geschrieben: |
allerdings kommt im Workspace beim ausführen sofort ne Fehlermeldung:
Ich verstehe nicht, was sich dabei worauf bezieht und welche Bezeichnung wo hin kommt... |
Wie heißt denn der Handle deiner GUI?
setz mal einen breakpoint innerhalb der opening function und laß dir mal die handles ausgeben (handles markieren und F9 drücken). der oberste handle müsste der der Gui sein.
Ganz bildlich gesprochen: deine GUI besteht aus einzelnen Elementen, die alle einen Namen haben. Der Name setzt sich aus handles + . + NAME zusammen.
Wenn du den falschen NAmen nutzt, sprichst du das falsche Element an. Vermutlich heißt der handle deiner Gui anders, daher der Fehler.
marc-205 hat Folgendes geschrieben: |
Wie kann ich mit so einem Pushbutton denn irgendeine Funktionalität einbauen, die dann eine Auswirkung auf dieses uiresume hat?
Habe im GUIDE eine KeyPressFcn hinzugefügt, verstehe aber nicht, wo ich da nun sagen kann, was dann passieren soll, wenn man da drauf drückt. |
Du erstellt im GUIDE einfach einen Button in der Gui. Der Funktionskopf wird ganz automatisch im m-file erstellt.
Innerhalb dieser Funktion ließ du dann einfach Werte aus der Gui aus (mit get(handle...,...). Und dann weißt du das z.B. handles.output zu.
Als letzte Zeile innerhalb dieser Funtion kommt dann ein uiresume(...)
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
marc-205 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.12.2012, 10:21
Titel:
|
|
|
|
|
Zitat: |
Warum willst du den handle deines Objektes (=deiner Gui) als Output zurückgeben?
Übergibst du irgendetwas vom ersten m-file an deine GUI? Wenn ja, steht das in varargin. |
Warum das dort steht, kann ich dir nicht beantworten. Das hat Matlab bzw Guide selbst so geschrieben. Ich wollte zumindest nichts aus dem m-file an das GUI übergeben.
Der Handle hat viele Unterpunkte:
habe mal figure1 als Namen benutzt und jetzt zumindest nicht mehr die Fehlermeldungen zu dem uiwait:
Ein Teil der Fehermeldungen kommt wahrscheinlich daher, dass ich nicht weiß, wie oder wo ich dieses uiresume hinschreibe. Hab zwar von diesem Pushbutton eine KeyPressFcn aber keine Ahnung, welches handle man da reinschreibt. Ist das wieder dieses figure1, oder ein handle, was quasi der Button ist?
Das herausschreiben der im GUI einzugebenden Werte in die Variablen im Workspace hab ich mit assignin gemacht, wo aber wie gesagt jeweils wieder die Enter-Taste nötig ist. Diese "Bestätigung" für alle Edit Felder zum schreiben in den Workspace würd ich gern mit dem Button machen. Idealerweise sollte der dann auch dieses uiresume anschließend ausführen.
Hab die Datei mal angehangen.
Sorry für die Planlosigkeit, aber ich nutze Matlab erst seit letzter Woche und habe leider vorher noch nie was mit Programmieren am Hut gehabt.
Vielen dank schonmal für die Hilfe.
Beschreibung: |
|
Download |
Dateiname: |
koordinaten_gui.m |
Dateigröße: |
22.76 KB |
Heruntergeladen: |
407 mal |
|
|
|
Mmmartina |
Forum-Meister
|
|
Beiträge: 745
|
|
|
|
Anmeldedatum: 30.10.12
|
|
|
|
Wohnort: hier
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 12.12.2012, 11:37
Titel:
|
|
Wenn du noch gar keine AHnung zu den Handles hast, dann such dir bitte erstmal eine einfach Programmiererkläung zu den GUIs und arbeite dieses Schritt für Schritt durch.
Davon gibt es massig im Netz, einfach mal google bemühen.
Alles andere wird dir keinen bleibenden Nutzen bringen, sondern ein frustrierendes stochern im Nebel, weil die Grundlagen fehlen.
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
marc-205 |
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 12.12.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010b
|
|
|
|
|
|
Verfasst am: 12.12.2012, 15:14
Titel:
|
|
|
|
|
Hallo.
Ich habe mich natürlich auch in Google ausgetobt und gesucht, aber erst spät brauchbare Erklärungen zu den Handles gefunden, bzw diese verstanden.
Anscheinend kann innerhalb des GUI m-files über handles.Tag der Wert der Variable aus den jeweiligen Feldern, zB Editboxen, ausgelesen (und auch hineingeschrieben) werden, wobei für "Tag" der jeweilige Tag des Feldes genommen wird. Es sind also quasi lokale Variablen, die nur im GUI zur Verfügung stehen, die automatisch durch das erstellen von den jeweiligen Feldern vergeben/deklariert werden.
Das schreiben der jeweiligen Werte (in dem fall will ich die Variable im WS x_o nennen und ziehe sie aus der Edit Box mit dem Tag "edit1" raus) in den Workspace mit folgendem Code, muss in die Callback Funktion des Push Buttons geschrieben werden.
Das hatte ich fälschlicherweise zunächst in eine KeyPressFcn geschrieben, muss aber für jeden Wert in die Callback des Buttons geschrieben werden.
Das funktioniert soweit schonmal.
Das Problem, dass das m-file, was die GUI aufruft, nicht auf diese gewartet hat, habe ich jetzt gelöst, indem ich in die Output Function einen waitfor Befehl eingefügt habe
Also wird das abgeschlossen/ausgegeben, wenn der pushbutton 2 geklickt wird.
Das klappt soweit auch alles. Allerdings kommen im Workspace weiterhin folgende Fehlermeldungen, obwohl das m-File und auch die GUI korrekt abgearbeitet werden.
Anscheinend hat das war mit der varargin Sache zu tun. Das Programm läuft soweit, daher ists nicht so schlimm, aber ich würd gern verstehn, was das für Fehler sind.
Die aktuelle Datei hab ich nochmal angehangen.
Beschreibung: |
|
Download |
Dateiname: |
koordinaten_gui.m |
Dateigröße: |
25.91 KB |
Heruntergeladen: |
401 mal |
|
|
|
marc-205 |
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 12.12.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010b
|
|
|
|
|
|
Verfasst am: 05.02.2013, 13:46
Titel:
|
|
|
|
|
Hallo,
ich habe die hier oben benannten Probleme gelöst, aber jetzt ein neues.
Ich habe ein GUI, in dem 2 Buttons sind, mit denen ich jeweils ein anderes Unterprogramm aufrufen will. Die beiden Unterprogramme liegen jeweils in einem eigenen Ordner. Also hab ich in den Pushbutton Callback geschrieben
Wenn ich darauf klicke wird das Unterprogramm auch ausgeführt, das zu dem Unterprogramm gehörende GUI öffnet sich. Wenn ich in diesem GUi dann nach meinen Eingaben die Berechnung starten will, kommt im Command Window die Fehlermeldung
Dabei handelt es sich um die Variablen, die ich in den GUIs des jeweiligen Unterprogramms mit assignin in den base Workspace geschrieben habe. Im Workspace werden die auch angezeigt, also sind sie vorhanden und mit den gewünschten Werten belegt. Warum kann er dann nicht mit den Werten weiterrechen?
Ich glaube ich muss in dem ersten GUI irgendwas schreiben, damit nachdem auf den pushbutton geklickt wurde, wieder mit dem normalen base Workspace gearbeitet wird. Ich weiß allerdings nicht wie das geht, oder ob das überhaupt geht.
Wenn ich die Unterprogramme direkt ausführe, also ohne die "obere" GUI klappt alles problemlos.
Hat jemand eine Idee?
|
|
|
marc-205 |
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 12.12.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010b
|
|
|
|
|
|
Verfasst am: 13.02.2013, 09:28
Titel:
|
|
Hat niemand eine Idee?
Wäre für eine hilfreiche Idee sehr dankbar.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 13.02.2013, 14:09
Titel:
|
|
Hallo marc-205,
Bitte poste eine neue Frage in einem neuen Thema. Andernfalls ist der "beantwortet"-Status sinnfrei und die Diskussion sehr unübersichtlich. Danke.
Variablen per ASSIGNIN in andere Workspaces zu "schummeln" ist einfach eine ausgesprochen unübersichtliche Method. Darum wundert es mich nicht, dass dies Probleme erzeugt. Besser ist es, eine Variable per SETAPPDATA oder GUIDATA im Figure-Objekt zu speichern, oder eine spezielle Funktion zu benutzen, die die Werte als PERSISTEN Variablen zwischenspeichert.
Das Ändern des aktuellen Ordners um bestimmte M-Files zu erreichen, ist ebenfalls uneffizient und sehr anfällig für Probleme. Besser wäre es, die Ordner im PATH einzutragen, entweder mit dem PATHTOOL oder dynamisch per ADDPATH.
Gruß, Jan
|
|
|
marc-205 |
Forum-Anfänger
|
|
Beiträge: 25
|
|
|
|
Anmeldedatum: 12.12.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010b
|
|
|
|
|
|
Verfasst am: 20.02.2013, 12:52
Titel:
|
|
Hallo Jan,
vielen Dank für deine Antwort.
Ich hatte den Status dieses Themas in "Rückfrage" geändert. Das hatte ich für übersichtlich genug gehalten.
Hm, ich wollte es bisher ehrlichgesagt vermeiden, sehr tief in die GUI Programmierung einzusteigen, weil ich bisher noch nie irgendetwas programmiert habe. Daher der Versuch mit assignin.
Die GUI ist auch nur dazu da, um eine grafische Oberfläche zu haben in der die Variablen mit den Startwerten belegt werden. Das ist die einzige Funktion und Bedeutung der GUI in diesem Fall. Die eigentliche Rechnung steht in .m Files die ausgeführt werden, wenn die Variablen ihre Werte haben.
Daher werde ich es wohl so lassen wie es ist und damit leben, dass ich die beiden Unterprogramme jeweils "manuell" aufrufen muss und es nicht mit einem Button einer GUI geht.
Trotzdem vielen Dank!
|
|
|
|
|
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.
|
|