PyQt4 Knopfdruck mit Werteübermittlung

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
JFHunter
User
Beiträge: 8
Registriert: Montag 11. Mai 2015, 18:38
Wohnort: München

Hallo zusammen,

ich möchte gerade ein kleines Tool schreiben um für ein Würfelspiel Punkte mitzuschreiben und zu addieren. Hierfür hab ich mehrere Knöpfe die einen entsprechenden Wert Repräsentieren. Diese sollen je Runde und Knopfdruck aufaddiert werden, und nach Ende der Runde dem Spieler zugewiesen werden.

Wie kann man nun am elegantest/einfachsten den Wert von jedem Knopf bei jedem clicked-Event einer Variable aufaddieren?

Ich würde gerne (bisher aber noch ohne Erfolg) für jeden Button ein Signal mit dem entsprechenden Wert mitgeben um diesen dann aufaddieren zu können. Einige Beispiele mit benutzerdefinierten Signalen hab ich bereits gesehen, aber hab es noch nicht geschafft das auf mein Progrämmchen umzumünzen.

Ist die gedachte Vorgehensweise denn überhaupt in Euren Augen dafür geeignet oder gibt es evtl. einen leichteren oder eleganteren Weg das zu lösen?

Viele Grüße
JFHunter
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@JFHunter: ja, man verbindet jeden Knopf mit einem Signal und addiert im Handler die Werte auf. Was hast Du denn bisher versucht?
BlackJack

@JFHunter: *Ein* Handler der den Wert als Argument übergeben bekommt und `functools.partial()` könnten hier auch nützlich sein.
JFHunter
User
Beiträge: 8
Registriert: Montag 11. Mai 2015, 18:38
Wohnort: München

Hallo,

leider hab ich die nicht gelungenen Beispiele nicht mehr gespeichert. Aktuell im Code ist ein Beispiel eingearbeitet mit einem benutzerdefinierten Signal, welches in dem Fall als print in der Konsole ausgegeben wird und auch nicht von Knopf getriggert wird.
Das ist auch noch genau mein Problem, wenn ich ein benutzerdefiniertes Signal senden will, wie kann ich dann sagen dass beim clicked-event des Buttons das Signal ausgesendet wird? Um die (noch auskommentierte) Zeile 17 geht es mir. Sofern der Ansatz überhaupt in Euren Augen als gut erachtet wird.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

from PyQt4 import QtCore, QtGui

from quirkle_gui import Ui_MainWindow

class Main(QtGui.QMainWindow):

    def __init__(self, *args):
        QtGui.QMainWindow.__init__(self, *args)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        #self.ui.btn_2pkt.clicked.connect(self.ui.txt_points.setText, connect_to_signal)

    def connect_to_signal(self):
        self.mysignal.connect(self.myslot)

        self.mysignal.emit("hello")

    def myslot(self, param):
        print("received %s" % param)



if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec_())
Bin ich mit der Vorgehensweise auf dem Holzweg, oder ist diese Grundsätzlich richtig?

JFHunter
BlackJack

@JFHunter: Wenn etwas bei Druck auf die Schaltfläche passieren soll dann nimm doch das `clicked`-Signal. Genau dafür ist es doch da.
Antworten