使用进纸器按钮时,F的脚本会在“主”框出现之前完全贯穿到打印,然后不对“主”框的输入做出反应。这导致输出为0.0 kW,因为输入是一个十进制小数,后跟一个L,当用户输入I时,它是8777
我已经在互联网上漫游了大约一天,没有任何运气。我对TK非常陌生,但是一直在尝试学习。
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
更新 我现在在打印fn时收到PY_VAR的输出,我知道代码在输入之前一直一直运行。在运行过滤器之前如何获取输入的任何建议?
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()
答案 0 :(得分:0)
您的代码中存在一些错误,导致您收到的输出有所不同。
首先,为什么在不显示主框的情况下执行代码:
如果您想要一个持久窗口,您的tkinter需要一个mainloop()调用。
master.mainloop()
您的根目录是正确的,但是您的主目录缺少该mainloop。这行基本上是使GUI保持活动状态并循环进行更改直到它以一种或另一种方式销毁为止。您需要在创建窗口小部件后添加此行,以便能够与窗口进行交互。关闭窗口后,将手动或通过以下命令执行此行之后(但仍在定义中缩进)的所有内容:
master.destroy()
接下来,尽管这将产生一个工作窗口,但是您仍然可以在主窗口打开时与根窗口进行交互,如果您希望主窗口提供变量,则可能会导致问题。我建议您阅读有关专门针对像您这样的情况的“顶级”窗口小部件的信息。 (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())