Дизайн:
Чтобы решить проблему, вам необходимо разработать это простое решение:
- восстановить текст
Tkinter.Entry
виджета с помощью get()
метода.
- добавить текст, который вы получили в ,
Main_Q
используя append()
метод.
- свяжите кнопку, которая обновляется по щелчку и
Main_Q
, и ваш графический интерфейс с использованием метода command
.
- создать новый Tkinter.Виджет метки, установите его текст в значение, которое вы получили в 1, и увеличите его соответствующую строку в графическом интерфейсе.
Я предпочитаю, чтобы организовать свой код в класс, который содержит конструктор, где Main_Q
инициализируется так, что мы называем initialize_user_interface()
для инициализации графического интерфейса пользователя с его тремя элементами:
def __init__(self, parent):
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.Main_Q = ["read", "clean dishes", "wash car"]
self.r = 0 # position of the row of each label
self.initialize_user_interface()
Метод initialize_user_interface()
делает то, что его имя говорит. Мы главным образом связать функцию update_gui()
, которая вставляет новую метку с текстом набора на то, что пользователь вводит в Tkinter.Entry
виджет с помощью command = self.update_gui
ef initialize_user_interface(self):
self.parent.title("Update GUI")
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
for e in self.Main_Q:
Tkinter.Label(self.parent, anchor = Tkinter.W, text = e).grid(row = self.r, sticky = Tkinter.W)
self.r+=1
self.entry_text = Tkinter.Entry(self.parent)
self.entry_text.grid(row = 0, column = 1)
self.button_update = Tkinter.Button(self.parent, text = "Update", command = self.update_gui).grid(row = 1, column = 1, sticky = Tkinter.E)
Наконец, ничего проще, чем update_gui()
функция:
def update_gui(self):
self.r+=1 # increment the row reserved to the new label
self.Main_Q.append(self.entry_text.get())
Tkinter.Label(self.parent, anchor = Tkinter.W, text = self.entry_text.get()).grid(row = self.r, sticky = Tkinter.W)
Программирование приложение:
Вот полная программа:
'''
Created on Mar 11, 2016
@author: Bill BEGUERADJ
'''
import Tkinter
class Begueradj(Tkinter.Frame):
def __init__(self, parent):
Tkinter.Frame.__init__(self, parent)
self.parent = parent
self.main_queue = ["read", "clean dishes", "wash car"]
self.r = 0
self.initialize_user_interface()
def initialize_user_interface(self):
self.parent.title("Update GUI")
self.parent.grid_rowconfigure(0, weight = 1)
self.parent.grid_columnconfigure(0, weight = 1)
for e in self.main_queue:
Tkinter.Label(self.parent, anchor = Tkinter.W, text = e).grid(row = self.r, sticky = Tkinter.W)
self.r+=1
self.entry_text = Tkinter.Entry(self.parent)
self.entry_text.grid(row = 0, column = 1)
self.button_update = Tkinter.Button(self.parent, text = "Update", command = self.update_gui).grid(row = 1, column = 1, sticky = Tkinter.E)
def update_gui(self):
self.r+=1
self.main_queue.append(self.entry_text.get())
Tkinter.Label(self.parent, anchor = Tkinter.W, text = self.entry_text.get()).grid(row = self.r, sticky = Tkinter.W)
def main():
root = Tkinter.Tk()
b = Begueradj(root)
root.mainloop()
if __name__ == "__main__":
main()
Демо:
Вот скриншот запущенной программы:
Примечание:
Я закодирован предыдущую программу с помощью Python 2.7, так что если вы хотите, чтобы проверить его , пожалуйста, измените Tkinter
на tkinter
. Все остальное остается прежним.
Добрый день Sense4. Спасибо за комментарии и направление. Я сделал то, что вы просили меня сделать, чтобы поставить цикл for в кнопку «Обновить». Теперь он обновляется в цикле for, но он все еще не печатает то, что я ввел. Например, если я набираю «душ», он печатает «PY_VAR1». И в IDLE он печатает ". Еще раз спасибо. После этого выяснилось, что я начну узнавать, как использовать функцию« destroy »и кнопку Return для обновления. «Сначала мои, чтобы увидеть, могу ли я это понять. :) –
fishtang
Эй, для этого вам стоит взглянуть на мои примечания о добавлении. Я не знаю, возможно ли это также с помощью stringVar, но я всегда использую метод, который у меня есть упомянутый там для записи. Удачи. – Sens4