Форум сайта python.su
Пытаюсь выполнить следующее задание: “Создайте приложение, в котором меняется размер фрейма в зависимости от того, какая из трех объектов-кнопок была нажата.”
Код написал, но фрэйм не меняет размеров после нажатия кнопки. Я так понял, функции выполняются, но фрейм в главном окне не перерисовывается. Как это сделать?
# практическая задача по уроку bind from Tkinter import * f = [25, 25] def df150x25(event): f[0], f[1] = 150, 25 def df70x250(event): f[0], f[1] = 70, 250 def df200x40(event): f[0], f[1] = 200, 40 root = Tk() fra = Frame(root, width=f[0], height=f[1], bg='red') but150x25 = Button(root, text=u'150 x 25', font='Tahoma 8') but70x250 = Button(root, text=u'70 x 250', font='Tahoma 8') but200x40 = Button(root, text=u'200 x 40', font='Tahoma 8') fra.grid(row=0, column=0) but150x25.grid(row=1, column=0) but70x250.grid(row=2, column=0) but200x40.grid(row=3, column=0) fra.pack() but150x25.pack() but70x250.pack() but200x40.pack() but150x25.bind('<Button-1>', df150x25) but70x250.bind('<Button-1>', df70x250) but200x40.bind('<Button-1>', df200x40) root.mainloop()
Офлайн
Во-первых:
Перенести тему в раздел GUI (где она собственно и должна быть :)…
Во-вторых:
Получить от меня ответ на поставленный вопрос.
В-третьих:
Разобраться с полученным ответом и запомнить для себя результат :)
Отредактировано 4kpt (Фев. 19, 2013 21:13:45)
Офлайн
По моему, здесь слишком базовый момент расматривается. Думаю подобная проблема возможна в основном у новичков.
Офлайн
Эта тема относится к GUI. Все, кого интересуют базовые моменты, касающиеся GUI - пишут вопросы там.
Я Вас не подкалываю. Просто, возможно, если у другого новичка возникнет такой же вопрос, он будет искать ответ в разделе GUI. Поверьте мне. Уже сталкивался. :)
P.S. Тему можно просто продублировать, а тут указать перенос :)
Отредактировано 4kpt (Фев. 19, 2013 23:01:10)
Офлайн
Изменение значений в списке не меняет свойств обьектов:
x = [1,2] y = x[0] x[0] = 5 print y
from Tkinter import * root = Tk() fra = Frame(root, width=25, height=25, bg='red') but150x25 = Button(root, text=u'150 x 25', font='Tahoma 8', command=lambda:fra.config(width=150, height=25)) but70x250 = Button(root, text=u'70 x 250', font='Tahoma 8', command=lambda:fra.config(width=70, height=250)) but200x40 = Button(root, text=u'200 x 40', font='Tahoma 8', command=lambda:fra.config(width=200, height=40)) fra.pack() but150x25.pack() but70x250.pack() but200x40.pack() root.mainloop()
Отредактировано Griffon (Фев. 21, 2013 10:12:02)
Офлайн
GriffonУ меня практическая задача по уроку bind, то есть задачу нужно решить с помощью данного метода. А в вашем примере данный метод отсутствует. Да и что такое лямда - по материалу еще нет. Здесь должна использоваться функция на событие и метод бинд - условия задачи.
Изменение значений в списке не меняет свойств обьектов:
Отредактировано caufman (Фев. 21, 2013 12:20:35)
Офлайн
Griffon Абсолютно прав. Технология поиска связанных данных в tkinter отсутствует, посему можно только так…
# практическая задача по уроку bind from Tkinter import * f = [25, 25] def df150x25(event): fra.config(width=150, height=25) def df70x250(event): fra.config(width=70, height=250) def df200x40(event): fra.config(width=200, height=400) root = Tk() root.geometry("600x600+100+100") fra = Frame(root, width=f[0], height=f[1], bg='red') but150x25 = Button(root, text=u'150 x 25', font='Tahoma 8') but70x250 = Button(root, text=u'70 x 250', font='Tahoma 8') but200x40 = Button(root, text=u'200 x 40', font='Tahoma 8') fra.grid(row=0, column=0) but150x25.grid(row=1, column=0) but70x250.grid(row=2, column=0) but200x40.grid(row=3, column=0) fra.pack() but150x25.pack() but70x250.pack() but200x40.pack() but150x25.bind('<Button-1>', df150x25) but70x250.bind('<Button-1>', df70x250) but200x40.bind('<Button-1>', df200x40) root.mainloop()
def call(event, data): print data bt.bind("<Button-1>", call(data))
def call(event, data): print data bt.bind("<Button-1>", lambda event: call(event, data))
Отредактировано 4kpt (Фев. 21, 2013 15:17:06)
Офлайн