【问题标题】:How to shoving tkinter function result in a new window?如何将 tkinter 函数推入新窗口?
【发布时间】:2020-07-10 11:58:54
【问题描述】:

我正在尝试在 python 中使用 GUI tkinter 制作人员配备计算器新窗口中的空标签我也没有发现任何要修复的错误,请您帮帮我吗?这是我的代码和屏幕截图:

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()  

【问题讨论】:

  • 你不能使用textvariable=来引用一个普通的Python变量;这适用于 Tk Var 类型,例如 IntVarStringVar。只需使用text=。此外,您需要使用Toplevel() 而不是Tk() 来创建额外的窗口——第二次调用Tk() 创建一个完全独立的Tk 环境,由于在一个环境中定义的东西,您会遇到各种问题,因此在您尝试使用它们的环境中不可用。

标签: python user-interface tkinter tkinter-entry


【解决方案1】:

不建议多次使用Tk(),因为它会中断主循环的流程。要创建另一个窗口,您应该尝试使用Toplevel()

其次,用text代替textvariable

参考下面的代码:

.
..
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
..

【讨论】:

  • 我相信,顶层窗口不用说newwindow.mainloop()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 2012-06-08
相关资源
最近更新 更多