praegune kellaaeg 24.04.2024 00:42:08
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
janeklass
HV vaatleja
liitunud: 13.05.2009
|
17.05.2017 19:55:57
Python Tkinter andmed kasutajalt |
|
|
Terv
Mure siis funktsioonis "valem" nimelt ei saa kuidagi seda funktsiooni tööle,ei saa neid vajalikke andmeid kätte mida arvutamisel kasutada.
Panin koodi koos teiste failidega siia: https://www.upload.ee/files/7018711/test.rar.html
Funktsioonis valem on muutujatele pandud ajutiselt näidis väärtused, tegelikult tulevad väärtused vastavalt kasutaja valikule.
Kood muidu selline:
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
# valem on P = b • t 2 • Rm
# (W-Rd-Rp) • 9 800
#P = Painutusjõud
#t = Materjali paksus
# W = Prisma laius
# b = painde pikkus
# Rm = Tõmbetugevus
# Rd = Prisma raadius
# Rp = Tera raadius
def valem():#Peaks siis tegema kasutajalt saadud andmete p]hjal tegema arvutuse
b =2000 #float(m_pikkus.get())# Siin painde pikkus mille sisestab kasutaja
t = 10 #float(silt_materjal.get())#siin on materjali paksus mille sisestab kasutaja
rm =650 #siia peaks saama siis materjali valikust väärtuse (kasutaja valib materjali tüüpide hulgast materjali ja sellele materjalile vastav väärtus ongi selle muutuja väärtus)
w =120 # siia peab saama prisma valikust võtme ja seda kasutatakse arvutamisel(see võti ongi selle muutuja väärtus)
rd = 20 # Siia peaks saama prisma valikust väärtuse(kui muutuja w = votmega siis siia peab saama sama võtme vaartuse
rp = 30 # Terad on järjendis ja kasutja liideses saab kautaja valida vastava tera(number vastab tera raadiusele) ja see sama tera mis valitakse ongi selle muutuja väärtus
tulemus = (b*t*t*rm)/((w-rd-rp)*9800)
tulemus=Label(aken,text="Vaja läheb umbes: %.2f"' '' t' % tulemus).grid(row=7,column=5)
return(tulemus)
def materjal(mat):#Loeb failist materjali tuubid ja paneb ned sonastikku
f = open(mat, encoding = "UTF-8")
m = {}
for i in f:
if i.lstrip().startswith('#'):#Valdib kommentaari rida tekst failis
continue
d = i.split()
for osa in d:
m[" ".join(d[1:])]= int(d[0])
return(m)
def prisma(prisma1):#Loeb failist prismad ja paneb need sonastikku
f = open(prisma1, encoding = "UTF-8")
m = {}
for i in f:
if i.lstrip().startswith('#'):
continue
d = i.split()
for osa in d:
m[int((d[1]))]= int(d[0])
return(m)
def terad(f1):#loeb failist terad ja paneb need jarjendisse
tera =[]
fail = open(f1,encoding = "UTF-8")
for i in fail:
if i.lstrip().startswith('#'):
continue
tera.append(int(i))
return(tera)
f1 = "terad.txt"
mat = 'mat.txt'
prisma1 = "prisma.txt"
#akna seaded
aken = Tk()
aken.title('PainCalc')
aken.iconbitmap('favicon.ico')
aken.configure(background='#E6F3FE')
aken.geometry("420x200")
#Materjali paksuse aken
silt_materjal = ttk.Label(aken, text="Materjal paksus(mm)", background="#E6F3FE")
silt_materjal.grid(column=0, row=0, padx=5, pady=5, sticky=(N, W))
m_paksus = ttk.Entry(aken)
m_paksus.grid(column=1, row=0, padx=5, pady=5, sticky=(N, W, E))
#materjalitüübi valik
silt = Label(aken, text="Materjali tüüp", background="#E6F3FE")
silt.grid(column=0, row=2, padx=5, pady=5, sticky=(N, W, ))
#loendikast (Listbox)
loend = Listbox(aken, height=1)
materjal = materjal(mat)
for i in materjal:
loend.insert(END, i)
loend.grid(column=1, row=2, padx=5, pady=5, sticky=(N, W, E))
#prisma valik
silt1 = Label(aken, text="Vali prisma (mm)", background="#E6F3FE")
silt1.grid(column=0, row=3, padx=5, pady=5, sticky=(N, W, ))
#loendikast (Listbox)
loend1 = Listbox(aken, height=1)
pr = prisma(prisma1)
for i in pr:
loend1.insert(END, i)
loend1.grid(column=1, row=3, padx=5, pady=5, sticky=(N, W, E))
#Tera list
silt2 = Label(aken, text="Vali tera(R)", background="#E6F3FE")
silt2.grid(column=0, row=4, padx=5, pady=5, sticky=(N, W, ))
#loendikast (Listbox)
loend2 = Listbox(aken, height=1)
materjal = terad(f1)
for i in materjal:
loend2.insert(END, i)
loend2.grid(column=1, row=4, padx=5, pady=5, sticky=(N, W, E))
#Painutuse pikkus
silt_pikkus = ttk.Label(aken, text="Pinde pikkus(mm)", background="#E6F3FE")
silt_pikkus.grid(column=0, row=5, padx=5, pady=5, sticky=(N, W, E))
m_pikkus = ttk.Entry(aken)
m_pikkus.grid(column=1, row=5, padx=5, pady=5, sticky=(N, W, E))
#nupp arvuta vajutades peaks tegema arvutuse kasutaja poolt tehtud valikute põhjal...
nupp = ttk.Button(aken, text="Arvuta", command=valem())
nupp.grid(column=1, row=7, padx=5, pady=5, sticky=(N, S, W, E))
aken.mainloop()
|
EDIT: Nii esimesed 2 muutujat sain korda sinna saab .get() -ga andmed. Aga kuidas ülejäänud kolmega, üks nendest on järjend ja 2 on sõnastikud.......
def valem():#Peaks siis tegema kasutajalt saadud andmete p]hjal tegema arvutuse
b = float(m_pikkus.get())# Siin painde pikkus mille sisestab kasutaja
t = float(m_paksus.get())#siin on materjali paksus mille sisestab kasutaja
rm = 600#float(materjal(i[1])) #siia peaks saama siis materjali valikust väärtuse (kasutaja valib materjali tüüpide hulgast materjali ja sellele materjalile vastav väärtus ongi selle muutuja väärtus)
w =120 # siia peab saama prisma valikust võtme ja seda kasutatakse arvutamisel(see võti ongi selle muutuja väärtus)
rd = 20 # Siia peaks saama prisma valikust väärtuse(kui muutuja w = votmega siis siia peab saama sama võtme vaartuse
rp = 30 # Terad on järjendis ja kasutja liideses saab kautaja valida vastava tera(number vastab tera raadiusele) ja see sama tera mis valitakse ongi selle muutuja väärtus |
|
|
tagasi üles |
|
|
andresvosa
HV vaatleja
liitunud: 09.08.2017
|
09.08.2017 02:59:05
|
|
|
Tere.
Proovi sihukest varianti:
from tkinter import *
class valemPrg:
# klassi konstruktor
def __init__(self, master):
self.master = master
master.title('PainCalc')
#master.iconbitmap('favicon.ico')
master.configure(background='#E6F3FE')
master.geometry("320x200")
master.columnconfigure(0, weight=1)
master.rowconfigure(0, weight=1)
# Klassi yldised muutujad
self.m = {}
self.p = {}
self.t = []
#vidinad
self.silt_materjal = Label(master, text="Materjal paksus(mm): ", background="#E6F3FE")
self.m_paksus = Entry(master)
self.silt = Label(master, text="Materjali tüüp: ", background="#E6F3FE")
self.loend = Listbox(master, height=1)
self.silt1 = Label(master, text="Vali prisma (mm): ", background="#E6F3FE")
self.loend1 = Listbox(master, height=1)
self.silt2 = Label(master, text="Vali tera(R): ", background="#E6F3FE")
self.loend2 = Listbox(master, height=1)
self.silt_pikkus = Label(master, text="Pinde pikkus(mm): ", background="#E6F3FE")
self.m_pikkus = Entry(master)
self.nupp = Button(master, text="Arvuta", command=self.valem) #siin ei tohi olla valem(), muidu kutsutakse funktsiooni kohe objekti loomisel välja!
self.tulemus = Label(master, text='', background="#FF0000")
# Initsialiseerimine
self.m_paksus.insert(END, '0')
with open('mat.txt', encoding = "UTF-8") as f: # materjalide sisselugemine failist
for rida in f:
rida.strip()
if (rida.startswith('#')) or (len(rida) < 2):
continue
self.m[' '.join(rida.split()[1:])] = float(rida.split()[0])
self.loend.insert(END, ' '.join(rida.split()[1:]))
#print(' '.join(rida.split()[1:]))
#print(self.m)
with open('prisma.txt', encoding = "UTF-8") as f: # prismade sisselugemine failist
for rida in f:
rida.strip()
if (rida.startswith('#')) or (len(rida) < 2):
continue
self.p[' '.join(rida.split()[1:])] = float(rida.split()[0])
self.loend1.insert(END, ' '.join(rida.split()[1:]))
with open('terad.txt', encoding = "UTF-8") as f: # terade sisselugemine failist
for rida in f:
rida.strip()
if (rida.startswith('#')) or (len(rida) < 2):
continue
self.t.append(int(rida))
self.loend2.insert(END, int(rida))
self.m_pikkus.insert(END, '0')
# Paigutus
self.silt_materjal.grid(column=0, row=0, padx=5, pady=5, sticky=(N, W))
self.m_paksus.grid(column=1, row=0, padx=5, pady=5, sticky=(N, W, E))
self.silt.grid(column=0, row=2, padx=5, pady=5, sticky=(N, W ))
self.loend.grid(column=1, row=2, padx=5, pady=5, sticky=(N, W, E))
self.silt1.grid(column=0, row=3, padx=5, pady=5, sticky=(N, W ))
self.loend1.grid(column=1, row=3, padx=5, pady=5, sticky=(N, W, E))
self.silt2.grid(column=0, row=4, padx=5, pady=5, sticky=(N, W ))
self.loend2.grid(column=1, row=4, padx=5, pady=5, sticky=(N, W, E))
self.silt_pikkus.grid(column=0, row=5, padx=5, pady=5, sticky=(N, W))
self.m_pikkus.grid(column=1, row=5, padx=5, pady=5, sticky=(N, W, E))
self.nupp.grid(column=1, row=7, padx=5, pady=5, sticky=(N, S, W, E))
self.tulemus.grid(column=0, row=8, columnspan=2, padx=5, pady=5, sticky=(N, W, E))
# Meetodid
# valem on P = b • t^2 • Rm
# ------------------
# (W-Rd-Rp) • 9800
#P = Painutusjõud
#t = Materjali paksus
# W = Prisma laius
# b = painde pikkus
# Rm = Tõmbetugevus
# Rd = Prisma raadius
# Rp = Tera raadius
def valem(self):
b = float(self.m_pikkus.get()) #Siin painde pikkus
t = float(self.m_paksus.get()) #Siin on materjali paksus
#print (self.m)
rm = self.m[self.loend.get(ACTIVE)] #siia peaks saama siis materjali valikust väärtuse (vastavas sonastikus vastav vaartus)
w = int(self.loend1.get(ACTIVE)) # siia peab saama prisma valikust võtme ja seda kasutatakse arvutamisel(vastavas sonastikus vastav voti)
rd = self.p[self.loend1.get(ACTIVE)] # Siia peaks saama prisma valikust väärtuse(kui muutuja w = votmega siis siia peab saama sama sonastiku vaartuse
rp = self.loend2.get(ACTIVE) #55#Siia peaks saama tera valikust väärtuse
P = (b*t*t*rm)/((w-rd-rp)*9800)
#print(b, t, rm) #2000, 10, 650
#print(w, rd, rp) # 120, 20, 30
#print(P) #189,50
#print()
self.tulemus['background'] = '#00FF00'
self.tulemus['text'] = "Vaja läheb umbes: %.2f"' '' t' %P
def main():
root = Tk()
app = valemPrg(root)
root.mainloop()
if __name__ == '__main__':
main()
|
Kas toimib nii nagu soovitud? See on nii puusalt lastud. Tegelt saaks veel kõvasti paremaks.
Kui oli abiks siis on häste.
|
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|