-1
votes

Meilleur codage python tkinter

Je voudrais coder le code suivant dans les boucles. Malheureusement, mes boucles ne fonctionnaient pas du tout. Quelqu'un pourrait-il m'aider à obtenir le stringvar, les étiquettes et les jetons dans une boucle pour ou tandis que la boucle? xxx


2 commentaires

Quelles boucles? Donnez un exemple de reproductible minimal .


Bonjour! Pourriez-vous s'il vous plaît donner plus de contexte? Pourquoi avez-vous besoin d'une boucle? Que veux-tu accomplir? Sans cela, il est difficile de vous aider.


3 Réponses :


0
votes

Voici un petit exemple. Votre problème peut avoir à voir avec la nécessité de séparer la méthode de la création de widget, sinon vous perdez la référence au widget. XXX


2 commentaires

Votre code a le même problème de ne pas séparer tk.button (...) et pack () sur print_myvars_button .


@ ACW1668 Vous avez raison, stupide moi. Eh bien, ce n'est pas vraiment un problème, vous pouvez le faire si vous n'avez pas besoin de conserver la référence du widget, qui était le cas, mais comme un exemple était probablement contradictoire. Just édité, merci.



1
votes

C'est une fonction pratique appelée énumérer code> qui fonctionne particulièrement bien lorsque vous souhaitez grille code> une série de widgets. Vous pouvez le lire ici .

Puisque vous alignez vos étiquettes et vos entrées parallèles Côté, vous pouvez réellement faire en une seule fois en utilisant zip code> et énumérer code> ensemble dans A pour boucle: p>

import tkinter

root = tkinter.Tk()

airp_elev = tkinter.StringVar()
QNH = tkinter.StringVar()
OAT = tkinter.StringVar()
all_labels = ("Airport elevation [ft]","QNH [hPa]","Ourside air temperature [°C]") #group your labels together
all_var = (airp_elev,QNH,OAT) #group your vars together

L0 = tkinter.Label(root, text = "Welcome to the density altutude calculator!", fg = "red").grid(row = 0, column = 1, sticky = "W", padx = 10, pady = 10)

for num,i in enumerate(zip(all_labels,all_var),1): #enumerate through both lists
    label, entry = i #unpack the tuple i into two easy to read variables
    tkinter.Label(root,text=label).grid(row=num,column=0,sticky = "W", padx = 10, pady = 10)
    tkinter.Entry(root, textvariable=entry, bd=5).grid(row=num, column=1)

tkinter.Button(root,text="Print result",command=lambda: print(airp_elev.get(),QNH.get(),OAT.get())).grid(row=4,column=0,columnspan=2)

root.mainloop()


0 commentaires

0
votes

Je voulais vous montrer mon code. C'est une calculatrice d'altitude de densité, le calcul de l'altitude de densité est principalement utilisé dans l'aviation.

    import tkinter

    root = tkinter.Tk()
    root.title("Density altitude calculator")
    root.geometry("500x275")

    airp_elev = tkinter.StringVar()
    QNH = tkinter.StringVar()
    OAT = tkinter.StringVar()
    all_labels = ("Airport elevation [ft]","QNH [hPa]","Ourside air temperature [°C]") #group your labels together
    all_var = (airp_elev,QNH,OAT) #group your vars together

    L0 = tkinter.Label(root, text = "Welcome to the density altutude calculator!", fg = "red").grid(row = 0, column = 1, sticky = "W", padx = 10, pady = 10)

    def calculateda():
        ad_elev = float(airp_elev.get())
        pres = float(QNH.get())
        temp = float(OAT.get())

        QNE = 1013
        isa_st = 15

        ad = ((QNE - pres) * 28)
        pa = ad_elev + ad

        st_pa = isa_st - (pa / 1000 * 2)

        hd = 120 * (temp - st_pa)
        da = round(pa + hd)

        labelresult = tkinter.Label(root, text = "The density altitude is: %.d ft" % da).grid(row = 7, column = 1, padx = 10, pady = 10)
        return 

    for num,i in enumerate(zip(all_labels, all_var),1): #enumerate through both lists
        label, entry = i #unpack the tuple i into two easy to read variables
        tkinter.Label(root, text = label).grid(row = num, column =0 , sticky = "W", padx = 10, pady = 10)
        tkinter.Entry(root, textvariable = entry, bd = 5).grid(row = num, column = 1)

    b1 = tkinter.Button(root, text = "Calculate density altitude", command = calculateda).grid(row = 4, column = 1, padx = 10, pady = 10)

   root.mainloop()


0 commentaires