Verfasst am: 29.05.2012, 10:35
Titel: Input und Output Tab/Registerkarte
Hallo!
Ich würde gerne in meinem GUI oben zwei Registerkarten haben, durch die man zwischen "Input" und "Output" wechseln kann. Bei aktivem "Input" soll das GUI so angezeigt werden, wie es zur Zeit ist, bei aktivem "Output" soll erstmal der Einfachheit halber nur ein leeres Panel angezeigt werden.
1. Wenn ich ein Panel anlegen will, kommt der Fehler: "Width and Height must be >0". Was soll das? ...
2. Habe ich ein Panel angelegt (vor einer halben Stunde habe ich das noch geschafft) und auf "edit" klicke, öffnet sich GUIDE mit einem komplett schwarzen Hintergrund. Soll ich hier irgendwie spezifizieren, wei mein GUI bei dem aktiven Panel aussehen soll? Ich kann jedoch "nichts sehen"...
3. Die Panels sehen nicht wirklich schick aus. Zuerst einmal bräuchte ich eine Linie unter den Panels, die sich über das gesamte GUI horizontal erstreckt. Wie mache ich das?
Bin für jede Hilfe zu einem der Punkte dankbar,
Wimme
Was mich jedoch etwas verwirrt: Ich arbeite eigentlich mit GUIDE. Kann ich UIPANEL und UITAB auch innerhalb GUIDE verwenden? Wenn nicht, kann ich GUIDE irgendwie mit UIPANEL und UITAB im Code kombinieren?
GUIDE macht nichts magisches. Es erstellt ein FIG-File, welches eigentlich nur ein getarntes MAT-File ist, und setzt den dazugehörigen Code für die Callbacks in ein M-File. Wenn man das Design in GUIDE abgeschlossen hat, kann man das GUI also noch beliebig aufpeppen.
In den FileEchange-Seiten findet man ein paar Tools um das FIG-File in ausführbaren Code umzuwandeln, eines z.B. von Matt Fig.
Dies erlaubt zwar auch UITAB, UIPANEL und UITREE zu verwenden, allerdings ist es dann nicht mehr per GUIDE zu bearbeiten.
Ich verzichte grundsätzlich auf GUIDE, da ich Programme für Matlab 6.5 bis 2012 entwickle, was mit GUIDE schwierig ist.
hmm...ist weiß "natürlich" noch nicht, ob das Design meines GUIs abgeschlossen ist und würde mir daher eigentlich gerne die Möglichkeit offen halten, GUIDE weiter für das Design des GUIs zu verwenden.
Schade, dass ich dann uipanel etc nicht verwenden kann! Ich finde, MathWorks sollte diesbezüglich nachbessern!
Ich habe mir eine Lösung überlegt, aber die ist etwas umständlich...:
Ich könnte mir zwei Panel und zwei Buttons in GUIDE vernehmen und durch die Buttons die visibility property der Panels kontrollieren. Ich weiß aber nicht, ob ich die Buttons dann so designed kriege, dass die wirklich wie Tabs aussehen und zweitens habe ich in GUIDE dann zwei Panels übereinander liegen, was natürlich auch alles andere als schön ist!
Aber etwas anderes bleibt mir wohl nicht übrig, oder? Bzw. die einzige Alternative wäre dann, dass ich meine FIG-File in Code umwandel und dann ohne GUIDE weiter mache...
Das wird zwar irgendwie häßlich, aber etwas besseres habe ich noch nicht gefunden.
Eine Frage diesbezüglich hätte ich noch:
Ist es möglich bei einem Pushbutton den Rahmen dahingehend zu verändern, dass er unten keinen Rahmen hat, sondern nur links, rechts und oben?
Danke,
Wimme
_____________________
Habe leider nun noch ein anderes Problem. Ich habe also zwei Panels übereinander gelegt und versuche mit Hilfe der Buttons "Input_Tab" sowie "Output_Tab" deren visibility so zu steuern, dass die Panels sich wie zwei Registerkarten benehmen.
Das Ganze mache ich bisher so:
Code:
% --- Executes on button press in Input_Tab. function Input_Tab_Callback(hObject, eventdata, handles) % hObject handle to Input_Tab (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% tab for input has been called -> change appearance of tabs set(hObject,'FontWeight','bold');
set(hObject,'BackgroundColor',[0.941,0.941,0.941]);
set(handles.Output_Tab,'FontWeight','normal');
set(handles.Output_Tab,'BackgroundColor',[0.831,0.816,0.784]);
% make all other tab-panels invisible and this one visible set(handles.Output_Panel,'Visible','off');
set(handles.Input_Panel,'Visible','on');
% --- Executes on button press in Output_Tab. function Output_Tab_Callback(hObject, eventdata, handles) % hObject handle to Output_Tab (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% tab for output has been called -> change appearance of tabs set(hObject,'FontWeight','bold');
set(hObject,'BackgroundColor',[0.941,0.941,0.941]);
set(handles.Input_Tab,'FontWeight','normal');
set(handles.Input_Tab,'BackgroundColor',[0.831,0.816,0.784]);
% make all other tab-panels invisible and this one visible set(handles.Input_Panel,'Visible','off');
set(handles.Output_Panel,'Visible','on');
Leider funktioniert das nur, wenn das "Input_Panel" sichtbar sein soll. Das Output_Panel bleibt unsichtbar, auch wenn ich auf den Output_Tab-Button klicke.
Yair Altman hat beschrieben, wie man einen Button ganz ohne Rahmen erstellt (die Begriffe sollten für Google ausreichen).
Wenn Du wirklich einen halben Rahmen brauchst, kannst Du stattdessen ein Image nehmen, welches so aussieht wie ein Button. Dann kann ein Klicken über die ButtonDownFcn abgefragt werden statt über den Callback, das macht aber keinen großen Unterschied.
ich weiß jetzt, woran es liegt. Mein zweites Panel wird aus irgendeinem Grund ein "Kind" vom ersten Panel und bleibt daher auch immer invisible. Das kann ich im Object Browser sehen. Wie kann ich diese Eltern-Kind Beziehung ändern (verwende GUIDE)?
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
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.