我需要从另一个档案interface.py
调用main.py
(tkinter视图)中的方法。
在main.py
我有一个无限循环,只有当我点击按钮botao
时才需要激活,并且在主循环期间,interface.py
(fillList()
)中的方法将在tkinter视图上更新列表框,需要在main.py
的每个循环中调用。
代码:
main.py
。
class Main():
def iniciaServico():
import interface
count = 0
errorList = []
msg = ""
print("Iniciando WebService")
while(count < 1):
for file in glob.glob(diretorioIn +'*.XML'):
if not Common.contain_palavra(errorList, file.replace(diretorioIn, "")):
try:
arquivo = minidom.parse(file)
arquivo = arquivo.toxml()
arquivo = Common.removeClausulaXML(arquivo)
arquivoProcessado = file.replace(diretorioIn, "")
#print(arquivo)
print(file)
client = Client('https://www.test.com.br/teste/webservice/test.php?wsdl')
result = client.service.AdicionarLocalizacoes(arquivo, hashsinergia)
msg = "Arquivo concluído: " + arquivoProcessado
interface.fillList()
print(msg)
print(result.AdicionarLocalizacoesReport._value_1)
Common.gera_arquivo_retorno(diretorioOut, arquivoProcessado,
result.AdicionarLocalizacoesReport._value_1)
Common.gera_log(diretorioIn, arquivoProcessado, "Processado")
os.remove(file)
except BaseException as ex:
msg = arquivoProcessado + " - Erro: " + str(ex)
interface.fillList()
if Common.contain_palavra(str(ex), "ssl") is False:
errorList.append(arquivoProcessado)
Common.gera_error_log(diretorioErro, arquivoProcessado, str(ex))
Common.gera_log(diretorioIn, arquivoProcessado + " - Erro: " + str(ex), "Não-Processado")
print("Nenhum arquivo encontrado. Reprocessando WebService")
interface.py
from tkinter import *
from main import *
from common import *
import configparser
try:
from PIL import ImageTk, Image #pip install image
except ImportError as ex:
from subprocess import run
run("pip install image", shell=True, check=True) #roda o Prompt em background e executa o comando.
ligado = True
primaryColor = "black"
secundaryColor = "orange"
cfg = configparser.ConfigParser()
cfg.read('ws.ini')
_diretorioIn = cfg.get('DEFAULT', 'diretorioin')
_diretorioOut = cfg.get('DEFAULT', 'diretorioout')
_hash = cfg.get('DEFAULT', 'hash')
def fillList():
lista = Common.le_arquivo(diretorioIn)
for item in lista:
log.insert(END, item)
def ligaDesliga():
global ligado
if ligado:
ligado = False
#botao.configure(text="Desliga")
#log.configure(text="Servidor Rodando")
Main.iniciaServico()
else:
ligado = True
#botao.configure(text="Liga")
#log.config(text="Servidor Parado")
def configuraIni(input_in, input_out, input_hash):
diretorioIn = input_in.get()
diretorioOut = input_out.get()
hashsinergia = input_hash.get()
cfg.set('DEFAULT', 'diretorioin', diretorioIn)
cfg.set('DEFAULT', 'diretorioout', diretorioOut)
cfg.set('DEFAULT', 'hash', hashsinergia)
with open('ws.ini', 'w') as configfile:
cfg.write(configfile)
root = Tk()
logo = ImageTk.PhotoImage(Image.open("img/logo.png"))
root.title("Web Service Gera Sinergia")
root.geometry("600x400")
root.configure(bg=primaryColor)
# CRIAÇÃO FRAMES
top = Frame(bg=primaryColor)
top.pack(pady=(15, 10))
middle = Frame(height=10, bg=primaryColor)
middle.pack(fill="x")
bottom = Frame(bg=primaryColor)
bottom.pack(pady=15)
img = Label(top, image=logo, bg=primaryColor)
img.pack(pady=(0, 15))
# CRIAÇÃO INPUT'S E TXTS
txt_hash = Label(top, text="Hash", bg=primaryColor, fg=secundaryColor)
txt_hash.pack(side=LEFT)
input_hash = Entry(top)
input_hash.insert(0, _hash)
input_hash.pack(side=LEFT)
txt_in = Label(top, text="Entrada", bg=primaryColor, fg=secundaryColor)
txt_in.pack(side=LEFT, padx=(5, 0))
input_in = Entry(top)
input_in.insert(0, _diretorioIn)
input_in.pack(side=LEFT)
txt_out = Label(top, text="Saida", bg=primaryColor, fg=secundaryColor)
txt_out.pack(side=LEFT, padx=(5, 0))
input_out = Entry(top)
input_out.insert(0, _diretorioOut)
input_out.pack(side=LEFT)
log = Listbox(middle, bg="white", fg="black", height=10, font=1)
log.pack(fill="x", padx=(20, 20))
scrollbar = Scrollbar(log, orient=VERTICAL)
log.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=log.yview)
botao = Button(bottom, text="Liga", bg=secundaryColor, width=30, height=2, command=ligaDesliga)
botao.pack(side=LEFT)
botaoSalvar = Button(bottom, text="Salvar", bg=secundaryColor, width=10, height= 2, command= lambda: configuraIni(input_in, input_out, input_hash))
botaoSalvar.pack(side=RIGHT, padx=(5, 0))
mainloop()
Common.le_arquivo()
def le_arquivo(path):
"Le o arquivo log de texto e retorna seu conteudo em uma lista."
try:
import time
hoje = "%s" % (time.strftime("%d_%m_%Y"))
arquivo = open(path + "Log.%s.txt" % (hoje), "a")
list_txt = arquivo.readlines()
arquivo.close()
return list_txt
except BaseException as ex:
return ["error"]
问题:
当我运行interface.py
并单击botao
以运行Main.iniciaServico()
时,会出现一个黑色窗口(不是提示),只有当我关闭此窗口时,才会显示{{1}中的循环开始。
我接受所有可以改善我的代码的建议...... 我是python的初学者,请让我更容易