Simões Lopes Posted April 30, 2018 at 02:43 PM Report #610385 Posted April 30, 2018 at 02:43 PM (edited) Agradecia que me indicassem qual o erro neste programa que não efetua o cálculo. Consigo executar o programa sem a interface tkinter e dá o resultado correto. Obrigado pela ajuda. from tkinter import * class Conversor: def __init__(self,master=None): self.texto1=Label(i,text='DECIMAL') self.texto1.place(x=30,y=20) self.texto2=Label(i,text='ROMANO') self.texto2.place(x=300,y=20) self.ed=Entry(i) self.ed.place(x=30,y=50) self.bt=Button(i, width=10, text='Calcular',command=self.int_to_roman) self.bt.place(x=30,y=120) self.res=StringVar self.lb=Label(i,text='Resultado',textvariable=self.res) self.lb.place(x=300,y=120) def int_to_roman(self): n1=self.ed.get() n1=int(n1) if not isinstance(n1, type(1)): raise ValueError ("Expected integer, got {}".format(type(n1))) if not 0 < n1 < 4000: raise ValueError ("Argument must be between 1 and 3999") ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) #Tupla com os números inteiros nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') #Tupla com os números romanos result = [] #Lista com o resultado da conversão for i in range(len(ints)): #Loop para apurar o valor do número romano count = int(n1 / ints) #A parte inteira da divisão é colacada em count result.append(nums * count) #A letra do indice multiplicada pelo inteiro é adicionada á lista n1 -= ints * count #O produto do indice da tupla dos inteiros pelo contador é subtraido return ''.join(result) # do valor do input. Os valores são juntos(join) e retornados self.res.set(result) i=Tk() i.title('CONVERSOR DECIMAL -> ROMANO') i.geometry('400x200') Conversor(i) soldier=PhotoImage(file='C:/Users/Benigno/AppData/Local/Programs/Python/Python36/Python_Tkinter/Roman_soldier.gif') soldier=soldier.subsample(4,4) label=Label(i,image=soldier) label.pack() i.mainloop() Edited May 9, 2018 at 10:01 AM by pwseo tags de código...
pwseo Posted May 9, 2018 at 10:09 AM Report #610490 Posted May 9, 2018 at 10:09 AM Em 30/04/2018 às 15:43, Simões Lopes disse: Agradecia que me indicassem qual o erro neste programa que não efetua o cálculo. Consigo executar o programa sem a interface tkinter e dá o resultado correto. O ideal seria referires que erro o programa está a emitir para que te possamos ajudar. Referiste que consegues executar o programa sem interface tkinter e que te dá o resultado correcto... como? Eu isolei o código da tua função int_to_roman() e obtenho um erro de sintaxe. Clarifica primeiro o que está a acontecer de errado e o que pretendes.
Simões Lopes Posted May 9, 2018 at 03:59 PM Author Report #610493 Posted May 9, 2018 at 03:59 PM Obrigado pwseo pela disponibilidade e interesse, mas consegui resolver o problema, Assim: no final da função int_to_roman o return executa bem se não for modo de interface gráfico, caso contrário tem que se refazer os comandos: r=(''.join(result)) self.res.set(result) para: r=(''.join(result)) self.lb['text']=format(r) Até uma próxima, e Obrigado mais uma vez.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now