возвращаемое значение модуля python tkinter - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу использовать значение, возвращаемое модулем tkinter в другом модуле:

myInputField.py
from tkinter import Tk, Label, Entry, Button, Frame, mainloop, messagebox
master = Tk()

def result():
    a = e.get()
    return a

Label(master, text="Your Answer", font='Verdana 10').grid(row=0, column=1, sticky='w')
e = Entry(master, font='Verdana 12', width=120)
f = Frame(master)
f.grid(row=2, column=1)
e.grid(row=1, column=1)
Button(f, text='OK', command=result).pack(side='left')
Button(f, text='Quit', command=master.destroy).pack(side='left')
e.focus_set()
mainloop()

Вызывается в другом модуле:

import myInputField
print(a)

Пожалуйста, помогите, заранее спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018

Я бы, вероятно, использовал многопоточность и очередь, поскольку вы в основном пытаетесь запустить два элемента программы одновременно.

Примерно так будет работать:

Файл "Test.py":

import threading, queue, myInputField

class test():
    def __init__(self):
        q = queue.Queue()

        t = threading.Thread(target = myInputField.popup, args = (q,))
        t.start()

        while t.is_alive():
            print(q.get()) # Or put it in a variable, whatever is needed.
test()

Файл "myInputField.py":

from tkinter import Tk, Label, Entry, Button, Frame, mainloop, messagebox

class popup():
    def __init__(self, q):
        self.q = q

        master = Tk()

        Label(master, text="Your Answer", font='Verdana 10').grid(row=0, column=1, sticky='w')
        e = Entry(master, font='Verdana 12', width=120)
        f = Frame(master)
        f.grid(row=2, column=1)
        e.grid(row=1, column=1)
        Button(f, text='OK', command= lambda: self.result(e.get())).pack(side='left')
        Button(f, text='Quit', command=master.destroy).pack(side='left')
        e.focus_set()
        mainloop()

    def result(self, r):
        self.q.put(r)

Использует очередь для передачи информации из одного модуля в другой.

Настройка должна быть:

Папка

__init__.py (пустой файл python, указывает, что эта папка содержит модули python)
myInputField.py
test.py

Затем запустите test.py enter image description here

...