честно говоря в ТК не силен, но как я понимаю тут дело не в цикле а в принципе работы Button-а(или mainloop ткинтера), вы не увидите результата нажатия пока процедура не отработает полностью и не вернет какойнибудь “финишед”… первое что приходит в голову это использовать threading
from tkinter import *
import time
import threading
root = Tk()
def run():
t1 = threading.Thread(target=cicle)
t1.start()
def cicle():
global texter, oper
for c in range(0, 10):
texter = texter + 'X'
oper["text"] = texter
#oper.pack(side='top', fill='x')
time.sleep(1)
texter = 'X'
oper = Label(root, text=texter, width=3, height=1)
oper.pack(side='top', fill='x')
start = Button(root, text='Start', command=run)
start.pack(side='bottom', fill='x')
root.mainloop()
ХЗ может ктото предложит более элегантное решение без многопоточности..