Python控制台输出到变量

时间:2016-05-18 11:35:22

标签: python python-3.x tkinter

我在这个网站上看到了一些帖子,其他一些涉及类似主题的帖子似乎并没有达到我想用的python v3的结果。我的目标是有一个弹出窗口,其中包含两个用户名和密码的输入框,然后我可以将其输出为名为username和password的变量,然后依次用于登录我已编写脚本的网站。我到目前为止的代码是:

from tkinter import *

def show_entry_fields():
   print("Username: %s\nPassword: %s" % (e1.get(), e2.get()))

master = Tk()
Label(master, text="Username").grid(row=0)
Label(master, text="Password").grid(row=1)

e1 = Entry(master)
e2 = Entry(master)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Submit', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)

在按下提交并让这两行成为变量之后,我正在研究如何获取控制台中显示的输出?任何帮助或建议将不胜感激。提前谢谢,

詹姆斯

3 个答案:

答案 0 :(得分:2)

您可以使用tkinter的变量:

username = StringVar()
password = StringVar()

然后在定义entrys时,添加参数textvariable

e1 = Entry(master, textvariable = username)
e2 = Entry(master, textvariable = password)

要从此变量中获取值,请在其上调用.get()函数。

答案 1 :(得分:1)

我想你的问题是“如何在自毁窗口上访问?” - 你没有。

第一种方法

你在之前访问它它会自行销毁。

那是怎么回事? - 您将子项(弹出窗口)中的事件和事件绑定到父项,一旦触发了提交按钮,就会生成事件作为父母的通知,例如“我很快就会被销毁”(请参阅​​{{3 }})。

一个非常重要的事情 - 窗口不能破坏自己,只要它应该返回一些东西。父母在从中检索数据后将其杀死。

第二种方法

你使用例如tkinter.StringVar用于存储您的数据。

但是你的弹出窗口中没有它们,而是在你的父窗口小部件中,所以即使Entry小部件被破坏它们也能存活。

对于这种方法,请使用this question answered by Bryan Oakley for more info中的信息,但在施工期间将其传递给弹出窗口,作为父母内部存储的参数。

答案 2 :(得分:1)

您还需要使用lambda将参数发送到子例程。试试这个:

from tkinter import *

def show_entry_fields(v1, v2):
   print("Username: %s\nPassword: %s" % (v1.get(), v2.get()))


if __name__ == "__main__":
  master = Tk()
  Label(master, text="Username").grid(row=0)
  Label(master, text="Password").grid(row=1)

  v1 = StringVar()
  v2 = StringVar()

  e1 = Entry(master, textvariable=v1)
  e2 = Entry(master, textvariable=v2)

  e1.grid(row=0, column=1)
  e2.grid(row=1, column=1)

  Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
  Button(master, text='Submit', command=(lambda : show_entry_fields(v1, v2))).grid(row=3, column=1, sticky=W, pady=4)

  master.mainloop()

更新:我想我应该像我讲道一样,所以我在主要部分添加了一个本地语境。