如何在顶层窗口中创建条目输入

时间:2018-02-28 17:55:22

标签: python python-3.x tkinter

我有一个问题,无法理解它。如何在python中使用tkinter按下按钮创建子窗口我可以输入值,例如:

import tkinter
root = Tk()
Button(root, text='Bring up Message', command=Window).pack()
root.mainloop()

def messageWindow():
win = Toplevel()
-------->calculate------
Label(win, text=message).pack()
Button(win, text='OK', command=win.destroy).pack()

在消息窗口中,我希望有两个输入字段,我可以输入a和b,然后它应该计算a + b并给我结果。

谢谢。

2 个答案:

答案 0 :(得分:0)

首先,您应该使用from tkinter import *,因为在您的脚本中使用的模块类之前没有tkinter.

另外,您的“Bring up Message”按钮是否应该调用messageWindow()功能?现在它正在调用一个未定义的函数Window。如果是这样,您应该更改Button's命令并将messageWindow()函数移到创建按钮的行上方,否则它将在定义函数之前调用该函数并生成错误。

Tkinter中Entry小部件的语法如下:

entry = Entry(root, *options)
entry.pack()

定义后,您需要pack()条目窗口小部件。如果您pack()它在您定义的同一行上,它将无法检索其中的输入,因为它将成为NoneType对象。

您需要至少两个Entry小部件,一个用于输入输入a,另一个用于输入输入b

您还可以添加第三个Entry来打印ab之和的结果,但您可以使用标签或只将其打印到控制台。< / p>

entry_a = Entry(win)
entry_a.pack()

entry_b = Entry(win)
entry_b.pack()

# Optional answer entry
entry_ans = Entry(win)
entry_ans.pack()

然后你应该创建一个函数(仍在messageWindow()函数中),它将从两个条目中检索输入并添加它们,以及另一个Button来调用该函数。我以try的形式实现了一些额外的错误检查 - 除了当条目为空或包含除整数之外的其他内容时:

def add():
    try:
        a = int(entry_a.get())
        b = int(entry_b.get())
        ab_sum = a + b

        # Optional printing to answer entry
        entry_ans.delete(0, 'end')
        entry_ans.insert(0, ab_sum)
    except:
        pass      

Button(win, text="Add", command=add).pack()

答案 1 :(得分:0)

  

“如何在顶层窗口中创建条目输入”

import tkinter as tk
...
toplevel = tk.Toplevel(...)
tk.Entry(toplevel)
  

“如何按下按钮创建子窗口......”

import tkinter as tk
...
def create_child_window(widget):
    tk.Toplevel(widget)

...
root = tk.Tk()
tk.Button(root, command=lambda w = root: create_child_window(w))