Quanto è utile/interessante questa discussione:
Autore |
Discussione |
|
robertoV
Nuovo Arrivato
5 Messaggi |
Inserito il - 29 dicembre 2010 : 23:57:00
|
Ciao a tutti, non riesco ad utilizzare le finestre di dialogo come tkMessageBox all'interno di pymol. Ne avrei bisogno all'interno di codice python ma per descrivere e riprodurre semplicemente il problema mi basta digitare dalla riga di comando di pymol le due istruzioni
import tkMessageBox tkMessageBox.showinfo('title', 'msg')
Alla seconda istruzione pymol si blocca.
Sto muovendo i primi passi in pymol ed in python. Non conosco abbastanza entrambi ed in particolare non conosco la libreria tk.
Qualcuno ha idea del tipo di problema? Può suggerirmi una soluzione? Grazie.
|
|
|
dallolio_gm
Moderatore
Prov.: Bo!
Città: Barcelona/Bologna
2445 Messaggi |
Inserito il - 30 dicembre 2010 : 13:10:21
|
Non ho molta esperienza con pymol e tk, però provo ad aiutarti.
Se ci guardi bene, pymol non è realmente bloccato. Se guardi alle altre applicazioni aperte, ci dovrebbe essere una finestra aperta da tk: chiudila e l'interprete python ricomincerà ad essere interattivo. Il problema è che l'interprete python normale supporta solo un unico processo (thread) alla volta: non può eseguire due operazioni contemporaneamente, quindi quando avvii una finestra con showinfo(), l'interprete si blocca ed aspetta l'input sulla finestra. Se ci fai caso, questo è il comportamento normale di molti altri programmi: quando si apre una finestra di dialogo, il programma che l'ha aperta si blocca, e non è possibile usarlo finchè non viene chiusa la finestra di dialogo.
Se vuoi creare una finestra di dialogo complessa, la devi definire prima e associare delle funzioni ad ogni tasto. Per esempio, definire la funzione che deve essere eseguita quando si clicca su OK, o su Cancella. Questo è il motivo per cui, per definire una interfaccia grafica, si preferisce utilizzare la programmazione ad oggetti. Devi creare una classe derivata da tkMessageBox e personalizzarla: se cerchi su internet, ci sono tanti esempi e tutorial.
Se hai bisogno di fare esperimenti con un interprete python capace di eseguire piu' processi contemporaneamente puoi provare ipython, con l'opzione -tk. |
Il mio blog di bioinformatics (inglese): BioinfoBlog Sono un po' lento a rispondere, posso tardare anche qualche giorno... ma abbiate fede! :-) |
|
|
robertoV
Nuovo Arrivato
5 Messaggi |
Inserito il - 30 dicembre 2010 : 22:40:21
|
Ciao dallolio_gm, grazie della risposta.
Il fatto è che la finestra di dialogo non compare affatto. Bisogna forse renderla visibile con una ulteriore istruzione?
Potresti provare a digitare le due istruzioni
import tkMessageBox tkMessageBox.showinfo('title', 'msg')
dalla consolle di pymol? La finestra di dialogo compare?
Utilizzo la versione di valutazione 1.1 di pymol per win32 scaricata da download.cnet.com con un sistema operativo windows 7 a 64 bit. Ho provato a lanciare pymol in modalità windows XP service pack 2 e 3 ma senza risultato.
|
|
|
chick80
Moderatore
Città: Edinburgh
11491 Messaggi |
|
robertoV
Nuovo Arrivato
5 Messaggi |
Inserito il - 30 dicembre 2010 : 23:39:03
|
Grazie chick80, ho letto l'esempio ma l'uso delle finestre di dialogo come tkMessageBox dovrebbe essere più semplice.
Dalla consolle python 2.6 (qui pymol non c'entra) con la sequenza di istruzioni:
import tkMessageBox tkMessageBox.showinfo("my dialog title", "my dialog message")
visualizzo la finestra di dialogo ma quando clicco OK compare un'altra finestra che non riesco più a chiudere e la consolle python si blocca.
Se invece dalla stessa consolle (python 2.6) eseguo le istruzioni (prese da un esempio):
import Tkinter, tkMessageBox root = Tkinter.Tk() root.withdraw() tkMessageBox.showinfo("my dialog title", "my dialog message")
riesco a visualizzare, utilizzare e chiudere la finestra di dialogo senza problemi.
Ho provato allora ad utilizzare la sequenza di istruzioni dalla consolle di pymol ma qui non funziona. Alla terza istruzione
root.withdraw()
pymol si blocca.
Qualcuno riesce a spiegare questi comportamenti? |
|
|
|
Discussione |
|
|
|
Quanto è utile/interessante questa discussione:
MolecularLab.it |
© 2003-18 MolecularLab.it |
|
|
|