如何更正输入框的输出
How to correct the output from an entry box
当使用进纸器按钮时,F 运行s 的脚本在 'master' 框出现之前完全完成打印,然后对 'master' 的输入没有反应] 盒子。这导致输出为 0.0 kW,因为输入是一个长小数后跟一个 L,而我,用户输入的是 8777
我已经在互联网上漫游了大约一天,但没有找到任何东西。我对传统知识很陌生,但一直在努力学习它。
def F():
master = tk.Tk()
tk.Label(master, text = 'Feeder Number: ').grid(row=0)
entry1 = tk.Entry(master)
entry1.grid(row=0, column=1)
button2 = tk.Button(master,
text=' Confirm',
command=entry1.get())
button2.pack()
button2.grid(row=0, column=2)
fn = entry1.pack()
print fn
feed = filtered['Feeder']==fn
feedfn = filtered[feed]
Cap = feedfn['AC Name Plate Capacity <= 10kw']
Cap = Cap.astype(float)
AcPv = Cap.sum()
print 'The total PV on this feeder is:', AcPv, 'kW'
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
button = tk.Button(frame,
text='Exit',
fg='red',
command=quit)
button.pack()
button.grid(row=1, column=1)
Fee = tk.Button(frame,
text='Feeder',
command=F)
Fee.pack()
Fee.grid(row=0, column=1)
root.mainloop()
预计 27.702
输出 0.0
鉴于我不会发布 csv,
entry1/fn 应该是 8777
目前'none'
更新
我现在在打印 fn 时收到 PY_VAR 的输出,我知道代码在接受输入之前一直是 运行ning。关于如何在过滤器 运行 之前获取输入的任何建议?
def F():
master = tk.Tk()
tk.Label(master, text = 'Feeder Number: ').grid(row=0)
entry1 = tk.Entry(master)
entry1.grid(row=0, column=1)
button2 = tk.Button(master,
text=' Confirm',
command=entry1.get())
button2.grid(row=0, column=2)
fn = tk.IntVar()
print fn
feed = filtered['Feeder']==fn
feedfn = filtered[feed]
Cap = feedfn['AC Name Plate Capacity <= 10kw']
Cap = Cap.astype(float)
AcPv = Cap.sum()
print 'The total PV on this feeder is:', AcPv, 'kW'
对于那些对最终代码感兴趣的人(对我有用):
def F():
master = tk.Tk()
tk.Label(master, text = 'Feeder Number: ').grid(row=0)
entry = tk.Entry(master)
entry.grid(row=0, column=1)
def pint():
data = entry.get()
master.destroy()
feed = filtered['Feeder']==data
feedfn = filtered[feed]
Cap = feedfn['AC Name Plate Capacity <= 10kw']
Cap = Cap.astype(float)
AcPv = Cap.sum()
fdf = tk.Tk()
tk.Label(fdf, text = AcPv).grid(row=0)
button4 = tk.Button(fdf,
text = ' Exit',
fg='red',
command=fdf.destroy)
button4.grid(row=1)
button2 = tk.Button(master,
text=' Confirm',
command = pint)
button2.grid(row=0, column=2)
button3 = tk.Button(master,
text = ' Exit',
fg='red',
command=master.destroy)
button3.grid(row=0, column=3)
master.mainloop()
您的代码中存在一些错误,导致您收到不同的输出。
首先,为什么你的代码执行时没有显示主框:
如果你想要一个持久的 window,你的 tkinter 需要一个 mainloop() 调用。
master.mainloop()
你用你的根做了正确的,但你的主人缺少那个主循环。这一行基本上使您的 GUI 保持活动状态并循环遍历它以进行更改,直到它以一种或另一种方式被破坏。您需要在创建小部件后添加此行,以便能够与 window 进行交互。在此行之后写入的任何内容(但仍在定义中缩进)将在您的 window 关闭时执行,手动或使用命令:
master.destroy()
接下来,虽然这会产生一个工作 window,但您仍然可以在主 window 启动时与您的根 window 交互,如果您是,这可能会导致问题期待主人的变量。我建议您阅读专为像您这样的情况而制作的 Toplevel 小部件。 (http://effbot.org/tkinterbook/toplevel.htm) 或者,您也可以使用 tkinter 的 tkSimpleDialog.askinteger 或 askfloat 函数,这似乎非常适合您的应用程序。
最后,条目允许您编写文本,但是如何访问文本?您可以使用 Entry1.get() 来提取条目的内容,或者正如您在更新中开始做的那样,您可以为条目分配一个 tkinter 变量。当您更改条目中的写入字符串或数字时,此变量将更新。要将变量绑定到您的条目,您必须在条目的创建中声明它:
fn = tk.StringVar(value = '000')
entry1 = tk.Entry(master, textvariable = fn)
*注意,这将要求您的 fn 变量在输入之前进行初始化。此外,您可以在创建时为该变量初始化一个值
tkinter 变量是一个对象,这就是为什么当您打印它时,您会得到 PY_VAR。 (对象的类型)要访问值,需要使用get()方法:
print(fn.get())
当使用进纸器按钮时,F 运行s 的脚本在 'master' 框出现之前完全完成打印,然后对 'master' 的输入没有反应] 盒子。这导致输出为 0.0 kW,因为输入是一个长小数后跟一个 L,而我,用户输入的是 8777
我已经在互联网上漫游了大约一天,但没有找到任何东西。我对传统知识很陌生,但一直在努力学习它。
def F():
master = tk.Tk()
tk.Label(master, text = 'Feeder Number: ').grid(row=0)
entry1 = tk.Entry(master)
entry1.grid(row=0, column=1)
button2 = tk.Button(master,
text=' Confirm',
command=entry1.get())
button2.pack()
button2.grid(row=0, column=2)
fn = entry1.pack()
print fn
feed = filtered['Feeder']==fn
feedfn = filtered[feed]
Cap = feedfn['AC Name Plate Capacity <= 10kw']
Cap = Cap.astype(float)
AcPv = Cap.sum()
print 'The total PV on this feeder is:', AcPv, 'kW'
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
button = tk.Button(frame,
text='Exit',
fg='red',
command=quit)
button.pack()
button.grid(row=1, column=1)
Fee = tk.Button(frame,
text='Feeder',
command=F)
Fee.pack()
Fee.grid(row=0, column=1)
root.mainloop()
预计 27.702 输出 0.0 鉴于我不会发布 csv, entry1/fn 应该是 8777
目前'none'
更新 我现在在打印 fn 时收到 PY_VAR 的输出,我知道代码在接受输入之前一直是 运行ning。关于如何在过滤器 运行 之前获取输入的任何建议?
def F():
master = tk.Tk()
tk.Label(master, text = 'Feeder Number: ').grid(row=0)
entry1 = tk.Entry(master)
entry1.grid(row=0, column=1)
button2 = tk.Button(master,
text=' Confirm',
command=entry1.get())
button2.grid(row=0, column=2)
fn = tk.IntVar()
print fn
feed = filtered['Feeder']==fn
feedfn = filtered[feed]
Cap = feedfn['AC Name Plate Capacity <= 10kw']
Cap = Cap.astype(float)
AcPv = Cap.sum()
print 'The total PV on this feeder is:', AcPv, 'kW'
对于那些对最终代码感兴趣的人(对我有用):
def F():
master = tk.Tk()
tk.Label(master, text = 'Feeder Number: ').grid(row=0)
entry = tk.Entry(master)
entry.grid(row=0, column=1)
def pint():
data = entry.get()
master.destroy()
feed = filtered['Feeder']==data
feedfn = filtered[feed]
Cap = feedfn['AC Name Plate Capacity <= 10kw']
Cap = Cap.astype(float)
AcPv = Cap.sum()
fdf = tk.Tk()
tk.Label(fdf, text = AcPv).grid(row=0)
button4 = tk.Button(fdf,
text = ' Exit',
fg='red',
command=fdf.destroy)
button4.grid(row=1)
button2 = tk.Button(master,
text=' Confirm',
command = pint)
button2.grid(row=0, column=2)
button3 = tk.Button(master,
text = ' Exit',
fg='red',
command=master.destroy)
button3.grid(row=0, column=3)
master.mainloop()
您的代码中存在一些错误,导致您收到不同的输出。
首先,为什么你的代码执行时没有显示主框:
如果你想要一个持久的 window,你的 tkinter 需要一个 mainloop() 调用。
master.mainloop()
你用你的根做了正确的,但你的主人缺少那个主循环。这一行基本上使您的 GUI 保持活动状态并循环遍历它以进行更改,直到它以一种或另一种方式被破坏。您需要在创建小部件后添加此行,以便能够与 window 进行交互。在此行之后写入的任何内容(但仍在定义中缩进)将在您的 window 关闭时执行,手动或使用命令:
master.destroy()
接下来,虽然这会产生一个工作 window,但您仍然可以在主 window 启动时与您的根 window 交互,如果您是,这可能会导致问题期待主人的变量。我建议您阅读专为像您这样的情况而制作的 Toplevel 小部件。 (http://effbot.org/tkinterbook/toplevel.htm) 或者,您也可以使用 tkinter 的 tkSimpleDialog.askinteger 或 askfloat 函数,这似乎非常适合您的应用程序。
最后,条目允许您编写文本,但是如何访问文本?您可以使用 Entry1.get() 来提取条目的内容,或者正如您在更新中开始做的那样,您可以为条目分配一个 tkinter 变量。当您更改条目中的写入字符串或数字时,此变量将更新。要将变量绑定到您的条目,您必须在条目的创建中声明它:
fn = tk.StringVar(value = '000')
entry1 = tk.Entry(master, textvariable = fn)
*注意,这将要求您的 fn 变量在输入之前进行初始化。此外,您可以在创建时为该变量初始化一个值
tkinter 变量是一个对象,这就是为什么当您打印它时,您会得到 PY_VAR。 (对象的类型)要访问值,需要使用get()方法:
print(fn.get())