Найти - Пользователи
Полная версия: Поиск элемента по массиву Tk
Начало » Python для новичков » Поиск элемента по массиву Tk
1 2
Pomidor
День добрый. Подскажите пожалуйста, как решить проблему:
есть массив кнопок в Tkinter (100500 штук), по одной из них кликнули, но не могу узнать, по какой. Подскажите, как получить хоть какую информацию о ней? В идеале - индекс в массиве.
Заранее спасибо)
terabayt
давайте код
Alen
Берем стандартное многокнопочное приложение (калькулятор) и смотрим.



#!/usr/bin/env python3
from tkinter import *
 
def frame(root, side): 
    w = Frame(root)
    w.pack(side=side, expand=YES, fill=BOTH)
    return w
 
def button(root, side, text, command=None): 
    w = Button(root, text=text, command=command) 
    w.pack(side=side, expand=YES, fill=BOTH)
    return w
 
class Calculator(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.option_add('*Font', 'Verdana 12 bold')
        self.pack(expand=YES, fill=BOTH)
        self.master.title('Simple Calculator')
        self.master.iconname("calc1")
 
        display = StringVar()
        Entry(self, relief=SUNKEN, textvariable=display).pack(side=TOP, expand=YES, fill=BOTH)
 
        for key in ("123", "456", "789", "-0."):
            keyF = frame(self, TOP)
            for char in key:
                button(keyF, LEFT, char,
                       lambda w=display, c=char: w.set(w.get() + c))
 
        opsF = frame(self, TOP)
        for char in "+-*/=":
            if char == '=':
                btn = button(opsF, LEFT, char)
                btn.bind('<ButtonRelease-1>',
                          lambda e, s=self, w=display: s.calc(w), '+')
            else:
                btn = button(opsF, LEFT, char,
                   lambda w=display, s=' %s '%char: w.set(w.get()+s))
        clearF = frame(self, BOTTOM)
        button(clearF, LEFT, 'Clr', lambda w=display: w.set(''))
 
    def calc(self, display):
        try:
            display.set(eval(display.get()))
        except:
            display.set("ERROR")
 
if __name__ == '__main__':
    Calculator().mainloop()
Pomidor
Оу, спасибо огромное!
То, что нужно!)
4kpt_III
Код - жуткая лажа… В качестве примера использовать нельзя!
Pomidor
Код как код - главное помог с вопросом…
4kpt_III
Pomidor
Если будете так кодить - станете говнокодером… А так ничего. Код как код

P.S. Ну и если с вопросом помог, то тогда нормально. Но все равно так лучше не писать. Хотя идея передачи аргумента через анонимную функцию показана верно.

P.S.S. Просто этот код могут увидеть новички и будут думать, что такой код есть гуд, что в корне неверно.
Alen
4kpt_III

Код банальная копипаста с первой же ссылки выданной поисковой системой по запросу “python tk Calculator”, с двумя исправлениями для работоспособности, картинка, что характерно, тоже от туда.

Что там ужасного в упор не вижу, разве что eval, да еще exсept широковещательный, ну можно еще к названиям переменных прикопаться, типа не по PEP8.

Основная идея (мудрость, лайфкак) раскрыта в первой же строке: “Не знаешь как, вспомни где подобное применяется – и найди исходник”.
4kpt_III
Alen
Знаете, что уважаю и не буду ругаться
А если по коду, то все… Вообще все. От импорта до функции создания отдельной кнопки. Ну и на бинд вешать лябду, чтобы определить виджет - это вообще апофигительный апофеоз. Для этого есть event, а если быть точным, то event.widget. Который является ссылкой на объект, с которого пришло событие (я об этом писал).

P.S. Там bind - там command. Хит-парад какой-то. Вообще ужасней код еще нужно поискать. Искажено вообще все. Абсолютно. Попытка реализовать ООП вообще не понимая зачем оно в GUI нужно. За эти импорты уже бьюсь не один год… Короче. Вы меня поняли

P.S.S. Лучше было просто привести кусок кода, а не всю эту похабщину. Но это мое личное мнение.
Alen
4kpt_III
Там bind - там command. Хит-парад какой-то.

Чего вы хотите, код с форума по Java.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB