2016-06-17 11 views
0

Ich möchte Bilder und Videos in Scilab mit einer in Tcl/Tk erstellten GUI anzeigen.Tcl Tk zum Anzeigen von Bildern in Scilab

Scilab unterstützt Tcl/Tk: - https://help.scilab.org/docs/6.0.0/en_US/section_a10b99d9dda4c3d65d29c2a48e58fd88.html.

Ich habe ein tcl-Skript erstellt, das ein Bild anzeigt, wenn es vom Terminal ausgeführt wird.

Wenn ich jedoch die folgende .SCI-Datei in scilab schreibe, wird sie erfolgreich ausgeführt, aber es wird kein Bildfenster angezeigt.

function sampletry() 
    TCL_EvalFile(<path_to_tcl_file>); 
endfunction 

Ich weiß, dass der Code erfolgreich ausgeführt, weil, wenn ich die gleiche Funktion wieder in scilab ausführen, ich einen Fehler erhalten, dass das Etikett .mylabel existiert bereits in dem übergeordneten Fenster.

Gibt es eine Möglichkeit, dass ich Bilder/Videos in Scilab mit dieser Methode oder einer anderen Methode in Scilab anzeigen kann? Ich benutze OpenCV, um das Bild zu lesen und es durch Scilab Api in einer Liste zu Scilab zurückzusenden.

Antwort

0

Das Problem besteht darin, dass Sie nicht die Ereignisschleife von Ihrem Scilab-Code bedienen, ohne die die Flut von Nachrichten vom Betriebssystem, die tatsächlich das Fenster auf dem Bildschirm setzen, nie durchkommen und behandelt werden. Vorausgesetzt, dass Sie Ihren Code wollen für die Betrachtung zu stoppen und zu warten, bis getan werden, können Sie nur den Code Tcl/Tk ändern sein:

image create photo img -file <filepath> 
if {![winfo exists .mylabel]} { 
    pack [label .mylabel] 
} 
.mylabel configure -image img 
wm deiconify . 
# Wait for the user to ask for the window to be closed 
wm protocol . WM_DELETE_WINDOW {set done 1} 
vwait done 
# Process the close immediately 
wm withdraw . 
update 

Es gibt nichts Besonderes an der done variabel. Wir warten nur auf die Einstellung im Rückruf. Ich habe ein wenig zusätzlichen Code hinzugefügt, um es Ihnen zu ermöglichen, dies zweimal aufzurufen (d. H. Das Widget bedingungsbedingt zu erstellen, wobei sichergestellt wird, dass . angezeigt wird und dann am Ende verborgen wird).

Die einfachste Technik, wenn Sie nicht wollen, alles im gleichen Prozess zu halten, ist Ihre Original Skript als eigenständiges Programm ausführen kann, effektiv zu tun:

wish <path_to_tcl_file> 

Ich weiß nicht, was die Der einfachste Weg, dies von Scilab zu tun ist.

+0

Was ist, wenn ich nicht warten möchte, bis die Anzeige fertig ist? Ich möchte, dass das Steuerelement zu Scilab zurückkehrt, sobald das Fenster angezeigt wird, ohne darauf zu warten, dass es geschlossen wird. –

+0

bitte hilf mir dabei. –

Verwandte Themen