how to change string result to float?

Fragen zu Tkinter.
Antworten
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

import tkinter as tk
from tkinter import *
from PIL import Image, ImageTk
# import scipy as sc
import scipy.special as scs
import scipy.optimize as sco
import matplotlib.pyplot as plt
import numpy as np


class calculation:

def result_function():
c0 = 299792458 # lichtgeschwindigkeit
m0 = 4 * np.pi * 1e-7 # magnetische feldkonstante
e0 = 1 / (m0 * c0 ** 2) # elektrische feldkonstante
z0 = np.sqrt(m0 / e0) # frei raum wellen widerstand
zl = float(impedanz_Var.get())
eps_r = float(eps_r_Var.get())
aus_d = float(aussenleiter_Var.get())
# in_d = float(innenleiter_Var.get())

in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))
r1 = np.sqrt(eps_r) * aus_d / 2
r = np.sqrt(eps_r) * in_d / 2
a = r1 / r
z = z0 / (2 * np.pi * np.sqrt(eps_r)) * np.log(aus_d / in_d)

def wav_num(x):
return ((scs.jn(0, x*a) - scs.jn(2, x*a)) * (scs.yn(0, x) - scs.yn(2, x))
- (scs.yn(0, x*a) - scs.yn(2, x*a)) * (scs.jn(0, x) - scs.jn(2, x)))
x = np.arange(0.1, 1.0, 0.01)
test = wav_num(x)
etsi = sco.brentq(wav_num, 0.1, 0.7)
f_g = etsi * (a + 1) / (2 * np.pi * np.sqrt(m0 * e0) * (r1 + r) * 1e-3) / 1e9

result = round(f_g, 2)
result1 = round(z, 2)
result2 = round(in_d, 3)

Result_label.config(text='f_g : ' + str(result))
Result_label1.config(text='impedanz : ' + str(result1))
Result_label2.config(text='innenleiter D/O : ' + str(result2))
# fig = plt.figure(1)
plt.figure(1)
plt.plot(x, test)
plt.grid(True)
plt.savefig("result.png", dpi=100)
# plt.show()
logo = Image.open('result.png')
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
logo_label.image = logo
logo_label.grid(row=13, column=8, columnspan=4)
return logo



root = tk.Tk()
root.title("Coax TE Mode")
root.geometry("1400x1080")
root.config(background="#145")
var = IntVar()


# generate the window
title = Label(root, text="Coax TE Mode", font=('Helvetica', 22), bg="#145", fg="white")
title.grid(row=0, column=3, padx=20, pady=20)
leerZeile = Label(root, text="", bg="#145", fg="#145")
leerZeile.grid(row=1, column=1)
leerZeile = Label(root, text="", bg="#145", fg="#145")
leerZeile.grid(row=2, column=1)

# Impedanz = Zl (in die gleichung als Z gezeichnet)
impedanz_Label = Label(root, text="Impedanz", font=12, bg="#145", fg="white")
impedanz_Label.grid(row=6, column=0, padx=10, pady=10)
impedanz_Var = IntVar()
impedanz_Entry = Entry(root, textvariable=impedanz_Var, width=32, borderwidth=5, )
impedanz_Entry.grid(row=6, column=1, columnspan=4, padx=10, pady=10)


# Innenleiter = d (in die gleichung als d gezeigt)
innenleiter_Label = Label(root, text="Innenleiter", font=12, bg="#145", fg="white")
innenleiter_Label.grid(row=4, column=0, padx=10, pady=10)
innenleiter_Var = IntVar()
innenleiter_Entry = Entry(root, textvariable=innenleiter_Var, width=32, borderwidth=5)
innenleiter_Entry.grid(row=4, column=1, columnspan=4, padx=10, pady=10)

# Aussenleiter = D (in die gleichung als D gezeigt)
aussenleiter_Label = Label(root, text="Außenleiter", font=12, bg="#145", fg="white")
aussenleiter_Label.grid(row=5, column=0, padx=10, pady=10)
aussenleiter_Var = IntVar()
aussenleiter_Entry = Entry(root, textvariable=aussenleiter_Var, width=32, borderwidth=5)
aussenleiter_Entry.grid(row=5, column=1, columnspan=4, padx=10, pady=10)

# eps_r = in die gleichung als Permittivity dry air 1.000594
eps_r_Label = Label(root, text="eps_r", font=12, bg="#145", fg="white")
eps_r_Label.grid(row=7, column=0, padx=10, pady=10)
eps_r_Var = IntVar()
eps_r_Entry = Entry(root, textvariable=eps_r_Var, width=32, borderwidth=5)
eps_r_Entry.grid(row=7, column=1, columnspan=4, padx=10, pady=10)

# Result btn
Result_btn = Button(root, command=calculation.result_function, text="Result", bg="#145", fg="white", font=12)
Result_btn.grid(row=8, column=2, padx=10, pady=10)

# Show Result tkinter root window
Result_label = Label(root, text="", bg="#145", fg="white", font=14)
Result_label.grid(row=10, column=2, columnspan=20, padx=2, pady=2)

Result_label1 = Label(root, text="", bg="#145", fg="white", font=14)
Result_label1.grid(row=11, column=2, columnspan=20, padx=2, pady=2)

Result_label2 = Label(root, text="", bg="#145", fg="white", font=14)
Result_label2.grid(row=12, column=2, columnspan=20, padx=2, pady=2)

# clear btn soll entry fields räumen
plt_btn = Button(root, text="plot show", command=calculation.result_function, bg="#145", fg="white", font=12)
plt_btn.grid(row=8, column=3, padx=10, pady=10)

# Exit
exit_btn = Button(root, text="Exit", bg="#145", fg="white", font=12, command=root.quit)
exit_btn.grid(row=8, column=4, padx=10, pady=10)

# print Ergebnisse in pycharm (Die drei Ergebnisse brauchen wir)
# print("TE11 cut-off f_g =", "%8.2f" % f_g, "GHz")
# print("Die Impedanz Z =", "%8.2f" % z, "Ohm")
# print("Innenleiter D/O =", "%8.2f" % in_d, "mm")

root.mainloop()
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo mureed.niazie,
ich nur raten, was zu was gehören soll.
Bitte setz deinen Code zwischen die Code-Tags (Taste mit </>)
Dann sieht das so aus:

Code: Alles auswählen

class Beispiel():
    def beschreibe():
	das 
	ist 
	ein
	Beispiel
Gruss
Peter
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

Hallo peter,

ich habe die ganz beschreibung und bau typ von code geändert.

jetzt die Frage ist. wie kann ich ein button aufbauen wenn ich clicken innenleiter entry widget wird active und übernimmt die eingegebene zahl und rechnet weiter, und wenn nicht gedruckt ist dann übernimmt die variabel, in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))


und rechnet weiter,


ich Bitte Sie auf Ihre antwort.


viele grüße
Mureed
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

import tkinter as tk
from tkinter import *
from PIL import Image, ImageTk
import scipy.special as scs
import scipy.optimize as sco
import matplotlib.pyplot as plt
import numpy as np

def button_clear():
eps_r_Entry.delete(0, END)
impedanz_Entry.delete(0, END)
aussenleiter_Entry.delete(0, END)
innenleiter_Entry.delete(0, END)

def result_function():
c0 = 299792458
m0 = 4 * np.pi * 1e-7
e0 = 1 / (m0 * c0 ** 2)
z0 = np.sqrt(m0 / e0)

zl = float(impedanz_Var.get())
eps_r = float(eps_r_Var.get())
aus_d = float(aussenleiter_Var.get())

in_d = float(innenleiter_Var.get())
''''
here i need a button if clicked use the number entered in Entry widget (innenleiter)
if not, take this variable and proceed (in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))
'''
in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))

r1 = np.sqrt(eps_r) * aus_d / 2
r = np.sqrt(eps_r) * in_d / 2
a = r1 / r
z = z0 / (2 * np.pi * np.sqrt(eps_r)) * np.log(aus_d / in_d)

def wav_num(x):
return ((scs.jn(0, x*a) - scs.jn(2, x*a)) * (scs.yn(0, x) - scs.yn(2, x))
- (scs.yn(0, x*a) - scs.yn(2, x*a)) * (scs.jn(0, x) - scs.jn(2, x)))
x = np.arange(0.1, 1.0, 0.01)
test = wav_num(x)
etsi = sco.brentq(wav_num, 0.1, 1.0)
f_g = etsi * (a + 1) / (2 * np.pi * np.sqrt(m0 * e0) * (r1 + r) * 1e-3) / 1e9

result = round(f_g, 2)
result1 = round(z, 2)
result2 = round(in_d, 2)

Result_label.config(text='f_g : ' + str(result))
Result_label1.config(text='impedanz : ' + str(result1))
Result_label2.config(text='innenleiter D/O : ' + str(result2))

# fig = plt.figure(1)
plt.close()
plt.figure(1)
plt.plot(x, test)
plt.grid(True)
plt.savefig("result.png", dpi=70)

logo = Image.open('result.png')
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
logo_label.image = logo
logo_label.grid(row=13, column=8, columnspan=4)

return logo

root = tk.Tk()
root.title("Coax TE Mode")
root.geometry("1400x1080")
root.config(background="#145")
var = DoubleVar()

# generate the window
title = Label(root, text="Coax TE Mode", font=('Helvetica', 22), bg="#145", fg="white")
title.grid(row=0, column=3, padx=20, pady=20)
leerZeile = Label(root, text="", bg="#145", fg="#145")
leerZeile.grid(row=1, column=1)
leerZeile = Label(root, text="", bg="#145", fg="#145")
leerZeile.grid(row=2, column=1)

# Impedanz = Zl (in die gleichung als Z gezeichnet)
impedanz_Label = Label(root, text="Impedanz", font=12, bg="#145", fg="white")
impedanz_Label.grid(row=6, column=0, padx=10, pady=10)
impedanz_Var = DoubleVar()
impedanz_Entry = Entry(root, textvariable=impedanz_Var, width=32, borderwidth=5, )
impedanz_Entry.grid(row=6, column=1, columnspan=4, padx=10, pady=10)

# Innenleiter = d (in die gleichung als d gezeigt)
innenleiter_Label = Label(root, text="Innenleiter", font=12, bg="#145", fg="white")
innenleiter_Label.grid(row=4, column=0, padx=10, pady=10)
innenleiter_Var = DoubleVar()
innenleiter_Entry = Entry(root, textvariable=innenleiter_Var, width=32, borderwidth=5)
innenleiter_Entry.grid(row=4, column=1, columnspan=4, padx=10, pady=10)

# Aussenleiter = D (in die gleichung als D gezeigt)
aussenleiter_Label = Label(root, text="Außenleiter", font=12, bg="#145", fg="white")
aussenleiter_Label.grid(row=5, column=0, padx=10, pady=10)
aussenleiter_Var = DoubleVar()
aussenleiter_Entry = Entry(root, textvariable=aussenleiter_Var, width=32, borderwidth=5)
aussenleiter_Entry.grid(row=5, column=1, columnspan=4, padx=10, pady=10)

# eps_r = in die gleichung als Permittivity dry air 1.000594
eps_r_Label = Label(root, text="eps_r", font=12, bg="#145", fg="white")
eps_r_Label.grid(row=7, column=0, padx=10, pady=10)
eps_r_Var = DoubleVar()
eps_r_Entry = Entry(root, textvariable=eps_r_Var, width=32, borderwidth=5)
eps_r_Entry.grid(row=7, column=1, columnspan=4, padx=10, pady=10)

# Result btn
Result_btn = Button(command=result_function, text="Result", bg="#145", fg="white", font=12)
Result_btn.grid(row=8, column=2, padx=10, pady=10)

# Show Result tkinter root window
Result_label = Label(root, text="", bg="#145", fg="white", font=14)
Result_label.grid(row=10, column=2, columnspan=20, padx=2, pady=2)

Result_label1 = Label(root, text="", bg="#145", fg="white", font=14)
Result_label1.grid(row=11, column=2, columnspan=20, padx=2, pady=2)

Result_label2 = Label(root, text="", bg="#145", fg="white", font=14)
Result_label2.grid(row=12, column=2, columnspan=20, padx=2, pady=2)

# clear btn soll entry fields räumen
plt_btn = Button(text="clear", command=button_clear, bg="#145", fg="white", font=12)
plt_btn.grid(row=8, column=3, padx=10, pady=10)

# Exit
exit_btn = Button(root, text="Exit", bg="#145", fg="white", font=12, command=root.quit)
exit_btn.grid(row=8, column=4, padx=10, pady=10)

root.mainloop()
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo mureed.niazie,
bitte gewöhn dir an, Code in Funktionen oder Klassen zu packen.
Hier eines der vielen Zitate aus dem Forum:
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Ich hab mich während der Mittagspause über deinen Code hergemacht und überarbeitet.
Deinen Wunsch hab ich mit einer Checkbox erfüllt.
Ausserdem hab ich eine Meldung bei falschen Eingaben generiert.
Das mit dem Logo hab ich auskommentiert. Auf meinem System ist Pillow noch nicht installiert.
Gruss Peter

Code: Alles auswählen

import tkinter as tk
from PIL import Image#, ImageTk
import scipy.special as scs
import scipy.optimize as sco
import matplotlib.pyplot as plt
import numpy as np

def result_function(gui, zl, eps_r, aus_d, in_d):    
    c0 = 299792458
    m0 = 4 * np.pi * 1e-7
    e0 = 1 / (m0 * c0 ** 2)
    z0 = np.sqrt(m0 / e0)      
    ''''
    here i need a button if clicked use the number entered in Entry widget
    (innenleiter)
    if not, take this variable and proceed
    (in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))
    '''
    mit_innenleiter = gui.abfrage_wert_innenleiter()
    if mit_innenleiter == 0:
        in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))

    r1 = np.sqrt(eps_r) * aus_d / 2
    r = np.sqrt(eps_r) * in_d / 2
    a = r1 / r
    z = z0 / (2 * np.pi * np.sqrt(eps_r)) * np.log(aus_d / in_d)
    
    x = np.arange(0.1, 1.0, 0.01)
    test = wav_num(x, a)
    try:        
        etsi = sco.brentq(wav_num, 0.1, 1.0, a)
    except(ValueError, RuntimeWarning, NameError):
        gui.melde()
    
    f_g = etsi * (a + 1) / (2 * np.pi * np.sqrt(m0 * e0) * (r1 + r) *
                            1e-3) / 1e9

    result0 = round(f_g, 2)
    result1 = round(z, 2)
    result2 = round(in_d, 2)    

    fig = plt.figure(1)
    plt.close()
    plt.figure(1)
    plt.plot(x, test)
    plt.grid(True)
    plt.savefig("result.png", dpi=70)

    return result0, result1, result2

def wav_num(x, a):
    return ((scs.jn(0, x*a)-scs.jn(2, x*a))*(scs.yn(0, x)-scs.yn(2, x))-
            (scs.yn(0, x*a)-scs.yn(2, x*a))*(scs.jn(0, x)-scs.jn(2, x)))    
    
class Gui():
    def __init__(self):
        self.root = tk.Tk()
        self.var = tk.DoubleVar()
        self.impedanz_var = tk.DoubleVar()
        self.innenleiter_var = tk.DoubleVar()
        self.abfrage_innenleiter = tk.IntVar()
        self.aussenleiter_var = tk.DoubleVar()
        self.eps_r_var = tk.DoubleVar()
        self.result0_var = tk.StringVar()
        self.result1_var = tk.StringVar()
        self.result2_var = tk.StringVar()

    def button_clear(self):        
        self.eps_r_var.set('')        
        self.aussenleiter_var.set('')        
        self.innenleiter_var.set('')
        self.impedanz_var.set('')
        self.eps_r_var.set('')
        self.abfrage_innenleiter.set(0)

    def erstelle_gui(self):
        # generate the window        
        self.root.title("Coax TE Mode")
        self.root.geometry("1400x1080")
        self.root.config(background="#145")        
        # Titel
        tk.Label(self.root, text="Coax TE Mode", font=('Helvetica', 22),
                              bg="#145", fg="white").grid(row=0, column=3,
                                                          padx=20, pady=20)
        leerzeile = tk.Label(self.root, text="", bg="#145", fg="#145")
        leerzeile.grid(row=1, column=1)
        leerzeile.grid(row=2, column=1)
        # Innenleiter = d (in die gleichung als d gezeigt)
        tk.Label(self.root, text="Innenleiter", font=12, bg="#145",
                                  fg="white").grid(row=4, column=0, padx=10,
                                                   pady=10)        
        self.innenleiter_Entry = tk.Entry(self.root, width=32, borderwidth=5,
                                          textvariable=self.innenleiter_var)        
        self.innenleiter_Entry.grid(row=4, column=1, columnspan=4,
                                    padx=10, pady=10)
        # Abfrage Innenleiter aus Eingabefeld übernnemhen
        beschrieb = "Innenleiter aus\nEingabe übernehmen"        
        tk.Checkbutton(self.root, text=beschrieb, justify="center",
                       variable=self.abfrage_innenleiter).grid(row=4, column=5,
                                                               padx=10, pady=10)
        # Aussenleiter = D (in die gleichung als D gezeigt)
        tk.Label(self.root, text="Außenleiter", font=12, bg="#145",
                                   fg="white").grid(row=5, column=0, padx=10,
                                                    pady=10)        
        self.aussenleiter_entry = tk.Entry(self.root, width=32, borderwidth=5,
                                   textvariable=self.aussenleiter_var)
        self.aussenleiter_entry.grid(row=5, column=1, columnspan=4,
                                     padx=10, pady=10)
        # eps_r = in die gleichung als Permittivity dry air 1.000594
        tk.Label(self.root, text="eps_r", font=12, bg="#145",
                 fg="white").grid(row=7, column=0, padx=10, pady=10)        
        self.eps_r_entry = tk.Entry(self.root, textvariable=self.eps_r_var,
                                    width=32, borderwidth=5)
        self.eps_r_entry.grid(row=7, column=1, columnspan=4, padx=10, pady=10)
        # Impedanz = Zl (in die gleichung als Z gezeichnet)
        tk.Label(self.root, text="Impedanz", font=12, bg="#145",
                               fg="white").grid(row=6, column=0, padx=10,
                                                pady=10)
        self.impedanz_entry = tk.Entry(self.root, width=32, borderwidth=5,
                                       textvariable=self.impedanz_var)
        self.impedanz_entry.grid(row=6, column=1, columnspan=4, padx=10,
                                 pady=10)
        # Result btn
        tk.Button(self.root,command=self.berechne, text="Result", bg="#145",
                  fg="white", font=12).grid(row=8, column=2, padx=10, pady=10)
        # Show Result tkinter root window
        tk.Label(self.root, text="", bg="#145", fg="white", font=14,
                 textvariable=self.result0_var).grid(row=10, column=2,
                                                     columnspan=20,
                                                     padx=2, pady=2)
        tk.Label(self.root, text="", bg="#145", fg="white", font=14,
                 textvariable=self.result1_var).grid(row=11, column=2,
                                                     columnspan=20, padx=2,
                                                     pady=2)
        tk.Label(self.root, text="", bg="#145", fg="white", font=14,
                 textvariable = self.result2_var).grid(row=12, column=2,
                                                       columnspan=20, padx=2,
                                                       pady=2)
        # clear btn soll entry fields räumen
        tk.Button(self.root, text="clear", bg="#145", fg="white", font=12,
                  command=self.button_clear).grid(row=8, column=3, padx=10,
                                                  pady=10)
        # Exit
        tk.Button(self.root, text="Exit", bg="#145", fg="white", font=12,
                  command=self.root.quit).grid(row=8, column=4, padx=10,
                                               pady=10)

        #logo = Image.open('result.png')
        #logo = ImageTk.PhotoImage(logo)
        #logo_label = tk.Label(image=logo)
        #logo_label.image = logo
        #logo_label.grid(row=13, column=8, columnspan=4)
        #return logo

        self.root.mainloop()

    def abfrage_wert_innenleiter(self):
        mit_innenleiter = self.abfrage_innenleiter.get()
        return mit_innenleiter         

    def berechne(self):
        try:       
            zl = float(self.impedanz_var.get())
            eps_r = float(self.eps_r_var.get())
            aus_d = float(self.aussenleiter_var.get())
            in_d = float(self.innenleiter_var.get())
            resultate = result_function(gui, zl, eps_r, aus_d, in_d)        
            self.result0_var.set("{:<20}{:>10}".format('f_g :', resultate[0]))
            self.result1_var.set("{:<20}{:>10}".format('Impedanz :'
                                                       ,resultate[1]))
            self.result2_var.set("{:<20}{:>10}".format('Innenleiter D/O :',
                                                       resultate[2]))
        except tk.TclError:
            self.melde()

    def melde(self):
        meldung = tk.messagebox.showerror("FEHLER", "falsche Eingaben",
                                         icon = "error", parent=self.root)       



if __name__ == "__main__":
    gui = Gui()
    gui.erstelle_gui()
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@peterpy: __init__ einer Klasse ist dazu da, das Objekt zu initialisieren. Insbesondere müssen dort alle Attribute angelegt werden. Du hast einen zweistufigen Initialisierungsprozess umgesetzt. Also muß fast alles was in erstelle_gui steht in __init__ stehen, bis auf den mainloop-Aufruf, denn auch bei einer Funktion erstelle_gui würde niemand erwarten, dass die auch die GUI ausführt. Der mainloop-Aufruf muß in Deine main-Funktion.
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Sirius3,
danke für den Hinweis.
Die Exit Taste funktioniert jetzt auch.
Gruss Peter

Code: Alles auswählen

import tkinter as tk
from PIL import Image#, ImageTk
import scipy.special as scs
import scipy.optimize as sco
import matplotlib.pyplot as plt
import numpy as np

def result_function(gui, zl, eps_r, aus_d, in_d):    
    c0 = 299792458
    m0 = 4 * np.pi * 1e-7
    e0 = 1 / (m0 * c0 ** 2)
    z0 = np.sqrt(m0 / e0)      
    ''''
    here i need a button if clicked use the number entered in Entry widget
    (innenleiter)
    if not, take this variable and proceed
    (in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))
    '''
    mit_innenleiter = gui.abfrage_wert_innenleiter()
    if mit_innenleiter == 0:
        in_d = aus_d / (np.e ** (zl * 2 * np.pi * np.sqrt(eps_r) / z0))

    r1 = np.sqrt(eps_r) * aus_d / 2
    r = np.sqrt(eps_r) * in_d / 2
    a = r1 / r
    z = z0 / (2 * np.pi * np.sqrt(eps_r)) * np.log(aus_d / in_d)
    
    x = np.arange(0.1, 1.0, 0.01)
    test = wav_num(x, a)
    try:        
        etsi = sco.brentq(wav_num, 0.1, 1.0, a)
    except(ValueError, RuntimeWarning, NameError):
        gui.melde()
    
    f_g = etsi * (a + 1) / (2 * np.pi * np.sqrt(m0 * e0) * (r1 + r) *
                            1e-3) / 1e9

    result0 = round(f_g, 2)
    result1 = round(z, 2)
    result2 = round(in_d, 2)    

    fig = plt.figure(1)
    plt.close()
    plt.figure(1)
    plt.plot(x, test)
    plt.grid(True)
    plt.savefig("result.png", dpi=70)

    return result0, result1, result2

def wav_num(x, a):
    return ((scs.jn(0, x*a)-scs.jn(2, x*a))*(scs.yn(0, x)-scs.yn(2, x))-
            (scs.yn(0, x*a)-scs.yn(2, x*a))*(scs.jn(0, x)-scs.jn(2, x)))    
    
class Gui():
    def __init__(self, root):
        self.root = root        
        self.var = tk.DoubleVar()
        self.impedanz_var = tk.DoubleVar()
        self.innenleiter_var = tk.DoubleVar()
        self.abfrage_innenleiter = tk.IntVar()
        self.aussenleiter_var = tk.DoubleVar()
        self.eps_r_var = tk.DoubleVar()
        self.result0_var = tk.StringVar()
        self.result1_var = tk.StringVar()
        self.result2_var = tk.StringVar()
         # generate the window        
        self.root.title("Coax TE Mode")quit
        self.root.geometry("1400x1080")
        self.root.config(background="#145")        
        # Titel
        tk.Label(self.root, text="Coax TE Mode", font=('Helvetica', 22),
                              bg="#145", fg="white").grid(row=0, column=3,
                                                          padx=20, pady=20)
        leerzeile = tk.Label(self.root, text="", bg="#145", fg="#145")
        leerzeile.grid(row=1, column=1)
        leerzeile.grid(row=2, column=1)
        # Innenleiter = d (in die gleichung als d gezeigt)
        tk.Label(self.root, text="Innenleiter", font=12, bg="#145",
                                  fg="white").grid(row=4, column=0, padx=10,
                                                   pady=10)        
        self.innenleiter_Entry = tk.Entry(self.root, width=32, borderwidth=5,
                                          textvariable=self.innenleiter_var)        
        self.innenleiter_Entry.grid(row=4, column=1, columnspan=4,
                                    padx=10, pady=10)
        # Abfrage Innenleiter aus Eingabefeld übernnemhen
        beschrieb = "Innenleiter aus\nEingabe übernehmen"        
        tk.Checkbutton(self.root, text=beschrieb, justify="center",
                       variable=self.abfrage_innenleiter).grid(row=4, column=5,
                                                               padx=10, pady=10)
        # Aussenleiter = D (in die gleichung als D gezeigt)
        tk.Label(self.root, text="Außenleiter", font=12, bg="#145",
                                   fg="white").grid(row=5, column=0, padx=10,
                                                    pady=10)        
        self.aussenleiter_entry = tk.Entry(self.root, width=32, borderwidth=5,
                                   textvariable=self.aussenleiter_var)
        self.aussenleiter_entry.grid(row=5, column=1, columnspan=4,
                                     padx=10, pady=10)
        # eps_r = in die gleichung als Permittivity dry air 1.000594
        tk.Label(self.root, text="eps_r", font=12, bg="#145",
                 fg="white").grid(row=7, column=0, padx=10, pady=10)        
        self.eps_r_entry = tk.Entry(self.root, textvariable=self.eps_r_var,
                                    width=32, borderwidth=5)
        self.eps_r_entry.grid(row=7, column=1, columnspan=4, padx=10, pady=10)
        # Impedanz = Zl (in die gleichung als Z gezeichnet)
        tk.Label(self.root, text="Impedanz", font=12, bg="#145",
                               fg="white").grid(row=6, column=0, padx=10,
                                                pady=10)
        self.impedanz_entry = tk.Entry(self.root, width=32, borderwidth=5,
                                       textvariable=self.impedanz_var)
        self.impedanz_entry.grid(row=6, column=1, columnspan=4, padx=10,
                                 pady=10)
        # Result btn
        tk.Button(self.root,command=self.berechne, text="Result", bg="#145",
                  fg="white", font=12).grid(row=8, column=2, padx=10, pady=10)
        # Show Result tkinter root window
        tk.Label(self.root, text="", bg="#145", fg="white", font=14,
                 textvariable=self.result0_var).grid(row=10, column=2,
                                                     columnspan=20,
                                                     padx=2, pady=2)
        tk.Label(self.root, text="", bg="#145", fg="white", font=14,
                 textvariable=self.result1_var).grid(row=11, column=2,
                                                     columnspan=20, padx=2,
                                                     pady=2)
        tk.Label(self.root, text="", bg="#145", fg="white", font=14,
                 textvariable = self.result2_var).grid(row=12, column=2,
                                                       columnspan=20, padx=2,
                                                       pady=2)
        # clear btn soll entry fields räumen
        tk.Button(self.root, text="clear", bg="#145", fg="white", font=12,
                  command=self.button_clear).grid(row=8, column=3, padx=10,
                                                  pady=10)
        # Exit
        tk.Button(self.root, text="Exit", bg="#145", fg="white", font=12,
                  command=self.root.destroy).grid(row=8, column=4, padx=10,
                                               pady=10)

        #logo = Image.open('result.png')
        #logo = ImageTk.PhotoImage(logo)
        #logo_label = tk.Label(image=logo)
        #logo_label.image = logo
        #logo_label.grid(row=13, column=8, columnspan=4)
        #return logo

    def button_clear(self):        
        self.eps_r_var.set('')        
        self.aussenleiter_var.set('')        
        self.innenleiter_var.set('')
        self.impedanz_var.set('')
        self.eps_r_var.set('')
        self.abfrage_innenleiter.set(0)    

    def abfrage_wert_innenleiter(self):
        mit_innenleiter = self.abfrage_innenleiter.get()
        return mit_innenleiter         

    def berechne(self):
        try:       
            zl = float(self.impedanz_var.get())
            eps_r = float(self.eps_r_var.get())
            aus_d = float(self.aussenleiter_var.get())
            in_d = float(self.innenleiter_var.get())
            resultate = result_function(gui, zl, eps_r, aus_d, in_d)        
            self.result0_var.set("{:<20}{:>10}".format('f_g :', resultate[0]))
            self.result1_var.set("{:<20}{:>10}".format('Impedanz :'
                                                       ,resultate[1]))
            self.result2_var.set("{:<20}{:>10}".format('Innenleiter D/O :',
                                                       resultate[2]))
        except tk.TclError:
            self.melde()

    def melde(self):
        meldung = tk.messagebox.showerror("FEHLER", "falsche Eingaben",
                                         icon = "error", parent=self.root)       


if __name__ == "__main__":
    root = tk.Tk()
    gui = Gui(root)    
    root.mainloop()
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

Herzlichen Dank Peter,

das war sehr sehr hilfreich und positive,

ich werde nie vergessen wie fleißig und schnell hast du mein Problem gelöst,

ich weiß nicht wie ich bedanken,

Danke Danke Danke Peter,

hast du irgendwo ein Chanel in YouTube oder Videos ich von dir was lernen kann?




mit freundliche grüße
Mureed
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo mureed.niazie,
ist gern geschehen, es freut mich wenn ich helfen konnte.
Nein ich hab keinen YouTube Channel.
Ich kann dir das anbieten https://wiki.python.org/moin/BeginnersGuide
und das https://anzeljg.github.io/rin2/book2/24 ... index.html
Den Plot musst Du nun selbst einbauen, wenn Du Probleme damit hast,
melde dich im Forum.
Gruss Peter
Antworten