Кнопка Tkinter не регистрирует клик - PullRequest
0 голосов
/ 30 мая 2018

У меня есть следующий класс кнопок tkinter

import tkinter as tk

class Button(GraphicsObject):

"""A button is a labeled rectangle in a window.
It is activated or deactivated with the activate()
and deactivate() methods. The clicked(p) method
returns true if the button is active and p is inside it."""

def __init__(self, p, width, height, label):
    """ Creates a rectangular button, eg: qb = Button(myWin, Point(30,25), 20, 10, 'Quit') """

    GraphicsObject.__init__(self, [])
    self.anchor = p.clone()
    w,h = width/2.0, height/2.0
    self.x, self.y = p.getX(), p.getY()
    self.xmax, self.xmin = self.x+w, self.x-w
    self.ymax, self.ymin = self.y+h, self.y-h
    p1 = Point(self.xmin, self.ymin)
    p2 = Point(self.xmax, self.ymax)
    self.width = width
    self.height = height
    self.rect = Rectangle(p1,p2)
    self.label = label
    self.fill = "white"
    self.color = "black"
    self.font = DEFAULT_CONFIG['font']
    self.activate()

def _draw(self, canvas, options):
    p = self.anchor
    x,y = canvas.toScreen(p.x,p.y)
    #frm = tk.Frame(canvas.master,height = self.height, width = self.width,)
   # frm.pack_propagate(0)
    #frm.pack()
    self.button = tk.Button(canvas.master,
                          height = self.height,
                          width = self.width,
                          text = self.label,
                          bg = self.fill,
                          fg = self.color,
                          font=self.font)
    self.button.place(x = self.x, y = self.y, height =self.height, width = self.width)
    #self.setFill(self.fill)
    self.button.focus_set()
    #return canvas.create_window(x,y,window=self.button)

def clicked(self, p):
    """ RETURNS true if button active and p is inside"""
    return self.active and \
           self.xmin <= p.getX() <= self.xmax and \
           self.ymin <= p.getY() <= self.ymax

def getLabel(self):
    """RETURNS the label string of this button."""
    return self.label.getText()

def setColor(self, color):
    self.color = color

def setFill(self, color):
    self.fill = color

def activate(self):
    """Sets this button to 'active'."""
    self.color = 'black'
    self.rect.setWidth(2)
    self.active = 1

def deactivate(self):
    """Sets this button to 'inactive'."""
    self.color = 'darkgrey'
    self.rect.setWidth(1)
    self.active = 0

Сначала я решил проверить это, вызвав метод, выбранный в следующем цикле:

sign_in_button = Button(Point(237.5,300),80,40,'Sign In')
sign_in_button.draw(login_page)
click_point = login_page.getMouse()
clicked = sign_in_button.clicked(click_point)
print(clicked)
while(clicked == False):
    click_point = login_page.getMouse()
    clicked = sign_in_button.clicked(click_point)
    print(clicked)
print("clicked == True")

Когда я запускаю свою программукнопка правильно отображается в окне, и пока я не нажимаю внутри кнопки, она регистрирует нажатое значение False.Однако, когда я нажимаю на кнопку, ничего не происходит.И print(clicked), и print(clicked == True) никогда не запускаются при нажатии, должно иметь значение True.Нужно ли мне модифицировать свой класс или я просто забыла включить что-то, когда пытаюсь создать Баттон?

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