2013-11-16 3 views
2

Я начинающий пользователь Python/Tkinter и не понимаю, как передать содержимое виджета. Я предположил, что usrtext - это глобальная переменная, но печатает пустую строку. Однако текст имеет реальный контент. Каков правильный путь?глобальная переменная в Tkinter

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() 

ответ

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 в других TextStringVar - Я думаю, что это не то, что вы ожидаете.

+0

Благодарим вас за назначение! – user2469202

1

Попробуйте положить все в свой класс приложения, после чего вы можете ссылаться на виджеты через себя. У вас есть одно и то же имя переменной в нескольких местах, но они не относятся к одному и тому же.

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() 
+1

+1 Хороший пример того, как должен выглядеть код. – furas

+0

@furas Хе-хе, я немного ОКР о некоторых вещах ... – Fiver

+0

У меня было то же самое, когда я ответил на вопросы PyGame. Теперь я устал от этого. – furas

Смежные вопросы