• Register

PyQt 5 - Zapiranje programa z gumbom [closed]

+13 votes
343 views

Igram se z grafičnim vmesnikom.

 

Problem imam, ko želim narediti, da gumb spremeni text v QLabel. Namreč gumb ne spremeni text-a ampak zapre program.

 

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class Window(QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setFixedSize(650, 500)

        self.home()


    def home(self):

    #Prikaz gumba
        gumb = QPushButton(self)
        gumb.setText('Izračunaj')
        gumb.setFont(QFont('SansSerif', 11))
        gumb.setFixedSize(100, 50)
        gumb.move(275, 260)
        gumb.clicked.connect(self.printaj)

    #Prikaz texta
        poves = QLabel('Poves =', self)
        poves.move(250, 363)

        self.show()

    #Akcija na gumbu
    def printaj(self):
        sender = self.sender()
        if sender is self.gumb():
            self.label.setText('A')
        print("Whoooooa")


def run():
    app = QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())


run()
closed with the note: Problem rešen, pojasnilo v komentarjih
asked Dec 30, 2016 by tilen.mlinaric (7,770 points)
closed Dec 30, 2016 by tilen.mlinaric
Verjetno se vam o pritisku gumba aplikacija zapre, ker pride do napake med izvjanjem. Napaka bi se morala izpisati v komandni vrstici, od koder ste skripto uporabniškega vmesnika poganjali.

Morda je vzrok za napako to, da v funkciji "printaj()" skušate spremeniti napis "self.label", ki ga pred tem niste definirali. Tudi vrstica "if sender is self.gumb()" bi lahko bi la problematična. Vaš "gumb" je definiran kot lokalna spremenljivka funkcije home(). Če želite do njega dostopati kot kot do atributa vašega objekta "Window" (torej s "self.gumb" in ne samo "gumb") ga boste morali tako tudi definirati.
Pozdravljeni Tilen! Prosim v obliki odgovora sporočite rešitev. Lp, JS

1 Answer

+4 votes
 
Best answer

Problem je bil, ker nisem imel definiranega gumba kot instanca objekta.

 

Problem reši:

self.gumb = QPushButton(self)

self.gumb.setText("Banana")

self.gumb.clicked.connect(self.printaj)

 

def printaj(self):

     print("Whoooooa")

     if self.gumb.clicked:

          self.gumb.setText("Ni banane")

answered Dec 30, 2016 by tilen.mlinaric (7,770 points)
selected Dec 30, 2016 by janko.slavic
...