从TKinter

时间:2017-04-25 13:32:16

标签: python python-3.x tkinter

我需要从另一个档案interface.py调用main.py(tkinter视图)中的方法。 在main.py我有一个无限循环,只有当我点击按钮botao时才需要激活,并且在主循环期间,interface.pyfillList())中的方法将在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的初学者,请让我更容易

0 个答案:

没有答案