Ir para conteúdo
Fórum Script Brasil
  • 0

Problema ao abrir formulário com PyQT


Mateus1234567

Pergunta

Estou começando a aprender python agora e decidi aprender a interface gráfica QT. Só que surgiu uma dúvida ao realizar um exercício que envolvia a abertura de um formulário e a passagem de informação entre o 1° e o 2° formulário.

 

O 1° formulário possui 4 botões (+,-,/,*) que quando pressionados abrem um novo formulário onde é pedido para digitar 2 números e a operação escolhida é realizada e o formulário fechado, a resposta aparece em uma label no 1° formulário.

 

Pra passar o sinal e a resposta criei 2 variáveis

Class UiForm(Object):
	sinal = ''
	resposta = 0

def btnCalcular_Clicked(self):
    try:            
       if self.sinal == '+':
           self.resposta = float(self.txt1.text()) + float(self.txt2.text())
       elif self.sinal == '-':
            self.resposta = float(self.txt1.text()) - float(self.txt2.text())
       elif self.sinal == '/':
            self.resposta = float(self.txt1.text()) / float(self.txt2.text())
       elif self.sinal == '*':
            self.resposta = float(self.txt1.text()) * float(self.txt2.text())
    except:
        QtGui.QMessageBox.warning(None, "Erro", 'Digite números válidos')

O problema mesmo é para chamar o formulário, já tentei de diversas maneiras. Aqui vai algumas delas e os erros q deram.

btnMais_Clicked(self):
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

Erro: The event looping is already running

def btnMais_Clicked(self):
    MainWindow = QtGui.QMainWindow()
    ui = Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()
Erro: Um pequeno form até abre, mas fecha instantaneamente

def btnMais_Clicked(self):
    f = Ui_Form()
    f.show()
Erro: Ui_Form Object has no attribute show

 

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Procure colocar a mensagem  de erro inteira, isso nos ajuda a te ajudar

 

O primeiro erro diz que o loop de evento já esta rodando

Acho que você esta fazendo duas vez algo que era para fazer só uma

Acho que você esta rodando o loop principal uma segunda vez, esse deve ser o erro

 

O segundo não faço ideia, coloque a mensagem inteira do erro

 

O terceiro diz que não existe .show no objeto Ui_Form

Link para o comentário
Compartilhar em outros sites

  • 0

Depois de muito esforço consegui fazer o formulário abrir com o seguinte código

 

Form = QtGui.QDialog()
ui = Ui_frInserir()
ui.setupUi(Form)
ui.sinal = sinal
Form.setModal(True)
Form.exec()

Meu problema agr é fechar o formulário com um botão.

Dentro do metodo btnCalcular_Clicked já tentei colocar self.reject(), self.accept() e self.close() só que n acontece nada. Como faço para fechar um formulário? E para capturar a resposta dps de fechado é só colocar ui.resposta?

Link para o comentário
Compartilhar em outros sites

  • 0

Depois de  muito esforço aqui encontrei a resposta do Youtube e no GitHub, vou postar aqui caso alguém precise e acabe achando esse tópico.

Eu estou usando o Qt Designer + pyuic4 para gerar o código da tela,  o problema é que o pyuic4 n gera m metodo __init__ no código, então, dentro da classe do form é preciso criar manualmente, ficao assim:

class Ui_frInserir(QtGui.QDialog):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)

No caso é um QDialog, mas poderia ser um QWidget sem problema. se você precisa passar informações pro formulário que vai ser aberto a duas maneiras, declarar o __init__ tendo parâmetros além do self e fazer as aplicações dentro do init, ou na chamada do form como eu fiz.
 

def AbreForm(self,sinal):    
    self.f = Ui_frInserir()
    self.f.sinal = sinal    
    self.f.exec()
    self.lblResp.setText(str(self.f.resposta))

A ultima linha está capturando uma variável que estava dentro da classe do form e jogando como texto numa label.

Dps que fiz dessa maneira um simples  self.close() fechou o formulário que eu havia aberto.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...