Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » tkInter повторение Frame с содержимым [RSS Feed]

#1 Янв. 17, 2011 12:51:27

sligel
От:
Зарегистрирован: 2010-12-15
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

tkInter повторение Frame с содержимым

Доброго времени суток.
У меня есть фрейм с картинкой

import tkinter
fenst=tkinter.Tk()
im=tkinter.PhotoImage(file="tab_row.gif")

fr1=tkinter.Frame(fenst,relief="groove",bd=2,width=100,height=30)
fr1.grid(row=0,column=0)
lab=tkinter.Label(fr1,image=im).pack()

fenst.mainloop()
я пытаюсь сделать так что бы в зависимости от желания пользователя,
можно было увеличить количество фреймов с картинками
from tkinter import *
fenst=Tk()
im=PhotoImage(file="tab_row.gif")
n=3
row_={}
for i in range(n):
row_[i]={}
row_[i]['frame']='Frame(fenst,relief="groove",bd=2,width=100,height=100).grid(row=i,column=0)'
row_[i]['labBild']="Label(eval(row_[i]['frame']),image=im).pack()"

eval(row_[i]['frame'])
eval(row_[i]['labBild'])

fenst.mainloop()
понять не могу как это можно осуществить.



Офлайн

#2 Янв. 17, 2011 13:26:48

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

tkInter повторение Frame с содержимым

непонятно для чево eval

# coding: utf8
import Tkinter as tkinter



fenst=tkinter.Tk()
im=tkinter.PhotoImage(file="tab_row.gif")

n = 3
frames = []
for i in range(n):
fr = tkinter.Frame(fenst, relief="groove", bd=2, width=100, height=30)
fr.grid(row=0, column=i)
lab = tkinter.Label(fr, image=im).pack()
frames.append(fr)

fenst.mainloop()
вот както так



Офлайн

#3 Янв. 17, 2011 14:40:21

sligel
От:
Зарегистрирован: 2010-12-15
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

tkInter повторение Frame с содержимым

спасибо, немного изменил что бы был доступ к свойствам отдельных виджетов в Frame

import tkinter

fenst=tkinter.Tk()
im1=tkinter.PhotoImage(file="tab_row.gif")
im2=другая картинка
n = 3
frames = []
buton=[]
for i in range(n):
fr = tkinter.Frame(fenst, relief="groove", bd=2, width=100, height=30)
fr.grid(row=i, column=0)
lab = tkinter.Label(fr, image=im1)
lab.pack()
but=tkinter.Button(fr,text="blabla")
but.pack()
frames.append(fr)
buton.append(but)

buton[1].configure(text='bububu')
fenst.mainloop()
или можно было как то по другому, например без создания списка поменять картинку в lab во втором фрейме,
как на примере с buton



Офлайн

#4 Янв. 17, 2011 14:43:13

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

tkInter повторение Frame с содержимым

lab = tkinter.Label(fr, image=im1)
создаете PhotoImage тоже в цикле и подставляете нужную картинку



Офлайн

#5 Янв. 17, 2011 16:08:07

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

tkInter повторение Frame с содержимым

sligel, по моему, более правильный вариант:

buttons={}
.....
buttons[i]=tkinter.Button(fr,text="blabla")
buttons[i].pack()
....
labels[2]['image']=img2
Я все думаю, кошерен ли ваш подход, в списках остаются ведь лишь ссылки на объекты….



Отредактировано (Янв. 17, 2011 16:10:47)

Офлайн

#6 Янв. 17, 2011 16:52:41

sligel
От:
Зарегистрирован: 2010-12-15
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

tkInter повторение Frame с содержимым

спасибо igor.kaist, я тоже так сделал, со словарем как то удобнее обращаться к виджетам по ключу



Офлайн

  • Начало
  • » GUI
  • » tkInter повторение Frame с содержимым[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version