我是新手Python / Tkinter用户,并不清楚如何传递小部件内容。 我认为usrtext是一个全局变量 - 但它打印一个空字符串。但是,Text有真实的内容。 正确传递的方式是什么?
class App(object):
def __init__(self, root):
frame = Frame(root)
frame.grid()
usrtext = Text(bg = "light yellow", fg = "black",relief=SUNKEN)
usrtext.grid(row=0, columnspan=16, rowspan=2, sticky=W+E+N+S, padx=5, pady=5)
...
...
def do_it():
print usrtext // I'd like to see usrtext _here_
...
...
root = Tk()
root.title("My First Attempt")
usrtext=StringVar()
usrtext=""
...
...
butt1 = Button(root, text='Do it', height=1, width=10, relief=RAISED, command=do_it)
butt1.grid(row=4, column=14)
app = App(root)
root.mainloop()
答案 0 :(得分:1)
要从Text
获取文字,请使用
get(start,end)
从文字insert(position, text)
将文字添加到文字 usrtext.insert(END, "Hello World")
print usrtext.get(1.0, END)
顺便说一下:你将usrtext
用于两个元素
usrtext=StringVar()
usrtext=Text()
所以在一瞬间usrtext在其他StringVar
中是Text
- 我认为这不是你所期望的。
答案 1 :(得分:1)
尝试将所有内容放入应用程序类中,然后您可以通过self引用小部件。你在多个地方有相同的变量名,但它们没有引用相同的东西。
import Tkinter
class Application(Tkinter.Frame):
def __init__(self, master):
Tkinter.Frame.__init__(self, master)
self.parent = master
frame = Tkinter.Frame(self)
self.user_text = Tkinter.Text(frame, relief=Tkinter.SOLID, borderwidth=2)
self.user_text.grid(
row=0,
columnspan=16,
rowspan=2,
sticky=Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S,
padx=5,
pady=5)
self.butt1 = Tkinter.Button(frame, text='Do it!', command=self.do_it)
self.butt1.grid(row=2, columnspan=16)
frame.pack(fill=Tkinter.BOTH, expand=1, side=Tkinter.BOTTOM)
self.pack(fill=Tkinter.BOTH, expand=1)
def do_it(self):
user_text_string = self.user_text.get(1.0, Tkinter.END)
print user_text_string
def main():
root = Tkinter.Tk()
app = Application(root)
app.mainloop()
if __name__ == '__main__':
main()