Tkinter中的全局变量

时间:2013-11-16 12:42:57

标签: tkinter

我是新手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()

2 个答案:

答案 0 :(得分:1)

要从Text获取文字,请使用

  • get(start,end)从文字
  • 获取文字
  • insert(position, text)将文字添加到文字

usrtext.insert(END, "Hello World")

print usrtext.get(1.0, END)

了解详情:The Tkinter Text Widget

顺便说一下:你将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()