Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 8, 2019 20:14:18

Ivansr
Зарегистрирован: 2019-02-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

цикл в tkinter с button

 Здравствуйте! Новичок. не могу разобраться, как реализовать следующую идею по написанию приложения в tkinter (и возможно ли это вообще в такой логической реализации)
идея следующая (показываю сокращенно)
list_main =[quote][][quote]
def xxx():
     for x in range(1,20):      для примера взят range (в программе около 30 итераций)
       несколько полей Entry и label
       a = Entry()
       b = Entry()
       list =[quote][a,b][/quote]
       Button(command = lambda a=list : y(a) )
def y(a):
   d = a[0].get()
   c = a[1].get()
   list_main.append(d)
   list_main.append(c)
вопрос: как сделать так, чтобы цикл останавливался на кнопке и продолжался после ее нажатия?

Отредактировано Ivansr (Июнь 8, 2019 20:17:37)

Офлайн

#2 Июнь 8, 2019 21:09:09

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

цикл в tkinter с button

Ivansr вы подходите не с той стороны, tkinter событийно ориентированая библиотекаи работать нужно в ней стоветвенно.

 def  btn_click():
         list_main.append([a.get(), b.get()])
        
root = tkinter.Tk()
a = Entry()
b = Entry()
Button(command = btn_click )
root.mainloop()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 8, 2019 21:09:34)

Офлайн

#3 Июнь 8, 2019 21:19:27

Ivansr
Зарегистрирован: 2019-02-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

цикл в tkinter с button

PEHDOM
Ivansr вы подходите не с той стороны, tkinter событийно ориентированая библиотекаи работать нужно в ней стоветвенно.
я так и делал для одного события. Это понятно.
вопрос в том, как это реализовать в цикле, когда после каждого нажатия кнопки должны извлекаться данные из полей ввода.
затем создаются новые поля для заполнения снова с кнопкой снятия данных
если запускать в одном окне по циклу, то эти 30 итераций просто проходят одна за одной и данные снять можно только с последней. Не получается остановить программу на кнопке

Офлайн

#4 Июнь 8, 2019 21:35:28

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

цикл в tkinter с button

Ivansr
затем создаются новые поля для заполнения снова с кнопкой снятия данных
а старые поля и кнопка куда деваються? они должны оставаться? тога като так:
  def  btn_click():
        Global count
        list_main.append([a[count].get(), b[count].get()])
        count+=1
        a.append(Entry())
        b.append(Entry())
        btn.append(Button(command = btn_click ))
            
root = tkinter.Tk()
a, b, btn = [],[],[]
count = 0
a.append(Entry())
b.append(Entry())
btn.append(Button(command = btn_click ))
root.mainloop()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 8, 2019 21:38:17)

Офлайн

#5 Июнь 8, 2019 21:51:33

Ivansr
Зарегистрирован: 2019-02-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

цикл в tkinter с button

старые поля по замыслу стираются и на их месте появляются новые в цикле в том же окне Toplevel()

list = wnd2.grid_slaves()
for l in list:
l.destroy()

пробовал вставлять функцию окно2.wait_variable(список снятия данных), ожидая, что цикл продолжит работу и выведет новые поля после удаления старых, но программа не возвращается потом на тоже место в цикле.
не понял до конца как работает.
попробую Ваш вариант как то пристроить
если есть время, посмотрите эти две функции:

def choice_progr(con,cur,stng,root,wnd2,m,lst):
# получение результатов предыдущего окна (весов гирь)
lst2 =
for xx in lst:
a = xx.get()
lst2.append(a)
wh,wl,n = ,,lst2
if lst2 == 1: wh.append(32)
if lst2 == 1: wh.append(28)
if lst2 == 1: wh.append(24)
if lst2 == 1: wl.append(20)
if lst2 == 1: wl.append(18)
if lst2 == 1: wl.append(16)
# обнуление вспомогательного окна
list = wnd2.grid_slaves()
for l in list:
l.destroy()

# отработка нового окна
progr = {}
with open('plan_workout.json') as fl:
progr_before = json.load(fl)# загрузка словаря предыдущего цикла
x = 0 # ряд в grid

for listEx_id in stng.list_exx():# цикл для каждого упражнения (их 30)
txt2 = ff.full_name(con, cur, listEx_id) # получает имя упр
m.lbl_3(wnd2,txt2,x,0,6,1)# выводит имя упр
x=x+1
if listEx_id in stng.list_ex_ket_wh: # цикл для гиревых упр
for y in wh:
w=y
b = data_ex(listEx_id,progr_before,w,con,cur,stng)
ms = show_result_before(listEx_id,con,cur,w,stng)
txt2 = str(y) + ‘ кг’
m.lbl_3(wnd2,txt2,x,0,1,1)
m.lbl_3(wnd2,'60%',x,1,1,1)
b1 = m.entry_1(wnd2,b,x,2)
m.lbl_3(wnd2,'80%',x,3,1,1)
b2 = m.entry_1(wnd2,b,x,4)
m.lbl_3(wnd2,'100%',x,5,1,1)
b3 = m.entry_1(wnd2,b,x,6)
x=x+1

m.lbl_3(wnd2,ms,x,0,6,1)
x=x+1
list_ex=
m.btn_3(wnd2,'Ok',lambda a=progr,b=list_ex,c=wnd2,d=m :
save_ex(a,b,c,d),4,x,4,1,1)
print('цикл остановился')
wnd2.wait_variable(list_ex)
print('цикл работает') — это сообщение не выводится
x=+1
def save_ex(progr,list_ex,wnd2,m):
# сохраняет данные по упр в словарь
listEx_id, w = list_ex, list_ex
b1 = list_ex.get()
b2 = list_ex.get()
b3 = list_ex.get()
progr =
#wnd2.destroy()
list = wnd2.grid_slaves()
for l in list:
l.destroy()
— после этого момента не возвращается к циклу

Отредактировано Ivansr (Июнь 8, 2019 21:52:33)

Офлайн

#6 Июнь 8, 2019 22:39:28

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

цикл в tkinter с button

Ivansr
старые поля по замыслу стираются и на их месте появляются новые в цикле в том же окне
хмм тогда вообще не понимаю, зачам лохматить бабушку стирать старые поля, и на их меcте рисовать новые, Да и еще окно каждый раз пересоздавать. просто очищайте значения в старых полях и все..
  def  btn_click():
         list_main.append([a.get(), b.get()])
         a.delete(0, 'end')        
         b.delete(0, 'end')        
root = tkinter.Tk()
a = Entry()
b = Entry()
Button(command = btn_click )
root.mainloop()

Ivansr
если есть время, посмотрите эти две функции:
код нечитаем , используйте теги
[code python][/code]
чтобы сохранить форматирование



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 8, 2019 22:44:04)

Офлайн

#7 Июнь 9, 2019 20:41:08

Ivansr
Зарегистрирован: 2019-02-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

цикл в tkinter с button

спасибо! Предложение с счетчиком (переменная count), оказалось на удивление простым и работоспособным, вместо цикла for для данного случая.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version