Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Python3 PyQt5 probleempje  (gelezen 2001 keer)

Offline BaukeP

  • Lid
Python3 PyQt5 probleempje
« Gepost op: 2018/01/31, 22:04:03 »
Hallo,

Met de volgende code heb ik een probleempje:

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

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

class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.setWindowTitle("Waarde Coins")

        grid = QGridLayout()
        self.setLayout(grid)

        # create matrix: "le" wordt een LineEdit, "" wordt overgeslagen en de rest wordt Label
        cells = ["", "<b>Totaal</b>", "<b>BTC</b>", "<b>ETH</b>", "<b>LTC</b>",
                 "Aantal:", "", "le", "le", "le",
                 "Aantal DGB:", "", "le", "le", "le",
                 "Waarde USD:", "le", "le", "le", "le",
                 "<b>Waarde EURO:</b>", "le", "le", "le", "le",
                 "Investering in EURO:", "le", "", "", "", ]
        positions = [(row, col) for row in range(6) for col in range(5)]
        for positions, cells in zip(positions, cells):
            # Create the labels and lineEdits from  matrix
            # print("Positions (row,col):", "cel" + str(positions[0]) + "-" + str(positions[1]))
            cell = name = "cel" + str(positions[0]) + "-" + str(positions[1])
            if cells == "":
                continue
            elif cells == 'le':
                cell = QLineEdit()
                cell.setAlignment(Qt.AlignRight)
                cell.textChanged.connect(lambda x, pos=positions, name=name: self.my_custom_fn(x, pos, name))
                if positions[0] == 3 or positions[0] == 4:
                    cell.setDisabled(1)
            else:
                cell = QLabel(cells)
                if positions[0] == 0:
                    cell.setAlignment(Qt.AlignCenter)

            grid.addWidget(cell, *positions)

        widget = QWidget()
        widget.setLayout(grid)

        self.setCentralWidget(widget)

    def my_custom_fn(self, a, pos, name):
        print("Invoer : ", a)
        print("Pos    : ", pos)
        print("Name   : ", name)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())

Op basis van de list 'cells' worden de labels en lineEdits aangemaakt. Gaat prima.
In de functie (my_custom_fn) die aangeroepen wordt, krijg ik keurig de waarde en cell coördinaten door. Maar nu wil ik op basis van die ingevoerde waarde iets berekenen en dat resultaat in een andere lineEdit zetten. En dat lukt voor geen meter. Hoe doe ik dat?

Het gebruik van QTableWidget was misschien gemakkelijker, maar dit lijkt me toch ook te moeten kunnen.

Alvast bedankt,
Bauke