Как обработать событие нажатия кнопки - PullRequest
7 голосов
/ 29 июля 2011

Я только изучаю Python, и у меня есть базовая концепция, и уже есть несколько программ для командной строки.Сейчас я учусь создавать графические интерфейсы с помощью Tkinter.

Я создал простой графический интерфейс для приема некоторой пользовательской информации из виджета Entry, а затем, когда пользователь нажимает кнопку «Отправить», должен появиться диалоговое окно.

В диалоговом окне должен запрашиваться имя и фамилия .

Проблема в том, что я не знаю, как обрабатывать событие, когда пользователь нажимает кнопку "Отправить".

Вот мой код:

from Tkinter import *

class GUI(Frame):

    def __init__(self,master=None):
        Frame.__init__(self, master)
        self.grid()

        self.fnameLabel = Label(master, text="First Name")
        self.fnameLabel.grid()

        self.fnameEntry = Entry(master)
        self.fnameEntry.grid()

        self.lnameLabel = Label(master, text="Last Name")
        self.lnameLabel.grid()

        self.lnameEntry = Entry(master)
        self.lnameEntry.grid()

        self.submitButton = Button(self.buttonClick, text="Submit")
        self.submitButton.grid()


    def buttonClick(self, event):
        """ handle button click event and output text from entry area"""
        pass


if __name__ == "__main__":
    guiFrame = GUI()
    guiFrame.mainloop()

Ответы [ 3 ]

7 голосов
/ 26 ноября 2011

У вас уже была функция события. Просто исправьте ваш код:

   """Create Submit Button"""
    self.submitButton = Button(master, command=self.buttonClick, text="Submit")
    self.submitButton.grid()

def buttonClick(self):
    """ handle button click event and output text from entry area"""
    print('hello')    # do here whatever you want

Это то же самое, что и в ответе @ Freak, за исключением того, что метод buttonClick() теперь находится вне метода класса __init__. Преимущество состоит в том, что таким образом вы можете вызывать действие программно. Это обычный способ в ООП-кодированных графических интерфейсах.

2 голосов
/ 12 сентября 2011

Я нашел довольно хорошую справку под названием Thinking in Tkinter, и я немного прибавил.Я пытался подогнать его под то, что ты хотел.

from tkinter import *

class GUI(Frame):

    def __init__(self,master=None):
        Frame.__init__(self, master)
        self.grid()

        self.fnameLabel = Label(master, text="First Name")
        self.fnameLabel.grid()

        self.fnameEntry = StringVar()
        self.fnameEntry = Entry(textvariable=self.fnameEntry)
        self.fnameEntry.grid()

        self.lnameLabel = Label(master, text="Last Name")
        self.lnameLabel.grid()

        self.lnameEntry = StringVar()
        self.lnameEntry = Entry(textvariable=self.lnameEntry)
        self.lnameEntry.grid()

        def buttonClick():
            print("You pressed Submit!")
            print(self.fnameEntry.get() + " " + self.lnameEntry.get() +",
                  you clicked the button!")

        self.submitButton = Button(master, text="Submit", command=buttonClick)
        self.submitButton.grid()

if __name__ == "__main__":
    guiFrame = GUI()    
    guiFrame.mainloop()
2 голосов
/ 29 июля 2011

Вы должны указать обработчик или функцию, которая вызывается при нажатии кнопки. Вы можете сделать это, присвоив имя (не вызывая функцию) функции свойству command вашей кнопки.

Например:

self.submitButton = Button(self.buttonClick, text="Submit", command=buttonClick)

Обратите внимание на отсутствие () при назначении buttonClick в качестве свойства command self.submitButton.

Обратите внимание, что вам не нужен второй параметр с именем event в вашем обработчике / функции buttonClick().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...