web-dev-qa-db-fra.com

Python 3.2 script ne fonctionne pas et / ou importation de tkinter lorsqu'il est exécuté à partir du bureau

Cela me laisse vraiment perplexe, mais la réponse est probablement simple et ne le voit pas:

J'ai une série de modules python qui fonctionnent correctement à partir de l'interpréteur python, mais rien ne se produit lors de l'exécution à partir d'une situation d'interface graphique. J'ai essayé de créer un fichier .desktop, d'ajouter des shebangs, de modifier les autorisations en 777 et de renommer .pyw pour tous les modules. Un seul module de test fonctionne bien tout seul, donc je sais que ce n'est pas une faute de frappe.

Si je clique sur le fichier .pyw du module principal et clique sur "Exécuter" dans le dialogue système, rien ne se passe. De même, dans le fichier .py (et dans le menu .desktop via), rien ne se passe. Voici le début de mon code:

#!/usr/bin/python3

import tkinter as tk, imp, sys


root = tk.Tk()
msg = tk.messagebox
sdg = tk.simpledialog

import capitaliser_cfg as cfg, fileio as io
imp.reload(cfg) ; imp.reload(io) 

### GO AND GET COUNTY LIST ####
# Nb: attach to config for simplicity
cfg.counties = io.getfilelist("counties.txt", "London")

if not type(cfg.counties)==list:
    k = msg.showerror(cfg.version, cfg.counties)
    root.destroy()
    root.mainloop()

### GO AND GET DICTIONARY ####
cfg.tempdict = [[],[],[]]
cfg.spelldict = io.getdictionary("addressdict.txt","roda","Road")
if not type(cfg.spelldict)==dict:
    k = msg.showerror(cfg.version, cfg.spelldict)
    root.destroy()
    root.mainloop()


import thinbutton as tb, labelradio as lr, fieldblock as fb, bigbutton as bb 
import textblock as tx, padding as pd, widget_tools as wt
import capitaliser_mth as mth
import capitaliser_bnd as bnd


imp.reload(tb) ; imp.reload(lr) ; imp.reload(fb) ; imp.reload(bb)
imp.reload(tx) ; imp.reload(pd) ; imp.reload(wt) ;
imp.reload(mth)
imp.reload(bnd)

Si je put k = msg.showerror("xxxx","yyyy") après la ligne sdg = tk.simpledialog, rien ne se passe, ce qui me porte à croire que tkinter ne se charge pas pour une raison quelconque.

Des idées quelqu'un?

1
Corvus

Solution aimablement fournie sur le tableau Stackoverflow par Furas:

Pour Python 2, essayez:

import tkMessageBox
import tkSimpleDialog

msg = tkMessageBox
sdg = tkSimpleDialog

ou plus simple:

import tkMessageBox as msg
import tkSimpleDialog as sdk

Pour Python 3, essayez:

from tkinter import messagebox
from tkinter import simpledialog

msg = messagebox
sdg = simpledialog

ou plus simple:

from tkinter import messagebox as msg
from tkinter import simpledialog as sdg

* * J'ai utilisé les 2 dernières lignes et cela fonctionne parfaitement maintenant ..

1
Corvus