Запрос графического интерфейса Python

#python #user-interface #tkinter

Вопрос:

Я только начал работать над python и пытался создать небольшой пользовательский интерфейс. У меня есть несколько похожих окон с кнопкой на нем и функцией обратного вызова, связанной с кнопкой. Есть ли способ узнать, из какого окна была нажата кнопка. Мне нужно знать, из какого окна было нажато «Создать сообщение». аргументом x будет номер окна, из которого нажата кнопка

 for x in range(num):
    Label(newWindow, text="Enter TTL").grid(row=1, column=0)
            TTL = Entry(newWindow, width=10, borderwidth=5)
            TTL.grid(row=1, column=1)
            #ttl = int(TTL.get())
            Label(newWindow, text="Enter Direction").grid(row=2, column=0)
            direction = Ent`enter code here`ry(newWindow, width=10, borderwidth=5)
            direction.grid(row=2, column=1)
            #dir = int(direction.get())
            Button(newWindow, text="Create Message",
            command=lambda: threading.Thread(target=create_message, args=(TTL, direction,x,)).start()).grid(row=4,
                                                                                                                column=0)
 

введите описание изображения здесь

Комментарии:

1. Это одна из причин, почему Tkinter-такое дерьмо. Вы МОЖЕТЕ сделать это, записав переменные в лямбду при назначении обратного вызова, но это некрасиво. Если вы действительно заинтересованы в создании графических интерфейсов Python, пожалуйста, найдите время, чтобы изучить один из реальных фреймворков, таких как Qt/PySide или wxPython.

2. Спасибо за ответ, Тим, я только начал работать над Python, позже я попытаюсь изучить другие варианты.

3. Нам будет легче помочь вам, если вы опубликуете минимальный пример.

4. Вы можете сделать два отдельных окна, как это — window1 = Tk() и window2 = Tk() . Чтобы вы знали, в каком окне была нажата кнопка. Но наличие нескольких экземпляров Tk() -это проблема

5. Ваш код не создает несколько окон. Он создает виджеты только внутри одного окна newWindow . Также исправьте отступы в вашем коде.