Jump to content
Fórum Script Brasil
  • 0

Problema ao abrir formulário com PyQT


Mateus1234567
 Share

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...