Artyom_N
Окт. 6, 2019 01:12:41
Здравствуйте, хочу сделать окошко, которое через заданный промежуток времени выводит новую строку из текстового файла. Файл это просто англо-русский словарь. Пытаюсь запрограммировать этот процесс используя цикл, но программа не работает. Дело осложняется тем, что примеры в интернете относятся к старым версиям Питона и толком не помогают. Подскажите, пожалуйста, каким образом проще всего это сделать? У меня версия Питона 3.7.4.
import tkinter as tk
import time
f= open(“Dic.txt”,“r”, encoding=“utf-16”)
content = “test”
root = tk.Tk()
label1 = tk.Label(root, text= content)
label1.pack()
i = 1
while i < 1000:
content = f.readline(i)
time.sleep(1)
i = i + 1
root.update()
root.mainloop()
f.close()
doza_and
Окт. 6, 2019 08:04:27
Artyom_N
Подскажите, пожалуйста, каким образом проще всего это сделать?
Гораздо проще сделать без Tk. Будет у вас окошко - консоль и будут выводиться строки.
А то как вы делаете показывает что вы не понимаете как устроены любые GUI приложения и вам надо просто взять любую книжку и прочитать. Ну например
http://oez.es/wxPython%20in%20Action.pdf
Artyom_N
Окт. 6, 2019 13:04:13
Я действительно не понимаю, как устроены GUI) Но хотел бы разобраться для написания простых программ для себя. Идея с консолью хорошая, но нужно, чтобы окошко висело поверх других всегда, не скрывалось, не уверен что с консолью так получится, да и с Tк разобраться хочу. Тогда попробую спросить по другому. Какую версию Питона (выше 2-ой) легче всего будет изучить? Чтобы было много литературы и примеров? Установив самую свежую версию Питона я столкнулся с тем, что примеры программ созданные несколько лет назад просто не запускаются(( Для новичка это вызывает большие сложности. Сейчас поставил версию 3.5.1, посоветуйте книги под нее, кому не сложно.
panama555
Окт. 6, 2019 14:34:57
Вы не учли того, что каждый раз считывая строку из файла нужно обязательно её присвоить тексту в Label
Вот так будет работать
import tkinter as tk
import time
f= open("c:\\Dic.txt","r")
content = "test"
root = tk.Tk()
label1 = tk.Label(root, text= content)
label1.pack()
for ln in f:
label1["text"]=ln
time.sleep(1)
root.update()
root.mainloop()
f.close()
PEHDOM
Окт. 6, 2019 18:45:10
Artyom_N гуглите root.after()
Artyom_N
Окт. 6, 2019 19:48:00
Спасибо за помощь. В итоге нашел программу секундомера и перепилил ее под словарь)) Такой код заработал для Питона 3.5.2, буду улучшать дальше:
from tkinter import *
f= open(“Dic.txt”,“r”, encoding=“utf-8”)
temp = 100
after_id = ‘'
def start_dic():
global temp, after_id
after_id = root.after(120000, start_dic)
content = f.readline(temp)
label1.configure(text = (content))
temp += 1
root = Tk()
root.geometry(’500x90')
root.lift()
root.attributes('-topmost',True)
root.after_idle(root.attributes,'-topmost',True)
label1 = Label(root, font=“Arial 14”, width = 70,
height = 3, anchor=W)
label1.pack()
btn = Button(root, text=“go”, command = start_dic)
btn.pack()
root.mainloop()
f.close()
AD0DE412
Окт. 6, 2019 20:44:51