(长问题)
我尝试编写一段代码,当按下按钮时,该代码将使用tkinter文本框从用户获取文件路径。然后它会将该文本框条目转换为附加到普通python变量的字符串,以便稍后在函数中使用该变量来使用该文件。我附加的代码可以使标签复制文本框条目,但我不能在"普通的python代码"中使用该变量或myvar。另外,在代码中我尝试通过mywarWritten函数返回myvar.get(),但我不能设置一个等于mywarWritten(参数)的变量,因为这取决于直到按钮是没有发生的文本框条目按下。当按下按钮时,打印功能可以打印语句,但当功能设置为等于尝试时,它不会返回。
(简称)
我想使用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()
感谢您的帮助。
答案 0 :(得分: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更好)。