Python[Tkinter]应用程序未显示所有信息

Python[Tkinter]应用程序未显示所有信息,python,function,user-interface,tkinter,Python,Function,User Interface,Tkinter,我目前正在开发一个python tkinter应用程序,它允许用户使用GUI窗口向用户发送电子邮件。我运行的是Python3.4.2,已经创建了[log in]窗口和[compose message]窗口。在我的程序中,我创建了许多用户输入数据的条目,一个用于电子邮件、密码、消息、主题、收件人等。然后我有一个函数print()输出用户输入的所有数据。唯一的问题是控制台中只显示3/6的输入结果。有人能看看我的代码,告诉我出了什么问题吗。我的朋友们,请不要标记我的问题,我只是想了解为什么这不起作用,

我目前正在开发一个python tkinter应用程序,它允许用户使用GUI窗口向用户发送电子邮件。我运行的是Python3.4.2,已经创建了[log in]窗口和[compose message]窗口。在我的程序中,我创建了许多用户输入数据的条目,一个用于电子邮件、密码、消息、主题、收件人等。然后我有一个函数print()输出用户输入的所有数据。唯一的问题是控制台中只显示3/6的输入结果。有人能看看我的代码,告诉我出了什么问题吗。我的朋友们,请不要标记我的问题,我只是想了解为什么这不起作用,这样我就可以处理这个问题并将其发布到网上,如果你愿意,我可以将我的工作归功于你,如果这是你想要的;)下面我提供了控制台中输出的屏幕截图,以及我创建的两个不同窗口

代码:

屏幕截图:

第一个窗口

第二个窗口

控制台中的输出
问题的关键在于,当您第一次创建按钮时,您正在获取变量的值,此时“收件人”、“主题”和“消息”都为空

编写GUI的正确方法是在需要时获取值,而不是在需要之前。这样就不需要
lambda
;lambda很少是真正必要的,它使代码更难编写、更难理解和修改

另外,我的建议是不要使用StringVars,修改
testInfo
,以便在需要时获取数据。
StringVar
的使用只是您需要跟踪的另一个对象,并且完全没有必要,除非您正在利用这些对象的特殊功能(您没有)

只是一个额外的提示: 而不是定义根的最小和最大大小。您只需执行以下操作:

root.resizable(False, False)

第一个false代表x轴,另一个代表y轴。好的,谢谢,我会记住的。他们也做同样的事情,尽管这真的很重要。IMO将resizeable设置为False对用户非常不友好。我建议永远不要那样做。您不知道最终用户可能有什么字体或分辨率。我讨厌那些让我无法调整大小的应用程序。好吧,我得到了我想要的结果,但我不太明白你给我提供了什么。你能给我解释一下吗…>>>lambda是干什么的?如果我不使用stringvars(),我应该使用什么?还有,为什么在我创建按钮之前主题是空白的?你这是什么意思?@PamalMangat:如果你不知道lambda做什么,那就是你不应该使用它的额外原因。它创建一个匿名函数(def,但没有名称)。如果您不使用stringvars,您只需直接从entry widget本身获取数据。请帮我一个大忙,并向我解释如何在登录时找出用户输入的电子邮件和密码是否正确。如果不是的话,我想把他们锁在外面。请帮帮我!我的帐户已被禁止再问问题:(:)(@PamalMangat:不,对不起。Stackoverflow不是一个可以进行长时间讨论的代码编写服务或网站。既然你已经被禁止,最好的选择是等待禁令解除,然后尝试提高你的问题的质量,这样你就不会再次被禁止,然后再问一个新问题。我是等着被取消,还是必须做些什么?
def testInfo():
    reciever = to_Entry.get()
    email = email_Entry.get()
    password = password_Entry.get()
    sender = email_Entry.get()
    message = message_Entry.get()
    subject = subject_Entry.get()

    print("Email : " + email)
    print("Password : " + password)
    print("From : " + sender)
    print("To : " + reciever)
    print("Message : " + message)
    print("Subject : " + subject)

...
send_Button = tkinter.Button(..., command=testInfo)
root.resizable(False, False)