2016-11-24 2 views
1

Начинающий программист здесь, работая над созданием основного графического интерфейса, как часть учебника, в котором я следил онлайн, но никто из них не говорит, как получить текстовое поле для обновления с использованием вывода другие части вашего кода.Python Tkinter обновляет содержимое текстового поля с помощью функции

Я попробовал несколько других ответов на сайте, в том числе и с использованием StringVar's, который меня нигде не нашел, другой использовал декоратор, а остальное выглядело из моей глубины.

Вот мой код:

import tkinter as tk 

import time 
#Creating Root 
root = tk.Tk() 


#GUI TEMPLATE 


frame =tk.Frame(root, 
      height = 100, 
      width = 400) 
frame.pack() 
v = StringVar() 

colour = ["red","blue","green","white","yellow"] 
labels = range(5) 
#change number to change how many labels 
for i in range(5): 
    l= tk.Label(root, 
      text = colour[i], 
      bg = colour[i]) 
    l.place(x = 10 +i*70, y = 10, width=60, height=25) 




T1 = tk.Text(root, height=2, width=40) 
words = "Don't name your files after module names!" 
T1.insert(tk.END, textvariable=v) 

T1.place(x = 10, y= 40) 

S = tk.Scrollbar(root) 
S.config(command=T1.yview) 
S.place(x = 340, y=40) 

T1.config(yscrollcommand=S.set) 

root.mainloop() 

v.set("Something Else!") 

Теперь, что он должен вывести это ряд цветных этикеток, которая работает отлично, и текстовое поле с полосой прокрутки, который должен немедленно обновить читать «Something Else ! ', который не работает нормально.

Вместо этого я получаю следующее сообщение об ошибке:

NameError: имя «STRINGVAR» не определен

Я знаю, что означает эта ошибка, это просто я врезался в стену, когда речь заходит о поиске решения это работает для меня и не нуждается в докторантуре, чтобы понять.

То, что я прошу, это то, что кто-то может дать мне решение, которое будет работать для этого, и, надеюсь, объясните это!

Заранее спасибо.

EDIT: Таким образом, после фиксации ошибки синтаксиса, а затем выяснить, что я пытаюсь сделать, не работает, как бы я идти об этом?

Могу ли я использовать ярлык вместо этого? Или есть другой, лучший способ? Еще раз спасибо!

ответ

1

StringVar должен получить доступ через tk:

v = tk.StringVar() 

На другой ноте, tk.Text.insert не принимает параметр textvariable, так что следующее не будет работать:

T1.insert(tk.END, textvariable=v) 
#     ^^^^^^^^^^^^?? 

От docs:

Unlike for example the entry widget, text widgets don't support a "textvariable" configuration option

Также см. How can I connect a StringVar to a Text widget in Python/Tkinter?, почему это не сработает.

+0

Спасибо! Я никогда не думал попробовать и получить доступ к нему через tk. Что касается второй части, как работают текстовые переменные? Я не мог найти много онлайн, извините, чтобы задать другой вопрос! –

0

Я экспериментировал с изучением потоков с помощью Tkinter и сделал что-то для вставки и обновления текста в текстовом поле Tkinter в Python3, которое может помочь.

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

{ foo = input("Give me input: ") 
    self.T.delete("1.0", END) #Clear the text window so we can write. 
    self.T.insert(END,foo)  #Write the new text.} 
+0

Я попытался опубликовать весь файл, но форматирование было беспорядок. –

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