QPushButton reagiert nicht

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
init-0
User
Beiträge: 38
Registriert: Samstag 22. Januar 2011, 18:46

Hallo,
ich schreibe gerade ein Programm und ich habe dabei ein Problem.
Ich habe da einen Cutton und mehrere SpinBoxen und noch anderes.
Der Button wird so erstellt:

Code: Alles auswählen

        self.button = QtGui.QPushButton("drucken", self)
        self.button.move(415,330)
        self.button.clicked.connect(self.drucken)
Und wenn ich das Programm ausführe reagiert der Button manchmal einfach nicht. Das gleiche gilt dann für die SpinBoxen, aber der Rest bleibt funktionstüchtig.
Wenn ich dann ein bisschen mit der Oberfläche rumspiele kann ich den Butten bald drücken, aber dann geht es wieder von vorne los.
Ich kann diesen Fehler nicht gezielt wieder produzieren.
Habt ihr eine Idee woran das liegen könnte?
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Funktioniert bei mir prima:

Code: Alles auswählen

# coding: utf-8

import sys

from PyQt4.QtGui import * 
from PyQt4.QtCore import *

class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.button = QPushButton(u"Drück mich.", self)
        self.button.clicked.connect(foobar)
        self.show()

def foobar():
    print 'clicked'

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Example()
    sys.exit(app.exec_())
Vielleicht tust du in self.drucken ja was, das irgendwie blockiert?
init-0
User
Beiträge: 38
Registriert: Samstag 22. Januar 2011, 18:46

Nein, da wird nur etwas in eine Datei geschrieben.
Ausserdem habe ich das Problem manchmal schon am Anfang, bevor ich den Button gedrückt habe. Ausserdem reagiert ja nicht nur der Button nicht.
BlackJack

@init-0: Dann machst Du irgend etwas falsch. Und zwar wahrscheinlich in dem Quelltext ausserhalb der drei Zeilen, die Du gezeigt hast.
init-0
User
Beiträge: 38
Registriert: Samstag 22. Januar 2011, 18:46

Anscheinend hat es etwas mit dem move befehl zu tun.
Ich habe den Code jetzt in

Code: Alles auswählen

        self.button = QtGui.QPushButton("drucken", self)
        self.button.setGeometry(QtCore.QRect(420,390,200,25))
        self.button.clicked.connect(self.drucken)
geändert und der button hat keine Probleme mehr.
Allerdings besteht das Problem bei diesem Aufruf fort:

Code: Alles auswählen

        self.vereinbarungsBeginn = QtGui.QDateEdit(self)
        self.vereinbarungsBeginn.setGeometry(QtCore.QRect(175,360,100,20))
BlackJack

@init-0: Kann es ein, dass Da irgendwelche anderen Elemente „vor” die Elemente platziert werden, so dass nicht die Schaltfläche, sondern ein anderes Widget die Klicks empfängt?

Letztlich ist sowieso die Frage warum Du `move()` oder `setGeometry()` verwendest, anstelle eines Layouts, wie man das eigentlich machen sollte.
init-0
User
Beiträge: 38
Registriert: Samstag 22. Januar 2011, 18:46

Jaa vielen Dank! Das ist die Lösung. Ich hatte vergessen dass ich ein Label viel zu lang gezogen hatte, weil ich nicht wusste wie lang es sein musste.
Danke!
BlackJack

@init-0: Ein Label muss so lang wie sein Inhalt sein. Und das sollte man dem GUI-Toolkit überlassen das heraus zu finden und sowohl die Grösse des Labels, als auch die dadurch resultierende relative Position der anderen GUI-Elemente fest zu legen. Absolutes platzieren von GUI-Elementen ist eine schlechte Idee — das macht man heutzutage nicht mehr. Dazu ist die Vielfalt von Hardware, Software, und Einstellungen einfach zu gross.
Antworten