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 immer wieder aktualisiert nicht in den Vordergrund

 

eselhund
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2009, 14:58     Titel: GUI immer wieder aktualisiert nicht in den Vordergrund
  Antworten mit Zitat      
Hallo,

ich habe eine GUI mit einem immer wieder aktualisiertem Image in einem Axes. Dieses Fenster kommt bei jeder Aktualisierung des Images in den Vordergrund...
Kann man dieses Verhalten irgendwie unterdrücken?
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.11.2009, 15:00     Titel:
  Antworten mit Zitat      
Hallo, in dem du statt

Code:

figure(hier_figure_handle)
 


Code:

set(0,'CurrentFigure', hier_figure_handle)
 


benutzt
Private Nachricht senden Benutzer-Profile anzeigen
 
eselhund
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2009, 15:07     Titel:
  Antworten mit Zitat      
Danker erstmal für die superschnelle Antwort.

Allerdings weiß ich nicht was du damit genau meinst...

Kannst du das vielleicht an einem Beispiel zeigen?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.11.2009, 15:25     Titel:
  Antworten mit Zitat      
Ehrlich gesagt dieses Thema wurde schon dutzende Male hier diskutiert.
Bitte auch Suche benutzen

so bleibt das aktive figure im Hintergrund:
Code:

h1= figure()
set(h1,'Units','normalized')
set(h1, 'Position', [0.195  0.561   0.292   0.35])
h2= figure()
set(h2,'Units','normalized')
set(h2, 'Position', [0.573  0.558  0.292   0.35])

for k=1:10
  set(0,'CurrentFigure',h1)
  plot(rand(1,10),rand(1,10))
  set(0,'CurrentFigure',h2)
  imagesc(rand(100,100,3))
 pause(1)
end
 



so kommst es immer in der Vordergrund
Code:

h1= figure()
set(h1,'Units','normalized')
set(h1, 'Position', [0.195  0.561   0.292   0.35])
h2= figure()
set(h2,'Units','normalized')
set(h2, 'Position', [0.573  0.558  0.292   0.35])

for k=1:10
  figure(h1)
  plot(rand(1,10),rand(1,10))
  figure(h2)
  imagesc(rand(100,100,3))
 pause(1)
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
eselhund
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2009, 15:44     Titel:
  Antworten mit Zitat      
Also ich habe ziemlich viel gesucht, nur ohne Erfolg.

Allerdings habe ich ja ein GUI, da gibt es ja keine figure's mehr...

Sorry, aber ich weiß immer noch nicht was ich ändern sollte, damit das GUI nicht immer im Vordergrund ist.

Ich habe es nun mal mit
Code:
set(0,'image',angezeigtes_bild);
versucht. Allerdings funktioniert dies nicht...

Vielleicht verstehst du mich auch falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
eselhund
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 09:34     Titel:
  Antworten mit Zitat      
...Hat keiner eine Idee?


Nochmal zur Erklärung meines Problems:
Ich habe eine GUI mit einer Anzeige eines Bildes in dieser GUI. Also im GUI ist ein entsprechendes "AXES" definiert.
Im dazugehörigen M-File habe ich eine Schleife in der dieses Bild mit IMAGE() immer wieder aktualisiert wird.

Allerdings bekommt das GUI Fenster durch jedes Aktualisieren den Fokus und dies möchte ich unterbinden!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.11.2009, 13:50     Titel:
  Antworten mit Zitat      
Hallo
ich habe auch das Gefühl, dass wir aneinander vorbeireden.

In diesem Fall spielt keine Rolle, wie du das Fenster erzeugt hast.
Ich habe dir 2 Wege gezeigt,
wie das Fokus an Fenster überhaupt gesetzt wird.
Code:

% Enweder so,
% wobei das Fenster immer in der Vordergrund Springt.
figure(hier_handle_deines_Fensters)
% oder so
% wobei das Fenster im Hintergrund bleibt.
% der Befehl  muss genau so heißen + handle von deinem Fenster
% wenn du über GUIDE gemacht hast
% dann ist in Struct handles zu finden
set(0,'CurrentFigure', hier_handle_deines_Fensters)
 


Apropos wenn du axes-Befehl verwendest,
dann hat es auch Effekt, dass Fenster springen
Code:

h1 = figure
a1= axes()
h2 = figure
a2 =axes()

% besser  zu verwenden

set(h1, 'CurrentAxes', a1)
set(h2, 'CurrentAxes', a2)

% statt
axes(a1);
axes(a2);

 
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 12.11.2009, 14:30     Titel:
  Antworten mit Zitat      
Hallo eselhund,

nur zur Klarstellung: Auch ein GUI ist immer eine figure, in der dann die verschiedenen Objekte (also axes, uicontrols usw.) eingebettet sind. Du musst Dir also "nur" den Handle dieser figure besorgen. Das hat denny genauso geschrieben...

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
eselhund
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 16:47     Titel:
  Antworten mit Zitat      
Sorry, ich kann mir das noch 100 mal durchlesen aber mit meinen Erfahrungen in Matlab hat das so kein Sinn!!!

Ich kapier nicht was du mir sagen willst!!!!

Ich hab eine Funktion (ein Button) in welcher eine schleife ist die im GUI immer wieder ein Bild aktualisiert...

Wo soll ich denn da nun was ändern?!



Tut mir ja leider aber ich kann das so einfach nicht verstehen... Da fehlt mir zu viel an Wissen! Und langsam nervt es mich auch, dass ich für so eine banale Funktion so viel Zeit investieren muss...
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.11.2009, 16:59     Titel:
  Antworten mit Zitat      
Poste doch deine Callback Funktion.
Private Nachricht senden Benutzer-Profile anzeigen
 
eselhund
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 17:12     Titel:
  Antworten mit Zitat      
Ich kürze sie mal auf die relevanten Teile raus...

Code:

function start_Callback(hObject, eventdata, handles)
% ...Initialisierung und paar Abfragen...
while endlosschleife
% ...Berechnungen...
axes(handles.Anzeige);
image(Bild);
end
 


Da ist natürlich noch viel drum herum, aber es geht eigentlich nur um die Darstellung des Bildes im GUI...
Im GUI hat das Axes den Namen "Anzeige"

Reich dir das an Infos oder brauchst du noch mehr?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.11.2009, 17:48     Titel:
  Antworten mit Zitat      
Hallo,
also ist etwas klarer, bei dir wird der Fokus über axes gesetzt
ersetze es durch set(GUI_Handle,'CurrentAxes', Axes_Handle)
Code:

function start_Callback(hObject, eventdata, handles)
% ...Initialisierung und paar Abfragen...
while endlosschleife
% ...Berechnungen...
% an dieser Stelle passiert dieses Aufspingen des Fensters
% also axes(handles.Anzeige);  
% durch set(GUI_Handle,'CurrentAxes', Axes_Handle) ersetzen

set(handles.GUI_Tag, 'CurrentAxes', handles.Anzeige);
image(Bild);
end
 



Bei handles.GUI_Tag sollst richtigen Namen des Tag rausfinden, welches handle deines GUI enthält
Private Nachricht senden Benutzer-Profile anzeigen
 
eselhund
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 18:01     Titel:
  Antworten mit Zitat      
Ich bin mir jetzt nicht sicher ob ich den "Tag" des GUI richtig heraus gefunden habe. Ich habe mittels GUIDE rechtsklick auf ein leeres Feld und dann Property Inspector. Den "Tag" dort habe ich dann folgendermaßen eingetragen:
Code:
set(handles.figure1, 'CurrentAxes', handles.Anzeige);

Allerdings sehe ich nun nur noch ein weißes Bild...
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.11.2009, 18:18     Titel:
  Antworten mit Zitat      
Denke schon, dass das der Richtige ist.
kommen Irgendwelche Fehlermeldungen?

Versuch drawnow-Befehl hinter der image-Befehl zu setzen.
Code:

set(handles.GUI_Tag, 'CurrentAxes', handles.Anzeige);
image(Bild);
drawnow;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
eselhund
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 20.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 18:26     Titel:
  Antworten mit Zitat      
Hey wir sind ein Stück weiter Smile

Mittels drawnow kann ich das Bild sehen, allerdings gibt es noch diverse Linien auf dem Bild, welche nun erst nach dem "stop" betätigen zu sehen sind und nicht wie zuvor live...

Wenn ich drawnow auch hinter die lines setze flimmern diese aber sehr unschön... Kann man diese Eigenschaft nicht irgendwie allgemein vergeben?

EDIT

Hab das drawnow an's Ende nach allen Berechnungen gesetzt. Nun funktioniert es einwandfrei!!

VIELEN DANK für die Geduld mit mir Smile
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 - 2024 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.