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()
how to change string result to float?
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:
Gruss
Peter
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
Peter
-
- 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
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
-
- 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()
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()
Hallo mureed.niazie,
bitte gewöhn dir an, Code in Funktionen oder Klassen zu packen.
Hier eines der vielen Zitate aus dem Forum:
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
bitte gewöhn dir an, Code in Funktionen oder Klassen zu packen.
Hier eines der vielen Zitate aus dem Forum:
Ich hab mich während der Mittagspause über deinen Code hergemacht und überarbeitet.Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
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()
@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.
Hallo Sirius3,
danke für den Hinweis.
Die Exit Taste funktioniert jetzt auch.
Gruss Peter
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()
-
- 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
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
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
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