【问题标题】:How to create entry inputs in a toplevel window如何在顶层窗口中创建条目输入
【发布时间】:2018-02-28 17:55:22
【问题描述】:

我有一个问题,无法解决。如何在 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 并给我结果。

谢谢。

【问题讨论】:

  • 请缩小问题范围。

标签: python python-3.x tkinter


【解决方案1】:

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

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

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

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

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

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

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

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 以调用该函数。我以尝试的形式实现了一些额外的错误检查,除非条目为空白或包含整数以外的内容:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多