首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更正输入框中的输出

如何更正输入框中的输出
EN

Stack Overflow用户
提问于 2019-06-13 16:21:43
回答 1查看 65关注 0票数 1

当使用馈线按钮时,F的脚本在“主”框出现之前完全贯穿到打印,然后对来自“主”框的输入没有反应。这导致输出为0.0 kW,因为输入是长小数,后面是L,当I,用户输入为8777时

我已经在网上闲逛了大约一天了,什么都没找到。我对传统知识很陌生,但一直在努力学习。

代码语言:javascript
复制
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的输出,我知道在输入之前,代码一直在运行。对于如何在过滤器运行之前接受输入,有什么建议吗?

代码语言:javascript
复制
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'

对于那些对最终代码感兴趣的人(这对我有用):

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 20:42:43

代码中有几个错误,导致了不同的输出。

首先,为什么在不显示主框的情况下执行代码:

如果您想要一个持久窗口,您的tkinter需要一个mainloop()调用。

代码语言:javascript
复制
master.mainloop()

你用你的根做了正确的事情,但是你的主人缺少这个主循环。这一行基本上是让您的GUI保持活力,并在其上循环进行更改,直到它以某种方式被破坏。您需要在创建小部件之后添加这一行,以便能够与窗口进行交互。在此行之后写入的任何内容(但仍在定义中缩进)将在关闭窗口时执行,无论是手动还是使用命令:

代码语言:javascript
复制
master.destroy()

接下来,尽管这将产生一个工作窗口,但在主窗口打开时,您仍然可以与根窗口交互,这可能会导致问题,如果您期望从主窗口中获得变量。我建议您阅读Toplevel小部件,它是专为像您这样的情况而制作的。(http://effbot.org/tkinterbook/toplevel.htm)或者,您也可以使用tkinter的tkSimpleDialog.askinteger或任务浮点函数,这些函数看起来非常适合您的应用程序。

最后,条目允许您编写文本,但是如何访问文本呢?您可以使用entry 1.get()提取条目的内容,也可以在更新中开始为条目分配tkinter变量。在更改条目中的写入字符串或数字时,将更新此变量。要将变量绑定到条目,必须在条目的创建中声明它:

代码语言:javascript
复制
fn = tk.StringVar(value = '000')
entry1 = tk.Entry(master, textvariable = fn)

*注意,这将要求在输入之前初始化fn变量。此外,您还可以在创建时初始化该变量的值。

tkinter变量是一个对象,这就是为什么在打印它时得到PY_VAR的原因。(对象的类型)要访问值,需要使用get()方法:

代码语言:javascript
复制
print(fn.get())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56584784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档