Tkinter Float Input

Fragen zu Tkinter.
Antworten
Mich93ael
User
Beiträge: 7
Registriert: Montag 10. August 2020, 17:46

Hallo,

Ich bin ein Neuling im Programmieren und versuche mich mit Python und dem Modul Tkinter.
Über eine API skripte ich in ein CAD-Programm und erstelle dort in einem ersten Schritt einen einfachen Balken.
Für die Eingabewerte würde ich gerne einen GUI nutzen, jedoch scheitere ich beim Erstellen des Skripts.
Kann mir jemand für folgendes Beispiel beim unten folgenden Skript helfen?

Ich möchte die Werte (float) BEAM_HEIGHT, BEAM_WIDTH, BEAM_LENGTH über eine Eingabemaske eingeben und dann bestätigen damit die Funktion CreateHorizontalBeam ausgeführt wird.

Code: Alles auswählen

import attribute_controller as ac
import geometry_controller as gc
import element_controller as ec
import utility_controller as uc
import visualization_controller as vc
import cadwork as c
import tkinter as tk


def main():
    """
    Auflagerdetail über Parameter erstellen
    :return:
    """
    BEAM_HEIGHT = 1200.00
    BEAM_WIDTH = 240.00
    BEAM_LENGTH = 500.00


    startPointBeam = c.point_3d(0.0, 0.0, 0.0)

    CreateHorizontalBeam(startPoint3d=startPointBeam, fWidth=BEAM_WIDTH, fLength=BEAM_LENGTH,
                         fHeight=BEAM_HEIGHT, xDir=c.point_3d(1, 0, 0), yDir=c.point_3d(0, 1, 0))

    return
# ----------------------------------------------------------------------------------------

def CreateHorizontalBeam(startPoint3d, fWidth, fLength, fHeight, xDir, yDir):
    horizontalBeam = ec.create_rectangular_beam_vectors(fHeight, fWidth, fLength, startPoint3d,
                                                                         xDir, yDir)
    vc.set_color([horizontalBeam], 8)

    return horizontalBeam


if __name__ == '__main__':
    main()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es würde schon helfen, wenn du auch verrätst, welches CAD Programm da im Einsatz ist.
Mich93ael
User
Beiträge: 7
Registriert: Montag 10. August 2020, 17:46

Ich nutze das CAD Programm Cadwork Holz. Die Erzeugung des "HorizontalBeam" funktioniert wie im beigefügten Skript dargestellt. Ich muss jedoch die Parameter Höhe, Breite, Länge im Skript definieren. Ich möchte diese jedoch über einen GUI eingeben können.

Vielen Dank für die Hilfe :)
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Wie wird denn dein Script aus dem Programm heraus aufgerufen?
Startet da ein integrierter Interpreter? Dann wird das vielleicht schwieriger als du denkst, weil die GUI des Programms ja bereits aktiv ist - und es kann in der Regel nur eine Hauptschleife geben, die die Oberfläche zeichnet.

Gibt es eine Beschreibung der API?
Mich93ael
User
Beiträge: 7
Registriert: Montag 10. August 2020, 17:46

Das Skript schreibe ich in PyCharm und rufe dieses aus dem CAD-Programm auf. Die Möglichkeit GUI's mit Tkinter aufzurufen besteht, ich habe dazu ein Beispiel gesehen.
Bei mir liegt die Schwierigkeit, dass ich nicht weiss, wie ich Tkinter einbauen muss damit ich die Parameter eingeben kann. Mein Ziel ist ein Fenster zu haben, bei dem ich die Parameter Höhe, Breite und Länge eingeben kann und dann über einen Button die Funktion in meinem Skript CreateHorizontalBeam aufrufe.

Für die API gibt es keine Beschreibung die zur Verfügung steht.
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Es ist wohl recht unwahrscheinlich, dass hier jemand das CAD-Programm installiert hat. Wie sieht denn das Beispiel aus? Wo hast Du Schwierigkeiten, das Beispiel an Deine Bedürfnisse anzupassen?
Mich93ael
User
Beiträge: 7
Registriert: Montag 10. August 2020, 17:46

Das Beispiel sieht folgendermassen aus (Bei diesem Beispiel gebe ich über e1la und rwho die Breite und Höhe des Balkens ein. Die Länge ist über die 1500.00 definiert):
Vom Skript her bevorzuge ich das Skript welches ich zuerst erstellt habe und zudem ich die Fragen stellte. Dort weiss ich jedoch nicht, wie ich den Tkinter Code einpflegen muss damit es funktioniert.

Code: Alles auswählen

import element_controller as ec
import cadwork as c
from tkinter import*


def create_BEAM():

    e1la = float(width.get())
    rwho = float(height.get())

    ec.create_rectangular_beam_vectors(rwho, e1la, 1500.00, c.point_3d(0.0, 0.0, 0.0), c.point_3d(1, 0, 0), c.point_3d(0, 1, 0))


tkFenster =Tk()
tkFenster.title('Create a simple Beam')
tkFenster.geometry('260x320')
frame = Frame(master=tkFenster, bg="#cccccc")
frame.place(x=10, y=10, width=240)
titel = Label(master=frame, bg="#1f3c90", fg="white", text="einfacher Balken", font='Arial 14 bold')
titel.pack(fill='x', padx=5, pady=5)

b_width = Label(master=frame, bg="black", fg="white", text="Breite", font='Arial 11')
b_width.pack(fill='x', padx=5, pady=5, anchor='w')
width = Entry(master=frame, bg="yellow", font='Arial 11', )
width.pack(fill='x', padx=5, pady=0)
width.insert(10, float(200.00))

b_height = Label(master=frame, bg="black", fg="white", text="Höhe", font='Arial 11')
b_height.pack(fill='x', padx=5, pady=5, anchor='w')
height = Entry(master=frame, bg="yellow", font='Arial 11', )
height.pack(fill='x', padx=5, pady=0)
height.insert(10, float(200.00))

create_BEAM = Button(master=frame, bg="green", fg="white", text='Create Beam', command=create_BEAM, anchor='w', font='Arial 11')
create_BEAM.pack(fill='x', padx=5, pady=5, anchor='w')

tkFenster.mainloop()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ist das ein offizielles Beispiel? Kann ich mir nicht vorstellen. Denn das ruft den Main Loop hier auf, und das sollte sich mit dem Mainloop der ganzen Anwendung beißen.

Hast du vom Hersteller ein minimales GUI Beispiel? Zeig uns bitte das.
Mich93ael
User
Beiträge: 7
Registriert: Montag 10. August 2020, 17:46

Das Beispiel ist von mir erstellt und nicht elegant gelöst...
Mich93ael
User
Beiträge: 7
Registriert: Montag 10. August 2020, 17:46

Das Beispiel ist von mir erstellt und nicht elegant gelöst...
Mich93ael
User
Beiträge: 7
Registriert: Montag 10. August 2020, 17:46

Das Beispiel ist von mir und überhaupt nicht elegant gelöst :roll: . Es gibt leider keinerlei Beispiel Dateien da die Schnittstelle sehr neu ist, was den Vorgang erschwert. Momentan nutzt nur eine handvoll User die API über Python.
Ich möchte in folgendem Skript den GUI integrieren, da ich zukünftig meine Skripte nach dieser Vorgehensweise erstellen möchte.

Code: Alles auswählen

import attribute_controller as ac
import geometry_controller as gc
import element_controller as ec
import utility_controller as uc
import visualization_controller as vc
import cadwork as c
import tkinter as tk


def main():
    """
    Auflagerdetail über Parameter erstellen
    :return:
    """
    BEAM_HEIGHT = 1200.00
    BEAM_WIDTH = 240.00
    BEAM_LENGTH = 500.00


    startPointBeam = c.point_3d(0.0, 0.0, 0.0)

    CreateHorizontalBeam(startPoint3d=startPointBeam, fWidth=BEAM_WIDTH, fLength=BEAM_LENGTH,
                         fHeight=BEAM_HEIGHT, xDir=c.point_3d(1, 0, 0), yDir=c.point_3d(0, 1, 0))

    return
# ----------------------------------------------------------------------------------------

def CreateHorizontalBeam(startPoint3d, fWidth, fLength, fHeight, xDir, yDir):
    horizontalBeam = ec.create_rectangular_beam_vectors(fHeight, fWidth, fLength, startPoint3d,
                                                                         xDir, yDir)
    vc.set_color([horizontalBeam], 8)

    return horizontalBeam


if __name__ == '__main__':
    main()
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Mich93ael hat geschrieben: Dienstag 11. August 2020, 13:08Das Skript schreibe ich in PyCharm und rufe dieses aus dem CAD-Programm auf. Die Möglichkeit GUI's mit Tkinter aufzurufen besteht, ich habe dazu ein Beispiel gesehen.
Das Beipiel, das du hier gesehen hast, das würden wir gerne sehen.

Denn wir kennen weder die API noch das Beispiel.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du keinen Code kennst, der IN deinem CAD Programm mit Python eine GUI darstellt - dann würde ich erstmal unterstellen, dass das entweder gar nicht oder wenn ganz anders geht. Und wenn doch, kann dir hier leider keiner helfen, denn was auch immer die mit diesem eingebetteten Interpreter machen, das können wir hier nicht erahnen. Da musst du dich an deren support wenden.
Antworten