Используя os.system()
, вы запускаете отдельную программу, которая не имеет доступа к данным, созданным в текущей программе. Поскольку вы импортируете getLogs
, вы должны поместить код в функцию, чтобы выполнить его без os.system()
getLogs.py
import tkinter as tk
tos = []
subjects = []
messages = []
def log_window():
#mainWind = tk.Tk()
mainWind = tk.Toplevel()
canvas = tk.Canvas(mainWind, width = 400, height = 600)
canvas.pack()
frame = tk.Frame(mainWind, bg = "gray")
frame.place(relx = 0, rely = 0, relwidth = 1, relheight = 1)
mailLogs = tk.Listbox(frame)
mailLogs.place(relx = 0.1, rely = 0.05, relwidth = 0.8, relheight = 0.9)
print(tos)
mails = {
"to:": tos,
"subject:": subjects,
"message:": messages
}
for i in range(0, len(tos)):
emailLogTitle = "{}: {} - {}".format(mails["to:"][i], mails["subject:"][i], mails["message:"][i])
mailLogs.insert('end', emailLogTitle)
#mainWind.mainloop()
И теперь вы можете выполнить его
def getEmailLogs():
gl.log_window()
и он будет иметь доступ к значениям в tos
Поскольку оба windows работают в одной и той же программе, поэтому секунда не нуждается в mainloop()
и она должна быть создана Toplevel()
, не Tk()
Кстати: composer добавлял только tos
, поэтому в более позднем словаре mail
не было ни тем, ни сообщений. Вы можете создать один список с письмами вместо отдельного списка для to
, subject
, message
mai.py
import tkinter as tk
import os
import getLogs as gl
# --- functions ---
def compose():
gl.tos.append("isybgf")
gl.subjects.append("isybgf")
gl.messages.append("isybgf")
# it could be better to keep it in one list ie.
# mails.append( {'to': "isybgf", 'subject': "isybgf", 'message': "isybgf" } )
def getEmailLogs():
gl.log_window()
# --- main ---
mainWin = tk.Tk()
canvas = tk.Canvas(mainWin, width=400, height=400)
canvas.pack()
frame = tk.Frame(mainWin, bg="gray")
frame.place(relx = 0, rely = 0, relwidth = 1, relheight = 1)
composeButton = tk.Button(frame, bg="blue", fg="white", text="COMPOSE", command=compose)
composeButton.place(relx=0.3, rely=0.2, relwidth=0.4, relheight=0.2)
logsButton = tk.Button(frame, bg="blue", fg="white", text="LOGS", command=getEmailLogs)
logsButton.place(relx=0.3, rely=0.5, relwidth=0.4, relheight=0.2)
mainWin.mainloop()
РЕДАКТИРОВАТЬ: Версия с другими изменениями - сокращены до важных элементов. Я держу письма в одном списке mails
в основной программе и отправляю в журнал в качестве аргумента.
main.py
import tkinter as tk
import getLogs as gl
# --- functions ---
def compose():
mails.append( {'to': "user@domain.com", 'subject': "Read it", 'message': "Hello World!"} )
def get_email_logs():
gl.log_window(mails)
# --- main --- (lower_case_names)
mails = []
main_window = tk.Tk()
compose_button = tk.Button(main_window, text="COMPOSE", command=compose)
compose_button.pack(fill='x')
logs_button = tk.Button(main_window, text="LOGS", command=get_email_logs)
logs_button.pack(fill='x')
close_button = tk.Button(main_window, text="CLOSE", command=main_window.destroy)
close_button.pack(fill='x')
main_window.mainloop()
getLogs.py
import tkinter as tk
def log_window(mails):
window = tk.Toplevel()
mail_logs = tk.Listbox(window)
mail_logs.pack(fill='both', expand=True)
close_button = tk.Button(window, text="CLOSE", command=window.destroy)
close_button.pack(fill='x')
for item in mails:
mail_logs.insert('end', "{}: {} - {}".format( item["to"], item["subject"], item["message"] ))