Скрипт Python 3.2 не работает и / или импортирует tkinter при запуске с рабочего стола

Я действительно озадачен этим, но ответ, вероятно, довольно прост и просто не вижу его:

У меня есть ряд модулей Python, которые прекрасно работают изнутри интерпретатора Python, но ничего происходит при запуске из ситуации с графическим интерфейсом. Я попытался создать файл .desktop, добавить shebangs, изменить разрешения на 777 и переименовать в .pyw для всех модулей. Один тестовый модуль сам по себе работает нормально, поэтому я знаю, что это не опечатка.

Если я щелкну по файлу основного модуля .pyw и нажму «Выполнить» в системном диалоге, ничего не произойдет вообще. Аналогично файлу .py.desktop через меню) ничего не происходит. Вот начало моего кода:

#!/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)

Если я put k = msg.showerror("xxxx","yyyy") после строки sdg = tk.simpledialog, все равно ничего не происходит, что наводит меня на мысль, что tkinter не загружается для некоторых причина.

Есть какие-нибудь идеи?

1
задан 20 November 2013 в 18:21

1 ответ

Решение любезно предоставлено на плате Stackoverflow Furas:

Для Python 2 попробуйте:

import tkMessageBox
import tkSimpleDialog

msg = tkMessageBox
sdg = tkSimpleDialog

или проще:

import tkMessageBox as msg
import tkSimpleDialog as sdk

Для Python 3 попробуйте:

from tkinter import messagebox
from tkinter import simpledialog

msg = messagebox
sdg = simpledialog

или проще:

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

* * Я использовал последние 2 строки, и теперь он отлично работает ..

0
ответ дан 20 November 2013 в 18:21

Другие вопросы по тегам:

Похожие вопросы: