ScrolledText каждый раз создается заново при попытке вывода текста
При вызове функции vivod(res) каждый раз создается новое текстовое поле. Пытался вытащить создание это поля из функции, в результате печатает только первый вызов. Надо, чтобы все вызовы выводились в один ScrolledText
from tkinter import *
from tkinter.scrolledtext import ScrolledText
root = Tk() # создание окна #
wid_r = root.winfo_screenwidth() - 20
hei_r = root.winfo_screenheight()
root.geometry('{}x{}'.format(wid_r,hei_r))
res = [ # массив для проверки #
[1,2,3,4],
[5,6,7,8],
[4,2,1,3]
]
def vivod(res): # вывод в ScroledText # # !'ПРОБЛЕМКА ЗДЕСЬ'! #
st= ScrolledText(root, width=50, height=10)
st.insert(INSERT, '\n')
for i in res:
for j in i:
st.insert(INSERT,j)
st.insert(INSERT, '\t')
st.insert(INSERT, '\n')
st.configure(state='disabled')
st.pack()
def gauss_decision(res): # решение системы #
k = 1
while k != len(res)-1:
for i in range(1,len(res)):
q = res[i][0]
for j in range(len(res[0])):
res[i][j] = res[i][j] - (q/res[0][0] * res[0][j])
vivod(res)
if ((i == len(res)-1) and (j == len(res[0])-1)):
for ii in range(k+1, len(res)):
w = res[ii][k]
for jj in range(k, len(res[0])):
res[ii][jj] = res[ii][jj] - (w/res[k][k] * res[k][jj])
vivod(res)
k += 1
def result(event): # функции для вывода в ScrolledText по нажатию кнопки#
vivod(res)
gauss_decision(res)
button_result = Button(text = 'res') # Кнопка #
button_result.bind('<Button-1>',result)
button_result.place(x=100, y=10, height=30,
width=120)
root.mainloop()
Ответы (1 шт):
Выносите создание и размещение поля
ScrolledTextнаружу, туда где у вас кнопка создается, чтобы оно создавалось только один раз при старте, а не при каждом выводе.В заблокированное текстовое поле нельзя ничего вывести, поэтому перед записью в него нужно его разблокировать, записать, потом заблокировать опять.
Из-за того что у вас в коде стоит блокировка поля после вывода (но нет разблокировки до вывода), то срабатывает первый вывод, потом поле блокируется, и следующий вывод уже не срабатывает.
def vivod(res):
st.configure(state='normal')
st.insert(INSERT, '\n')
for i in res:
for j in i:
st.insert(INSERT,j)
st.insert(INSERT, '\t')
st.insert(INSERT, '\n')
st.configure(state='disabled')
...
button_result = Button(text = 'res') # Кнопка #
button_result.bind('<Button-1>',result)
button_result.place(x=100, y=10, height=30,
width=120)
st = ScrolledText(root, width=50, height=10, state='disabled')
st.pack()