Python tkinter class 2 кнопки, видна только 1 - PullRequest
0 голосов
/ 04 июня 2018

Я написал класс в python tkinter, который вы можете использовать для создания кнопок, которые изменяют свои изображения при событиях выхода, ввода и кнопки-1.

Сценарий:

from tkinter import *

class ImageButton:

    def CreateButton(self, image, root):
        # --- image setup ---
        self.ImageName = image
        self.ButtonRoot = root
        self.normal = PhotoImage(file="Images/" + self.ImageName + "/normal.png")
        self.hover = PhotoImage(file="Images/" + self.ImageName + "/hover.png")
        self.clicked = PhotoImage(file="Images/" + self.ImageName + "/clicked.png")
        # --- button setup ---
        self.Button = Button(self.ButtonRoot, image=self.normal)
        self.Button.bind("<Leave>", self.normal_event)
        self.Button.bind("<Enter>", self.hover_event)
        self.Button.bind("<Button-1>", self.click_event)
        return self.Button

    def normal_event(self, event):
        self.Button.config(image=self.normal)

    def hover_event(self, event):
        self.Button.config(image=self.hover)

    def click_event(self, event):
        self.Button.config(image=self.clicked)


Root = Tk()
Image = ImageButton()


FirstButton = Image.CreateButton("scann_device", Root)
FirstButton.grid(row=0, column=0)

SecondButton = Image.CreateButton("get_device_info", Root)
SecondButton.grid(row=1, column=0)

Root.mainloop()

Итакесли вы создадите кнопку с этим классом, вы можете делать все, что захотите.Это только связывает это с событиями, которые я упоминал выше.Если вы создаете 1 кнопку, она работает, и вы видите ее в своем окне, но если вы создаете 2 кнопки и сетку / упаковываете их, это не сработает.Похоже это .Вторая кнопка также получает хитбокс первой кнопки.

1 Ответ

0 голосов
/ 04 июня 2018

Вы инициируете только один экземпляр Image.Следовательно, во втором вызове CreateButton() все объекты класса (self.normal, self.ImageName, self.Button) будут перезаписаны новыми значениями.

Вероятно, вам лучше наследовать класс отКнопка tkinter и добавление ваших собственных функций.Смотрите этот пример:

from tkinter import *

class ImageButton(Button):

    def __init__(self, image, root, *args, **kwargs):
        super().__init__(root, *args, **kwargs)
        # --- image setup ---
        self.image_name = image
        self.normal = PhotoImage(file="Images/" + self.image_name + "/normal.png")
        self.hover = PhotoImage(file="Images/" + self.image_name + "/hover.png")
        self.clicked = PhotoImage(file="Images/" + self.image_name + "/clicked.png")
        # --- button setup ---
        self.config(image=self.normal)
        self.bind("<Leave>", self.normal_event)
        self.bind("<Enter>", self.hover_event)
        self.bind("<Button-1>", self.click_event)

    def normal_event(self, event):
        self.config(image=self.normal)

    def hover_event(self, event):
        self.config(image=self.hover)

    def click_event(self, event):
        self.config(image=self.clicked)


root = Tk()

FirstButton = ImageButton("scann_device", root)
FirstButton.grid(row=0, column=0)

SecondButton = ImageButton("get_device_info", root)
SecondButton.grid(row=1, column=0)

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