Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 MolecularLab
 Bioinformatica
 dialoghi in pymol
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

robertoV
Nuovo Arrivato



5 Messaggi

Inserito il - 29 dicembre 2010 : 23:57:00  Mostra Profilo  Visita l'Homepage di robertoV Invia a robertoV un Messaggio Privato  Rispondi Quotando
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  Mostra Profilo  Visita l'Homepage di dallolio_gm  Clicca per vedere l'indirizzo MSN di dallolio_gm Invia a dallolio_gm un Messaggio Privato  Rispondi Quotando
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! :-)
Torna all'inizio della Pagina

robertoV
Nuovo Arrivato



5 Messaggi

Inserito il - 30 dicembre 2010 : 22:40:21  Mostra Profilo  Visita l'Homepage di robertoV Invia a robertoV un Messaggio Privato  Rispondi Quotando
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.

Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 30 dicembre 2010 : 22:46:00  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Probabilmente devi far partire il main loop di Tk.

Guarda questo esempio (multilinguaggio):
http://www.tkdocs.com/tutorial/firstexample.html#design

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

robertoV
Nuovo Arrivato



5 Messaggi

Inserito il - 30 dicembre 2010 : 23:39:03  Mostra Profilo  Visita l'Homepage di robertoV Invia a robertoV un Messaggio Privato  Rispondi Quotando
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?
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina