【问题标题】:how to show the user's input in tkinter using message box? [duplicate]如何使用消息框在 tkinter 中显示用户的输入? [复制]
【发布时间】:2021-04-13 08:04:19
【问题描述】:

如何使用带有消息框标题的消息框在 Tkinter 中显示用户的输入?我正在使用不起作用的 get 方法,并通过在同样不起作用的显示信息中传递两个变量名称来使用普通方法。 下面是我正在使用的代码。

import tkinter as tk
from tkinter import ttk
import tkinter.messagebox as mbox

win = tk.Tk()
win.title('Pratice')

leb = ttk.Label(win, text='Enter the 1st details').grid(row=1, column=1)
leb2 = ttk.Label(win, text='Enter the 2nd details').grid(row=2, column=1)


entb = ttk.Entry(win).grid(row=1, column=2)
entb1 = ttk.Entry(win).grid(row=2, column=2)


def show():
    mbox.showinfo(entb, entb1)


btn = ttk.Button(win, text='Show', command=show).grid(row = 3, column = 1, columnspan=4)
btn1 = ttk.Button(win, text='Exit', command=exit).grid(row = 3, column = 3, columnspan=3)

win.mainloop()

【问题讨论】:

  • 向我们展示您正在使用的代码,这样我们就不会做出任何错误的假设。
  • 我看到了这个问题:entb = ttk.Entry(win).grid(row=1, column=2) 这个,如果你给类分配一个变量,然后立即在它上面使用一个方法,它就不起作用了。你必须做entb = ttk.Entry(win) 然后:entb.grid(row=1, column=2) 下一行。并且您还必须在函数定义中添加.get(),如下所示:mbox.showinfo(entb.get(), entb1.get())
  • 老兄,你为什么不接受编辑,我只是​​添加了 ``` 来格式化代码并且你正在删除它,让帖子看起来更糟(至少我认为是你)
  • 非常感谢您的帮助。实际上,我是堆栈溢出的新手,所以我尝试分别发布消息和代码,但我无法这样做,所以我只放了这样的代码和消息。

标签: python python-3.x tkinter tkinter-entry


【解决方案1】:

您的代码的工作版本:

import tkinter as tk
from tkinter import ttk
import tkinter.messagebox as mbox

win = tk.Tk()
win.title('Pratice')

# It is basically useless to store the return value of the 'grid' function in a variable since it returns nothing
# You should make an object of the widget NOT the widget's grid function. Also 'grid' rows and columns start at 0 not 1
leb = ttk.Label(win, text='Enter the 1st details')
leb.grid(row=0, column=0)
leb2 = ttk.Label(win, text='Enter the 2nd details')
leb2.grid(row=1, column=0)

entb = ttk.Entry(win)
entb.grid(row=0, column=1, columnspan=2)
entb1 = ttk.Entry(win)
entb1.grid(row=1, column=1, columnspan=2)


def show():
    mbox.showinfo(entb.get(), entb1.get())


btn = ttk.Button(win, text='Show', command=show)
btn.grid(row=2, column=1)
# Also if you want to destroy your GUI it is better to use 'win.destroy()' instead of 'exit()'
btn1 = ttk.Button(win, text='Exit', command=win.destroy)
btn1.grid(row=2, column=2)

win.mainloop()

您的代码不起作用的原因是您将变量设置为小部件的网格函数,而不是实际的小部件。网格函数基本上什么都不返回,这就是为什么当你把变量放在函数中时什么都没有出现的原因。除非你想做一些你不会在整个程序中配置的东西,否则按照上面的方法做总是更好。还有两个旁注:

  • 网格函数的行和列从 0 而不是 1 开始
  • 无论何时要结束图形用户界面,都应使用“win.destroy()”而不是“exit()”,因为退出将结束整个程序的 GUI

【讨论】:

  • 非常感谢。
  • @Laxmi 欢迎您。由于您是 stckoverflow 的新手,为了将答案标记为已选择的答案,以便其他人知道什么有效(至少对您而言),您必须单击帖子旁边的复选标记。很高兴我能帮上忙!
【解决方案2】:

就像 Matiiss 所说,如果您尝试为一个类实现一个方法,那么在将一个变量分配给一个类之后它就不会起作用。按照 Matiiss 在编辑中的建议,我相信此代码将满足您的目的。

它不漂亮,但它会工作。我想建议你研究一下如何在 python 中使用类的基础知识,如果有人阅读你的代码,它将有助于保持你的代码整洁和更容易解释。

import tkinter as tk
from tkinter import ttk
import tkinter.messagebox as mbox

win = tk.Tk()
win.title('Pratice')

leb = ttk.Label(win, text='Enter the 1st details').grid(row=1, column=1)
leb2 = ttk.Label(win, text='Enter the 2nd details').grid(row=2, column=1)


entb = ttk.Entry(win)
entb.grid(row=1, column=2)
entb1 = ttk.Entry(win)
entb1.grid(row=2, column=2)


def show():
    mbox.showinfo(entb.get(), entb1.get())


btn = ttk.Button(win, text='Show', command=show).grid(row = 3, column = 1, columnspan=4)
btn1 = ttk.Button(win, text='Exit', command=exit).grid(row = 3, column = 3, columnspan=3)

win.mainloop()

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多