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

У меня есть класс GUI, где я настраивал все свои виджеты и т. Д. Для моего GUI. Я использую многопоточность, чтобы запустить процесс из другого класса. Это работает нормально, пока другой процесс просто проходит. В некоторых случаях мне нужно дождаться продолжения ввода пользователя. Я использовал 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)

0 ответов

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