Как запустить tkmessagebox из класса, отличного от основного графического интерфейса?

У меня есть графический интерфейс класса, где я настраиваю все свои виджеты и т. д. для своего графического интерфейса. Я использую многопоточность, чтобы запустить процесс из другого класса. Это работает нормально, пока этот другой процесс просто выполняется. В некоторых случаях мне нужно дождаться ввода данных пользователем. Я использовал для этого tkmessagebox, но окно сообщений не появляется и блокирует графический интерфейс без каких-либо сообщений об ошибках. (Работает, когда не запускается через GUI).

Вот часть моего кода:

часть графического интерфейса

from Tkinter import *
import Tkinter as ttk
import ttk
from tkMessageBox import *
from GUI_reader import Commandline_Reader
import threading
import Queue

class GUI:
    def __init__(self,master):
        self.master = master
        self.argString='ds'
        ## self.workerThread()
        button = ttk.Button(text='start', command=self.go).grid()
        ...
    def go(self):
        self.thread = threading.Thread(target=self.workerThread)
        self.thread.daemon = True
        self.thread.start()
        ...
    def workerThread(self):
        ...
        reader = Commandline_Reader(master, self.argString)
        if reader.connect():
            print 'success'
            reader.run()
            print 'success'

if __name__ == '__main__':
    root = Tk()
    client = GUI(root)
    root.mainloop()

класс commandline_reader:

import tkMessageBox
...

class Commandline_Reader:

    def __init__(self, master, argString='')
        self.master = master
        ...

    def connect(self)
        ...

    def run(self):
        ...
        tkMessageBox.askokcancel('Calibration', 'Hit ok to start calibration', parent= self.master)
        ...

if __name__ == '__main__':
    reader = Commandline_Reader(self,master)
    if not reader.connect():
        exit(-1)
    if not reader.run():
        exit(-2)

person user3197620    schedule 25.03.2014    source источник
comment
когда окно сообщения не появляется , как оно блокирует графический интерфейс? и что вы подразумеваете под заблокировать здесь?   -  person Alok    schedule 25.03.2014
comment
процесс из Commandline_Reader прерывается в точке, где должно появиться окно сообщения, а главное окно GUI зависает, как будто оно чего-то ждет.   -  person user3197620    schedule 25.03.2014
comment
попробуйте распечатать что-нибудь, чтобы увидеть, доходит ли он до метода run()   -  person Alok    schedule 25.03.2014
comment
Да, я что-то напечатал прямо перед командой messagebox.   -  person user3197620    schedule 25.03.2014
comment
Я использовал фиктивные значения, и он отлично работает в моей системе ... есть ли какие-либо ошибки, которые вы получаете?   -  person Alok    schedule 25.03.2014
comment
Нет, не ошибка! Но когда я печатаю self.master в методе run(), он печатает пустую строку. Нужно ли давать мастер в каждом методе, а не только в инит?? Ах нет, self.master не может быть напечатан таким образом, я думаю...   -  person user3197620    schedule 25.03.2014
comment
и зачем вам печатать self.master? просто напечатайте любую строку, например привет, успех или что-то в этом роде   -  person Alok    schedule 25.03.2014
comment
;-) ты прав. Но в любом случае, я не получаю никакой ошибки...   -  person user3197620    schedule 25.03.2014
comment
хорошо это & это это то, что я пробовал, и это сработало отлично   -  person Alok    schedule 25.03.2014
comment
Это работает и в моей системе... Я попытаюсь выяснить, что еще может ее беспокоить. Спасибо за вашу помощь!   -  person user3197620    schedule 25.03.2014
comment
Хорошо, проблема в том, что в классе GUI я импортирую:   -  person user3197620    schedule 25.03.2014
comment
Так теперь нормально работает?   -  person Alok    schedule 25.03.2014
comment
Импорт Tkinter *, импорт Tkinter как ttk, импорт ttk. Графический интерфейс работает только при импорте в этом порядке, в то время как tkMessageBox работает только при импорте как: импортировать ttk, импортировать из Tkinter *, импортировать Tkinter как ttk. Любые предложения, как это исправить?   -  person user3197620    schedule 25.03.2014
comment
просто сделайте from Tkinter import Tk и import ttk . я думаю, что это должно работать нормально   -  person Alok    schedule 25.03.2014
comment
'из импорта Tkinter *, импортировать Tkinter как ttk, import ttk работает (с окном сообщений), когда я запускаю рабочий поток из графического интерфейса init (self.workerThread()), но не при запуске в def go() с self.thread = threading.Thread(target= self.workerThread) и self.thread.start()   -  person user3197620    schedule 25.03.2014
comment
но в этом случае метод run() запускается без появления графического интерфейса   -  person user3197620    schedule 25.03.2014
comment
Вы можете обновить свой вопрос с этим? это слишком сложно понять здесь, в этом комментарии   -  person Alok    schedule 25.03.2014
comment
я запускал его в режиме отладки, и он говорил ожидание сети. Извините, но у меня не получается :|   -  person Alok    schedule 26.03.2014
comment
Спасибо за ваши усилия. Я обнаружил: stackoverflow.com/questions/7014984 / говорит, что это потому, что tkinter не является потокобезопасным. Я попробую создать свой собственный ящик сообщений с меткой и двумя кнопками, может быть, он не застревает таким образом.   -  person user3197620    schedule 26.03.2014