Python :: Aufgabe #235 :: Lösung #2

3 Lösungen Lösungen öffentlich
#235

Funktionswerte einer Parabel berechnen - Windows Forms

Anfänger - Python von paddlboot - 04.12.2019 um 16:13 Uhr
Erstelle eine Windows Form, in der Funktionswerte einer Parabel berechnet werden können.
Dafür sollen Start-, Endwert und Schrittweite über Textboxen eingelesen werden und nach dem Betätigen des Berechnen-Buttons die X- und Y-Werte in einer ListBox ausgegeben werden.
Mögliches Aussehen siehe Anhang.
#2
vote_ok
von Klaus (1960 Punkte) - 24.02.2020 um 16:36 Uhr
Zur Implementierung der GUI habe ich PySimpleGUI genutzt. Basierend auf tkinter ist PySimpleGUI aus meiner Sicht eine einfache und pragmatische Lösung, um schnell eine grafische Benutzeroberfläche mit wenig Code zu kreieren.

Installation über
pip install pysimplegui
oder
conda install pysimplegui.

Alles weitere unter https://pysimplegui.readthedocs.io/en/latest/

Quellcode ausblenden Python-Code
import PySimpleGUI as sg

class Parable:

    def __init__(self):

        sg.theme('Default1')
        sg.SetOptions(font=('Arial', 10), element_padding=(8, 8))

        self.start = None
        self.stop = None
        self.step = None

        frame_layout = [
            [sg.Text('Startwert', size=(10,1)), sg.InputText(key='_START_', size=(10,1), focus=True)],
            [sg.Text('Endwert', size = (10,1)), sg.InputText(key='_STOP_', size=(10,1))],
            [sg.Text('Schrittweite', size = (10,1)), sg.InputText(key='_STEP_', size=(10,1))]]
        col = [
            [sg.Frame('X-Werte', frame_layout, font=('Arial', 8))],
            [sg.Button('Berechnen', size=(10,2),pad=(15,8), bind_return_key=True),
             sg.Button('Reset', size=(10,2), pad=(12,8))]]

        self.layout = [
            [sg.Column(col), sg.Multiline('', key='_OUTPUT_', size=(30,12), font=('Consolas', 9))]]
        self.window = sg.Window('Funktionsweise einer Parabel berechnen (y = x*x)', self.layout)
        self.loop()

    def loop(self):

        while True:
            correct_input = True
            event, values = self.window.read()

            if event in (None, 'Cancel'):
                break

            if event == 'Berechnen':
                    try:
                        self.start = int(values['_START_'])
                    except ValueError:
                        sg.Popup('Bitte eine Ganzzahl als Startwert eingeben!', title='Hinweis', font=('Arial', 9))
                        self.window.FindElement('_START_').Update('')
                        correct_input = False
                    try:
                        self.stop = int(values['_STOP_'])
                    except ValueError:
                        sg.Popup('Bitte eine Ganzzahl als Endwert eingeben!', title='Hinweis', font=('Arial', 9))
                        self.window.FindElement('_STOP_').Update('')
                        correct_input = False
                    try:
                        self.step = int(values['_STEP_'])
                    except ValueError:
                        sg.Popup('Bitte eine Ganzzahl als Schrittweite eingeben!', title='Hinweis', font=('Arial', 9))
                        self.window.FindElement('_STEP_').Update('')
                        correct_input = False

                    if correct_input:
                        if self.stop <= self.start:
                            sg.Popup('Der Endwert muss größer als der Startwert sein!', title='Hinweis', font=('Arial', 9))
                        else:
                            self.window.FindElement('_OUTPUT_').Update(self.calculate_values())

            if event == 'Reset':
                elements = '_START_ _STOP_ _STEP_ _OUTPUT_'.split()
                for element in elements:
                    self.window.FindElement(element).Update('')

    def calculate_values(self):

        return_value = 'Berechnete Werte\n----------------\n'
        for index in range(self.start, self.stop + 1, self.step):
            return_value += f'x: {index:7.1f}  /  y: {index ** 2:7.1f}\n'
        return return_value

Parable()

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben