Я бы, вероятно, использовал многопоточность и очередь, поскольку вы в основном пытаетесь запустить два элемента программы одновременно.
Примерно так будет работать:
Файл "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](https://i.stack.imgur.com/fRRau.png)