Я предположил, что ваши функции Test1
и Test2
несколько бесконечны, поэтому я создал это как формат для моих Test1.py
и Test2.py
:
# Test1.py / Test2.py
import tkinter as tk
def func():
while True:
root = tk.Tk()
root.mainloop()
Теперь с вашим кодом я настоятельно рекомендовал бы отойти от вашего текущего формата и перейти к объектно-ориентированному программированию , так как это избавит вас от многих головных болей в будущем!
Вот код, который я написал, чтобы он работал :
import tkinter as tk
import tkinter.ttk as ttk
import Test1
import Test2
class reco_win:
def __init__(self, master):
self.master = master
self.master.geometry('375x100')
self.master.configure(background="LightBlue2")
style = ttk.Style()
style.configure('TButton', background = 'SeaGreen2', font =
('calibri', 20, 'bold'))
btn1 = ttk.Button(self.master, text = 'Tier Recon', command = lambda: self.master.after(1, self.load1))
btn1.grid(row = 1, column = 3, pady = 10, padx = 100)
btn2 = ttk.Button(self.master, text = 'View Recon', command =lambda: self.master.after(1, self.load1))
btn2.grid(row = 2, column = 3, pady = 10, padx = 100)
def load1(self):
Test1.func()
def load2(self):
Test2.func()
def main():
root = tk.Tk()
reco_win(root)
root.mainloop()
if __name__ == '__main__':
main()
Важный бит в этом коде:
self.master.after(1, self.load1)
Эта строка кода делает через 1 миллисекунду асинхронно запускает новый поток и выполняет функцию Test1.func()
.
Это означает, что вам не нужно беспокоиться о проблемах с управлением модулем многопоточности в python, и вместо этого вы можете работать над написанием большего количества кода!
Надеюсь, это поможет,
Джеймс
PS
Если вы используете окно tk.Tk()
в своем Test1/Test2.py
, вы можете вместо этого использовать окно tk.TopLevel
, которое позволит вам переписать этот код читать так:
import tkinter as tk
import tkinter.ttk as ttk
import Test1
import Test2
class reco_win:
def __init__(self, master):
self.master = master
self.master.geometry('375x100')
self.master.configure(background="LightBlue2")
style = ttk.Style()
style.configure('TButton', background = 'SeaGreen2', font =
('calibri', 20, 'bold'))
btn1 = ttk.Button(self.master, text = 'Tier Recon', command = self.load1)
btn1.grid(row = 1, column = 3, pady = 10, padx = 100)
btn2 = ttk.Button(self.master, text = 'View Recon', command =self.load2)
btn2.grid(row = 2, column = 3, pady = 10, padx = 100)
def load1(self):
top = tk.Toplevel()
tk.Label(top, text="Hello").grid(row=0, column=0)
def load2(self):
top2 = tk.Toplevel()
tk.Label(top2, text="Hello 2").grid(row=0, column=0)
def main():
root = tk.Tk()
reco_win(root)
root.mainloop()
if __name__ == '__main__':
main()