Форум сайта python.su
Добрый день. Задача такая: есть массив кнопок и функция, обрабатывающая нажатие на любую из них. Необходимо при ее вызове передать в нее номер нажатой кнопки. Ранее для этой задачи были использованы Entry, Combobox и кусочек кода такого типа:
sv = StringVar() sv.trace("w", lambda name, index, mode, sv=sv: callback(sv))
Офлайн
from Tkinter import * import tkMessageBox class Application(Frame): def createWidgets(self): self.b1 = Button(self) self.b1["text"] = "1" self.b1.bind('<Button-1>', lambda _: self.button_click(1)) self.b1.pack({"side": "left"}) self.b2 = Button(self) self.b2["text"] = "2" self.b2.bind('<Button-1>', lambda _: self.button_click(2)) self.b2.pack({"side": "left"}) def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.createWidgets() def button_click(self, number): tkMessageBox.askokcancel("Number is", number) root = Tk() app = Application(master=root) app.mainloop() root.destroy()
Отредактировано FishHook (Авг. 13, 2013 09:12:26)
Офлайн
Спасибо, помогло.
Офлайн
FishHook
Все верно, но не учли несколько маленьких ньюансов:
1. .bind хорош только с event, а Вы его задушили :) Для простого действия кнопки лучше использовать command…
2. Можно self.b2.pack(side= “left”)
3. Зачем создавать root и при этом наследовать рамку? Если root не будет передан, рамка сама для себя его построит, т.е.
root = Tk() app = Application(master=root)
app = Application()
self.b1["text"] = "1"
self.b1 = Button(self, text="1")
app.mainloop() root.destroy()
Отредактировано 4kpt (Авг. 13, 2013 15:48:45)
Офлайн
4kpt, я понимаю Ваши побуждения, но рекомендую направить критику в адрес авторов руководства по библиотекам питона, ибо пример за небольшим изменением слизан оттуда.
взято тута A Simple Hello World Program
Офлайн
FishHook
Ну не надо же бездумно здирать. Это не Ваш стиль явно :)
P.S. Я просто дал советы. Часть из них носит только рекомендательный характер. Это была не критика в явном понимании этого слова.
Отредактировано 4kpt (Авг. 13, 2013 19:19:16)
Офлайн
4kpt,
Ok, прошу простить, больше так не буду
Офлайн