Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Python Tkinter andmed kasutajalt märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
janeklass
HV vaatleja

liitunud: 13.05.2009




sõnum 17.05.2017 19:55:57 Python Tkinter andmed kasutajalt vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
andresvosa
HV vaatleja

liitunud: 09.08.2017




sõnum 09.08.2017 02:59:05 vasta tsitaadiga

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. icon_cool.gif
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Python Tkinter andmed kasutajalt
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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.