【问题标题】:Convert Tkinter textbox entry into Python Variable将 Tkinter 文本框条目转换为 Python 变量
【发布时间】:2017-05-15 07:46:10
【问题描述】:

(长问题)

我正在尝试编写一段代码,当按下按钮时,它将使用 tkinter 文本框从用户那里获取文件路径。然后它会将该文本框条目转换为附加到普通 python 变量的字符串,以便稍后我可以在函数中使用该变量来使用该文件。我附加的代码可以使标签复制文本框条目,但我不能在“普通 python 代码”中使用该变量或 myvar。此外,在代码中,我尝试通过函数 mywarWritten 返回 myvar.get(),但我无法设置等于 mywarWritten(parameters) 的变量,因为这取决于在按下按钮之前不会发生的文本框条目。按下按钮时,打印功能可以打印语句,但当功能设置为尝试时,它不会返回。

(简而言之)

我想使用 Tkinter 文本框从用户那里获取一个值或字符串,并将该条目用作普通的 Python 变量。最好仅在按下按钮时才获取文本框中的值。

from Tkinter import *
import Tkinter as tk

root = Tk()
root.title("MyApp")

myvar = StringVar()

def mywarWritten(*args):
    print "mywarWritten",myvar.get()
    please = myvar.get()
    return please

#trying to make the function return the textbox entry but fails
attempt = mywarWritten()
print "plz %s" % (attempt)

#trying to just set it equal too but also fails
python_variable = myvar.get()
label = Label(root, textvariable=myvar)
label.pack()

text_entry = tk.Entry(root, textvariable=myvar)
button1 = tk.Button(root, text="Back to Home", command=lambda: mywarWritten()) 
button1.pack()
text_entry.pack()

#trying attempt and pythonvariable in "normal python code"
print attempt
print pythonvariable
root.mainloop()

提前感谢您的帮助。

【问题讨论】:

  • 分配给按钮的函数无法返回值,因为没有人可以接收此变量。行attempt = ...python_variable = ... 是无用的,因为当Entry 仍然为空时,它们在脚本开始时执行。您必须了解,只有分配给 Button 或其他小部件的函数内部的代码才有意义。函数之外的所有内容都只执行一次 - 在脚本开始时 - 并且仅用于构建 GUI。
  • 谢谢你,这很有意义。因此,与其尝试将文本输入带出,不如将与按钮相关的功能(未显示)带入正确?
  • 是的,你必须在函数内部做所有事情。
  • 谢谢 furas,我期待着明天早上试试这个。

标签: python python-2.7 tkinter


【解决方案1】:

您似乎对范围、导入、引用和函数有一些误解。 myvar 已经可以访问了,您只需get() 即可访问它。不要多次导入同一个模块,尽量避免from x import *。将值返回给按钮没有任何意义,也没有任何效果。不在函数或类中的每一行代码都会立即执行,因此attempt = mywarWritten() 和其他所有你在函数外执行的代码将在程序运行后立即获得StringVar 的值,在没有任何东西之前在里面。而lambda: func() 就是func

import Tkinter as tk

root = tk.Tk()
root.title("MyApp")

myvar = tk.StringVar()

def mywarWritten(*args):
    print "mywarWritten", myvar.get()

label = tk.Label(root, textvariable=myvar)
label.pack()

text_entry = tk.Entry(root, textvariable=myvar)
button1 = tk.Button(root, text="Back to Home", command=mywarWritten) 
button1.pack()
text_entry.pack()

root.mainloop()

任何时候您想访问该条目小部件的内容,只需执行myvar.get() 即可。

你也有mywarWritten而不是my_var_written,用v代替var

总的来说,我非常强烈建议您阅读official Python tutorial(并使用 Python 3,因为它比 Python 2 更好)。

【讨论】:

  • 对于简单的错误,我深表歉意。我尝试了很多东西,结果变得一团糟,但我不想删除它,否则我会忘记我做了什么。我尝试整理它,但显然忽略了一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多