Как засунуть функцию tkinter в новое окно? - PullRequest
0 голосов
/ 10 июля 2020
• 1000 к сожалению, у меня пустая метка в новом окне, и я не исправляю никаких ошибок, не могли бы вы мне помочь? Вот мой код и снимок экрана:
from tkinter import *
root = Tk()
root.title("Workload Staffing Calculator")
#Header 
headerlab = Label(root, text="Please fill the below form and click calculate to get the required staff.").grid(row=0,columnspan=2,pady=20,padx=20)

#Inputs names
vollabel = Label(root, text="Volumes").grid(padx=0,pady=10)
ahtlabel = Label(root, text="AHT (sec.)").grid(padx=0, pady=10)
Occlabel = Label(root, text="Occupancy (%)").grid(padx=0, pady=10)
Shrinklabel = Label(root, text="Shrinkage (%)").grid(padx=0, pady=10)
weekendlabel = Label(root, text="Days Off").grid(padx=0, pady=10)
Shiftlabel = Label(root, text="Shift Duration (h)").grid(padx=0, pady=10)

#Entry inptus
volentry = Entry(root, width=10, borderwidth=3)
ahtentry = Entry(root, width=10, borderwidth=3)
occentry = Entry(root, width=10, borderwidth=3)
shrinkentry = Entry(root, width=10, borderwidth=3)
weekendentry = Entry(root, width=10, borderwidth=3)
shiftentry = Entry(root, width=10, borderwidth=3)
#shoving inputs on screen
volentry.grid(row=1, column=1, padx=20)
ahtentry.grid(row=2, column=1, padx=20)
occentry.grid(row=3, column=1, padx=20)
shrinkentry.grid(row=4, column=1, padx=20)
weekendentry.grid(row=5, column=1, padx=20)
shiftentry.grid(row=6, column=1, padx=20)


#Calculate Fuction

def calstaff() : 

    v = volentry.get()
    a = ahtentry.get()
    o = occentry.get()
    s = shrinkentry.get()
    w = weekendentry.get()
    sh = shiftentry.get()
    required = (int(v) * int(a)) / (int(sh) * 3600)
    total = required * (7 / (7 - int(w))) * (1 + float(s))
    newwindow = Tk()
    newwindow.title("The required is: ")
    result = Label(newwindow, textvariable=total).pack()
    return result
#calculate button
calculate = Button(root, text="Calculate", command=calstaff)
calculate.grid(padx=20,pady=10)

root.mainloop()  

введите описание изображения здесь

1 Ответ

0 голосов
/ 12 июля 2020

Не рекомендуется использовать Tk() более одного раза, так как это может прервать поток основного l oop. Чтобы создать другое окно, вы должны попробовать использовать Toplevel()

Во-вторых, вместо textvariable используйте text

См. Код ниже:

.
..
def calstaff() : 

    v = volentry.get()
    a = ahtentry.get()
    o = occentry.get()
    s = shrinkentry.get()
    w = weekendentry.get()
    sh = shiftentry.get()
    required = (int(v) * int(a)) / (int(sh) * 3600)
    total = required * (7 / (7 - int(w))) * (1 + float(s))
    newwindow = Toplevel()                     #TOPLEVEL() USED
    newwindow.title("The required is: ")
    result = Label(newwindow, text=total)      #text instead of textvariable
    result.pack()
    newwindow.mainloop()                       #mainloop for newwindow
..

...